aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2016-10-17 18:45:08 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2016-10-17 18:45:08 -0400
commiteaeaad7b8c876856bc6e25503a2e619fbd74e290 (patch)
tree4f1fea496a6c62b9ae1710e10e04aefa5a0db063
parenta3b3aaf8695e71a6c71b63d2b29ce8998035be49 (diff)
downloadveracrypt-eaeaad7b8c876856bc6e25503a2e619fbd74e290.tar.bz2
veracrypt-eaeaad7b8c876856bc6e25503a2e619fbd74e290.tar.xz
veracrypt-eaeaad7b8c876856bc6e25503a2e619fbd74e290.tar.zst
Imported Upstream version 1.19+repackupstream/1.19+repack
-rw-r--r--.gitattributes50
-rw-r--r--License.txt744
-rw-r--r--README.md22
-rw-r--r--Tests/bench.bat642
-rw-r--r--Translations/Language.ar.xml2
-rw-r--r--Translations/Language.be.xml2
-rw-r--r--Translations/Language.bg.xml2
-rw-r--r--Translations/Language.ca.xml2
-rw-r--r--Translations/Language.cs.xml738
-rw-r--r--Translations/Language.da.xml2
-rw-r--r--Translations/Language.de.xml168
-rw-r--r--Translations/Language.el.xml2
-rw-r--r--Translations/Language.es.xml2
-rw-r--r--Translations/Language.et.xml2
-rw-r--r--Translations/Language.eu.xml2
-rw-r--r--Translations/Language.fa.xml2
-rw-r--r--Translations/Language.fi.xml2
-rw-r--r--Translations/Language.fr.xml2
-rw-r--r--Translations/Language.hu.xml2
-rw-r--r--Translations/Language.id.xml2
-rw-r--r--Translations/Language.it.xml2
-rw-r--r--Translations/Language.ja.xml2
-rw-r--r--Translations/Language.ka.xml2
-rw-r--r--Translations/Language.ko.xml2
-rw-r--r--Translations/Language.lv.xml2
-rw-r--r--Translations/Language.my.xml2
-rw-r--r--Translations/Language.nl.xml204
-rw-r--r--Translations/Language.nn.xml2
-rw-r--r--Translations/Language.pl.xml2
-rw-r--r--Translations/Language.pt-br.xml2
-rw-r--r--Translations/Language.ru.xml54
-rw-r--r--Translations/Language.sk.xml2
-rw-r--r--Translations/Language.sl.xml2
-rw-r--r--Translations/Language.sv.xml2
-rw-r--r--Translations/Language.tr.xml2
-rw-r--r--Translations/Language.uk.xml2
-rw-r--r--Translations/Language.uz.xml2
-rw-r--r--Translations/Language.vi.xml2
-rw-r--r--Translations/Language.zh-cn.xml2
-rw-r--r--Translations/Language.zh-hk.xml2
-rw-r--r--Translations/Language.zh-tw.xml2
-rw-r--r--doc/VeraCrypt User Guide.odtbin2266019 -> 2267017 bytes
-rw-r--r--src/Boot/EFI/DcsBml32.efibin0 -> 6912 bytes
-rw-r--r--src/Boot/EFI/DcsBoot.efibin12640 -> 12704 bytes
-rw-r--r--src/Boot/EFI/DcsBoot32.efibin0 -> 10080 bytes
-rw-r--r--src/Boot/EFI/DcsCfg.efibin499264 -> 489088 bytes
-rw-r--r--src/Boot/EFI/DcsCfg32.efibin0 -> 484928 bytes
-rw-r--r--src/Boot/EFI/DcsInt.efibin469696 -> 459392 bytes
-rw-r--r--src/Boot/EFI/DcsInt32.efibin0 -> 471584 bytes
-rw-r--r--src/Boot/EFI/DcsRe.efibin18304 -> 18656 bytes
-rw-r--r--src/Boot/EFI/DcsRe32.efibin0 -> 14688 bytes
-rw-r--r--src/Boot/EFI/LegacySpeaker32.efibin0 -> 2528 bytes
-rw-r--r--src/Boot/Windows/Boot.vcproj500
-rw-r--r--src/Boot/Windows/BootCommon.h2
-rw-r--r--src/Boot/Windows/BootConsoleIo.cpp6
-rw-r--r--src/Boot/Windows/BootMain.cpp5
-rw-r--r--src/Boot/Windows/Makefile2
-rw-r--r--src/Build/Resources/MacOSX/Info.plist.xml2
-rwxr-xr-xsrc/Build/Tools/MacOSX/yasmbin0 -> 892672 bytes
-rw-r--r--src/Common/Apidrvr.h2
-rw-r--r--src/Common/BootEncryption.cpp404
-rw-r--r--src/Common/BootEncryption.h30
-rw-r--r--src/Common/Common.rc1250
-rw-r--r--src/Common/Crypto.c42
-rw-r--r--src/Common/Crypto.h6
-rw-r--r--src/Common/Dlgcode.c34
-rw-r--r--src/Common/Dlgcode.h3
-rw-r--r--src/Common/Format.c2
-rw-r--r--src/Common/Keyfiles.c51
-rw-r--r--src/Common/Password.c2
-rw-r--r--src/Common/Pkcs5.c104
-rw-r--r--src/Common/Random.c4
-rw-r--r--src/Common/Resource.h8
-rw-r--r--src/Common/Tcdefs.h8
-rw-r--r--src/Common/Tests.c178
-rw-r--r--src/Common/Volumes.c43
-rw-r--r--src/Common/Volumes.h2
-rw-r--r--src/Common/XUnzip.cpp4405
-rw-r--r--src/Common/XUnzip.h382
-rw-r--r--src/Common/XZip.cpp3215
-rw-r--r--src/Common/XZip.h323
-rw-r--r--src/Common/Xts.c4
-rw-r--r--src/Common/libzip/LICENSE31
-rw-r--r--src/Common/libzip/NEWS.md159
-rw-r--r--src/Common/libzip/compat.h181
-rw-r--r--src/Common/libzip/config.h72
-rw-r--r--src/Common/libzip/mkstemp.c150
-rw-r--r--src/Common/libzip/zip.h422
-rw-r--r--src/Common/libzip/zip_add.c50
-rw-r--r--src/Common/libzip/zip_add_dir.c45
-rw-r--r--src/Common/libzip/zip_add_entry.c81
-rw-r--r--src/Common/libzip/zip_buffer.c321
-rw-r--r--src/Common/libzip/zip_close.c492
-rw-r--r--src/Common/libzip/zip_delete.c70
-rw-r--r--src/Common/libzip/zip_dir_add.c93
-rw-r--r--src/Common/libzip/zip_dirent.c913
-rw-r--r--src/Common/libzip/zip_discard.c79
-rw-r--r--src/Common/libzip/zip_entry.c53
-rw-r--r--src/Common/libzip/zip_err_str.c80
-rw-r--r--src/Common/libzip/zip_error.c155
-rw-r--r--src/Common/libzip/zip_error_clear.c45
-rw-r--r--src/Common/libzip/zip_error_get.c57
-rw-r--r--src/Common/libzip/zip_error_get_sys_type.c45
-rw-r--r--src/Common/libzip/zip_error_strerror.c87
-rw-r--r--src/Common/libzip/zip_error_to_str.c68
-rw-r--r--src/Common/libzip/zip_extra_field.c438
-rw-r--r--src/Common/libzip/zip_extra_field_api.c366
-rw-r--r--src/Common/libzip/zip_fclose.c55
-rw-r--r--src/Common/libzip/zip_fdopen.c85
-rw-r--r--src/Common/libzip/zip_file_add.c53
-rw-r--r--src/Common/libzip/zip_file_error_clear.c45
-rw-r--r--src/Common/libzip/zip_file_error_get.c42
-rw-r--r--src/Common/libzip/zip_file_get_comment.c56
-rw-r--r--src/Common/libzip/zip_file_get_external_attributes.c51
-rw-r--r--src/Common/libzip/zip_file_get_offset.c73
-rw-r--r--src/Common/libzip/zip_file_rename.c68
-rw-r--r--src/Common/libzip/zip_file_replace.c108
-rw-r--r--src/Common/libzip/zip_file_set_comment.c103
-rw-r--r--src/Common/libzip/zip_file_set_external_attributes.c83
-rw-r--r--src/Common/libzip/zip_file_set_mtime.c74
-rw-r--r--src/Common/libzip/zip_file_strerror.c42
-rw-r--r--src/Common/libzip/zip_filerange_crc.c76
-rw-r--r--src/Common/libzip/zip_fopen.c47
-rw-r--r--src/Common/libzip/zip_fopen_encrypted.c47
-rw-r--r--src/Common/libzip/zip_fopen_index.c45
-rw-r--r--src/Common/libzip/zip_fopen_index_encrypted.c86
-rw-r--r--src/Common/libzip/zip_fread.c63
-rw-r--r--src/Common/libzip/zip_get_archive_comment.c59
-rw-r--r--src/Common/libzip/zip_get_archive_flag.c46
-rw-r--r--src/Common/libzip/zip_get_compression_implementation.c44
-rw-r--r--src/Common/libzip/zip_get_encryption_implementation.c44
-rw-r--r--src/Common/libzip/zip_get_file_comment.c51
-rw-r--r--src/Common/libzip/zip_get_name.c60
-rw-r--r--src/Common/libzip/zip_get_num_entries.c53
-rw-r--r--src/Common/libzip/zip_get_num_files.c52
-rw-r--r--src/Common/libzip/zip_hash.c267
-rw-r--r--src/Common/libzip/zip_io_util.c138
-rw-r--r--src/Common/libzip/zip_memdup.c57
-rw-r--r--src/Common/libzip/zip_name_locate.c94
-rw-r--r--src/Common/libzip/zip_new.c74
-rw-r--r--src/Common/libzip/zip_open.c853
-rw-r--r--src/Common/libzip/zip_rename.c45
-rw-r--r--src/Common/libzip/zip_replace.c43
-rw-r--r--src/Common/libzip/zip_set_archive_comment.c82
-rw-r--r--src/Common/libzip/zip_set_archive_flag.c67
-rw-r--r--src/Common/libzip/zip_set_default_password.c59
-rw-r--r--src/Common/libzip/zip_set_file_comment.c49
-rw-r--r--src/Common/libzip/zip_set_file_compression.c87
-rw-r--r--src/Common/libzip/zip_set_name.c158
-rw-r--r--src/Common/libzip/zip_source_begin_write.c53
-rw-r--r--src/Common/libzip/zip_source_buffer.c435
-rw-r--r--src/Common/libzip/zip_source_call.c69
-rw-r--r--src/Common/libzip/zip_source_close.c58
-rw-r--r--src/Common/libzip/zip_source_commit_write.c64
-rw-r--r--src/Common/libzip/zip_source_crc.c202
-rw-r--r--src/Common/libzip/zip_source_deflate.c415
-rw-r--r--src/Common/libzip/zip_source_error.c42
-rw-r--r--src/Common/libzip/zip_source_file.c63
-rw-r--r--src/Common/libzip/zip_source_filep.c503
-rw-r--r--src/Common/libzip/zip_source_free.c72
-rw-r--r--src/Common/libzip/zip_source_function.c99
-rw-r--r--src/Common/libzip/zip_source_is_deleted.c42
-rw-r--r--src/Common/libzip/zip_source_layered.c69
-rw-r--r--src/Common/libzip/zip_source_open.c73
-rw-r--r--src/Common/libzip/zip_source_pkware.c226
-rw-r--r--src/Common/libzip/zip_source_read.c50
-rw-r--r--src/Common/libzip/zip_source_remove.c61
-rw-r--r--src/Common/libzip/zip_source_rollback_write.c47
-rw-r--r--src/Common/libzip/zip_source_seek.c92
-rw-r--r--src/Common/libzip/zip_source_seek_write.c52
-rw-r--r--src/Common/libzip/zip_source_stat.c63
-rw-r--r--src/Common/libzip/zip_source_supports.c68
-rw-r--r--src/Common/libzip/zip_source_tell.c50
-rw-r--r--src/Common/libzip/zip_source_tell_write.c47
-rw-r--r--src/Common/libzip/zip_source_win32a.c124
-rw-r--r--src/Common/libzip/zip_source_win32handle.c607
-rw-r--r--src/Common/libzip/zip_source_win32utf8.c79
-rw-r--r--src/Common/libzip/zip_source_win32w.c124
-rw-r--r--src/Common/libzip/zip_source_window.c253
-rw-r--r--src/Common/libzip/zip_source_write.c47
-rw-r--r--src/Common/libzip/zip_source_zip.c59
-rw-r--r--src/Common/libzip/zip_source_zip_new.c173
-rw-r--r--src/Common/libzip/zip_stat.c47
-rw-r--r--src/Common/libzip/zip_stat_index.c86
-rw-r--r--src/Common/libzip/zip_stat_init.c85
-rw-r--r--src/Common/libzip/zip_strerror.c42
-rw-r--r--src/Common/libzip/zip_string.c188
-rw-r--r--src/Common/libzip/zip_unchange.c95
-rw-r--r--src/Common/libzip/zip_unchange_all.c55
-rw-r--r--src/Common/libzip/zip_unchange_archive.c52
-rw-r--r--src/Common/libzip/zip_unchange_data.c55
-rw-r--r--src/Common/libzip/zip_utf-8.c249
-rw-r--r--src/Common/libzip/zipconf.h121
-rw-r--r--src/Common/libzip/zipint.h465
-rw-r--r--src/Common/libzip/zipwin32.h82
-rw-r--r--src/Common/zlib/README115
-rw-r--r--src/Common/zlib/adler32.c179
-rw-r--r--src/Common/zlib/compress.c80
-rw-r--r--src/Common/zlib/crc32.c425
-rw-r--r--src/Common/zlib/crc32.h441
-rw-r--r--src/Common/zlib/deflate.c1967
-rw-r--r--src/Common/zlib/deflate.h346
-rw-r--r--src/Common/zlib/gzclose.c25
-rw-r--r--src/Common/zlib/gzguts.h209
-rw-r--r--src/Common/zlib/gzlib.c634
-rw-r--r--src/Common/zlib/gzread.c594
-rw-r--r--src/Common/zlib/gzwrite.c577
-rw-r--r--src/Common/zlib/infback.c640
-rw-r--r--src/Common/zlib/inffast.c340
-rw-r--r--src/Common/zlib/inffast.h11
-rw-r--r--src/Common/zlib/inffixed.h94
-rw-r--r--src/Common/zlib/inflate.c1512
-rw-r--r--src/Common/zlib/inflate.h122
-rw-r--r--src/Common/zlib/inftrees.c306
-rw-r--r--src/Common/zlib/inftrees.h62
-rw-r--r--src/Common/zlib/trees.c1226
-rw-r--r--src/Common/zlib/trees.h128
-rw-r--r--src/Common/zlib/uncompr.c59
-rw-r--r--src/Common/zlib/zconf.h511
-rw-r--r--src/Common/zlib/zlib.h1768
-rw-r--r--src/Common/zlib/zutil.c324
-rw-r--r--src/Common/zlib/zutil.h253
-rw-r--r--src/Core/RandomNumberGenerator.cpp2
-rw-r--r--src/Core/Unix/MacOSX/CoreMacOSX.cpp33
-rw-r--r--src/Crypto/Crypto.vcproj1174
-rw-r--r--src/Crypto/Crypto.vcxproj6
-rw-r--r--src/Crypto/Crypto.vcxproj.filters18
-rw-r--r--src/Crypto/GostCipher.c45
-rw-r--r--src/Crypto/GostCipher.h5
-rw-r--r--src/Crypto/SerpentFast.c318
-rw-r--r--src/Crypto/SerpentFast.h28
-rw-r--r--src/Crypto/SerpentFast_sbox.h437
-rw-r--r--src/Crypto/SerpentFast_simd.cpp338
-rw-r--r--src/Crypto/Sources3
-rw-r--r--src/Crypto/Twofish.c555
-rw-r--r--src/Crypto/Twofish.h3
-rw-r--r--src/Crypto/cpu.c4
-rw-r--r--src/Crypto/cpu.h42
-rw-r--r--src/Crypto/gost89_x64.asm174
-rw-r--r--src/Crypto/misc.h9
-rw-r--r--src/Driver/BuildDriver.cmd368
-rw-r--r--src/Driver/DriveFilter.c11
-rw-r--r--src/Driver/Driver.rc202
-rw-r--r--src/Driver/Driver.vcproj796
-rw-r--r--src/Driver/Driver.vcxproj3
-rw-r--r--src/Driver/Driver.vcxproj.filters9
-rw-r--r--src/Driver/Ntdriver.c13
-rw-r--r--src/ExpandVolume/ExpandVolume.c2
-rw-r--r--src/ExpandVolume/ExpandVolume.rc596
-rw-r--r--src/ExpandVolume/ExpandVolume.vcproj1954
-rw-r--r--src/ExpandVolume/ExpandVolume.vcxproj184
-rw-r--r--src/ExpandVolume/ExpandVolume.vcxproj.filters392
-rw-r--r--src/Format/Format.rc1494
-rw-r--r--src/Format/Format.vcproj2056
-rw-r--r--src/Format/Format.vcxproj189
-rw-r--r--src/Format/Format.vcxproj.filters392
-rw-r--r--src/Format/InPlace.c4
-rw-r--r--src/Format/Tcformat.c4
-rw-r--r--src/License.html45
-rw-r--r--src/License.txt148
-rw-r--r--src/Main/Forms/AboutDialog.cpp9
-rw-r--r--src/Main/Forms/EncryptionOptionsWizardPage.cpp2
-rw-r--r--src/Main/Forms/VolumeCreationWizard.cpp1
-rw-r--r--src/Main/Forms/VolumePimWizardPage.cpp3
-rw-r--r--src/Main/GraphicUserInterface.cpp6
-rw-r--r--src/Main/Main.make5
-rw-r--r--src/Main/UserInterface.cpp2
-rw-r--r--src/Makefile50
-rw-r--r--src/Mount/Mount.rc1478
-rw-r--r--src/Mount/Mount.vcproj2054
-rw-r--r--src/Mount/Mount.vcxproj185
-rw-r--r--src/Mount/Mount.vcxproj.filters395
-rw-r--r--src/Platform/Buffer.cpp37
-rw-r--r--src/Platform/Buffer.h14
-rw-r--r--src/Platform/Memory.cpp28
-rw-r--r--src/Platform/Memory.h2
-rw-r--r--src/Readme.txt23
-rw-r--r--src/Release/Setup Files/License.txt110
-rw-r--r--src/Release/Setup Files/NOTICE110
-rw-r--r--src/Release/Setup Files/VeraCrypt User Guide.pdfbin2895098 -> 2896857 bytes
-rw-r--r--src/Release/Setup Files/veracrypt-x64.sysbin0 -> 467368 bytes
-rw-r--r--src/Release/Setup Files/veracrypt.sysbin0 -> 516264 bytes
-rw-r--r--src/Resources/Texts/License.rtf24
-rwxr-xr-xsrc/Setup/MacOSX/veracrypt.pkgproj55
-rw-r--r--src/Setup/SelfExtract.c157
-rw-r--r--src/Setup/Setup.c18
-rw-r--r--src/Setup/Setup.rc654
-rw-r--r--src/Setup/Setup.vcproj968
-rw-r--r--src/Setup/Setup.vcxproj163
-rw-r--r--src/Setup/Setup.vcxproj.filters401
-rw-r--r--src/Setup/Wizard.c10
-rw-r--r--src/Signing/sign.bat54
-rw-r--r--src/Signing/sign_test.bat62
-rw-r--r--src/VeraCrypt.sln890
-rw-r--r--src/Volume/Cipher.cpp76
-rw-r--r--src/Volume/Cipher.h3
-rw-r--r--src/Volume/EncryptionAlgorithm.cpp2
-rw-r--r--src/Volume/EncryptionTest.cpp116
-rw-r--r--src/Volume/Volume.make3
299 files changed, 42736 insertions, 18585 deletions
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index d828040..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1,50 +0,0 @@
-# Set the default behavior, in case people don't have core.autocrlf set.
-* text=auto
-
-# Explicitly declare text files that could be normalized and converted
-# to native line endings on checkout. However, as per the policy they're
-# supposed to have LF endings on all platforms.
-*.[ch] text diff=cpp eol=lf
-*.[ch]pp text diff=cpp eol=lf
-*.asm text eol=lf
-Makefile text eol=lf
-*.make text eol=lf
-*.mk text eol=lf
-*.inc text eol=lf
-*.md text eol=lf
-*.xml text eol=lf
-*.xpm text -diff -merge eol=lf
-*.pem text -diff -merge eol=lf
-*.cer text -diff -merge eol=lf
-*.manifest text eol=lf
-*.sh text eol=lf
-*.txt text eol=lf
-*.html text diff=html eol=lf
-*.idl text eol=lf
-*.fbp text eol=lf
-*.rgs text eol=lf
-*.pkgproj text eol=lf
-Sources text eol=lf
-
-# Declare files that will always have LF line endings on checkout.
-*.desktop text eol=lf
-
-# Declare files that will always have CRLF line endings on checkout.
-*.sln text eol=crlf
-*.vcproj text eol=crlf
-*.rc text eol=crlf
-*.bat text eol=crlf
-*.cmd text eol=crlf
-
-# Denote all files that are truly binary and should not be modified.
-*.png binary
-*.jpg binary
-*.pdf binary
-*.bmp binary
-*.ico binary
-*.od[fgpst] binary
-*.hc binary
-*.icns binary
-*.rtf binary
-*.bz2 binary
-*.pfx binary
diff --git a/License.txt b/License.txt
new file mode 100644
index 0000000..675207e
--- /dev/null
+++ b/License.txt
@@ -0,0 +1,744 @@
+VeraCrypt License
+Software distributed under this license is distributed on an "AS
+IS" BASIS WITHOUT WARRANTIES OF ANY KIND. THE AUTHORS AND
+DISTRIBUTORS OF THE SOFTWARE DISCLAIM ANY LIABILITY. ANYONE WHO
+USES, COPIES, MODIFIES, OR (RE)DISTRIBUTES ANY PART OF THE
+SOFTWARE IS, BY SUCH ACTION(S), ACCEPTING AND AGREEING TO BE
+BOUND BY ALL TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT
+ACCEPT THEM, DO NOT USE, COPY, MODIFY, NOR (RE)DISTRIBUTE THE
+SOFTWARE, NOR ANY PART(S) THEREOF.
+
+VeraCrypt is multi-licensed under Apache License 2.0 and
+the TrueCrypt License version 3.0, a verbatim copy of both
+licenses can be found below.
+
+This license does not grant you rights to use any
+contributors' name, logo, or trademarks, including IDRIX,
+VeraCrypt and all derivative names.
+For example, the following names are not allowed: VeraCrypt,
+VeraCrypt+, VeraCrypt Professional, iVeraCrypt, etc. Nor any
+other names confusingly similar to the name VeraCrypt (e.g.,
+Vera-Crypt, Vera Crypt, VerKrypt, etc.)
+____________________________________________________________
+
+ Apache License
+ Version 2.0, January 2004
+ https://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+____________________________________________________________
+
+TrueCrypt License Version 3.0
+
+Software distributed under this license is distributed on an "AS
+IS" BASIS WITHOUT WARRANTIES OF ANY KIND. THE AUTHORS AND
+DISTRIBUTORS OF THE SOFTWARE DISCLAIM ANY LIABILITY. ANYONE WHO
+USES, COPIES, MODIFIES, OR (RE)DISTRIBUTES ANY PART OF THE
+SOFTWARE IS, BY SUCH ACTION(S), ACCEPTING AND AGREEING TO BE
+BOUND BY ALL TERMS AND CONDITIONS OF THIS LICENSE. IF YOU DO NOT
+ACCEPT THEM, DO NOT USE, COPY, MODIFY, NOR (RE)DISTRIBUTE THE
+SOFTWARE, NOR ANY PART(S) THEREOF.
+
+
+I. Definitions
+
+1. "This Product" means the work (including, but not limited to,
+source code, graphics, texts, and accompanying files) made
+available under and governed by this version of this license
+("License"), as may be indicated by, but is not limited to,
+copyright notice(s) attached to or included in the work.
+
+2. "You" means (and "Your" refers to) an individual or a legal
+entity (e.g., a non-profit organization, commercial
+organization, government agency, etc.) exercising permissions
+granted by this License.
+
+3. "Modification" means (and "modify" refers to) any alteration
+of This Product, including, but not limited to, addition to or
+deletion from the substance or structure of This Product,
+translation into another language, repackaging, alteration or
+removal of any file included with This Product, and addition of
+any new files to This Product.
+
+4. "Your Product" means This Product modified by You, or any
+work You derive from (or base on) any part of This Product. In
+addition, "Your Product" means any work in which You include any
+(modified or unmodified) portion of This Product. However, if
+the work in which you include it is an aggregate software
+distribution (such as an operating system distribution or a
+cover CD-ROM of a magazine) containing multiple separate
+products, then the term "Your Product" includes only those
+products (in the aggregate software distribution) that use,
+include, or depend on a modified or unmodified version of This
+Product (and the term "Your Product" does not include the whole
+aggregate software distribution). For the purposes of this
+License, a product suite consisting of two or more products is
+considered a single product (operating system distributions and
+cover media of magazines are not considered product suites).
+
+5. "Distribution" means (and "distribute" refers to), regardless
+of means or methods, conveyance, transfer, providing, or making
+available of This/Your Product or portions thereof to third
+parties (including, but not limited to, making This/Your
+Product, or portions thereof, available for download to third
+parties, whether or not any third party has downloaded the
+product, or any portion thereof, made available for download).
+
+
+
+II. Use, Copying, and Distribution of This Product
+
+1. Provided that You comply with all applicable terms and
+conditions of this License, You may make copies of This Product
+(unmodified) and distribute copies of This Product (unmodified)
+that are not included in another product forming Your Product
+(except as permitted under Chapter III). Note: For terms and
+conditions for copying and distribution of modified versions of
+This Product, see Chapter III.
+
+2. Provided that You comply with all applicable terms and
+conditions of this License, You may use This Product freely (see
+also Chapter III) on any number of computers/systems for non-
+commercial and/or commercial purposes.
+
+
+
+III. Modification, Derivation, and Inclusion in Other Products
+
+1. If all conditions specified in the following paragraphs in
+this Chapter (III) are met (for exceptions, see Section III.2)
+and if You comply with all other applicable terms and conditions
+of this License, You may modify This Product (thus forming Your
+Product), derive new works from This Product or portions thereof
+(thus forming Your Product), include This Product or portions
+thereof in another product (thus forming Your Product, unless
+defined otherwise in Chapter I), and You may use (for non-
+commercial and/or commercial purposes), copy, and/or distribute
+Your Product.
+
+ a. The name of Your Product (or of Your modified version of
+ This Product) must not contain the name TrueCrypt (for
+ example, the following names are not allowed: TrueCrypt,
+ TrueCrypt+, TrueCrypt Professional, iTrueCrypt, etc.) nor
+ any other names confusingly similar to the name TrueCrypt
+ (e.g., True-Crypt, True Crypt, TruKrypt, etc.)
+
+ All occurrences of the name TrueCrypt that could reasonably
+ be considered to identify Your Product must be removed from
+ Your Product and from any associated materials. Logo(s)
+ included in (or attached to) Your Product (and in/to
+ associated materials) must not incorporate and must not be
+ confusingly similar to any of the TrueCrypt logos
+ (including, but not limited to, the non-textual logo
+ consisting primarily of a key in stylized form) or
+ portion(s) thereof. All graphics contained in This Product
+ (logos, icons, etc.) must be removed from Your Product (or
+ from Your modified version of This Product) and from any
+ associated materials.
+
+ b. The following phrases must be removed from Your Product
+ and from any associated materials, except the text of this
+ License: "A TrueCrypt Foundation Release", "Released by
+ TrueCrypt Foundation", "This is a TrueCrypt Foundation
+ release."
+
+ c. Phrase "Based on TrueCrypt, freely available at
+ http://www.truecrypt.org/" must be displayed by Your Product
+ (if technically feasible) and contained in its
+ documentation. Alternatively, if This Product or its portion
+ You included in Your Product constitutes only a minor
+ portion of Your Product, phrase "Portions of this product
+ are based in part on TrueCrypt, freely available at
+ http://www.truecrypt.org/" may be displayed instead. In each
+ of the cases mentioned above in this paragraph,
+ "http://www.truecrypt.org/" must be a hyperlink (if
+ technically feasible) pointing to http://www.truecrypt.org/
+ and You may freely choose the location within the user
+ interface (if there is any) of Your Product (e.g., an
+ "About" window, etc.) and the way in which Your Product will
+ display the respective phrase.
+
+ Your Product (and any associated materials, e.g., the
+ documentation, the content of the official web site of Your
+ Product, etc.) must not present any Internet address
+ containing the domain name truecrypt.org (or any domain name
+ that forwards to the domain name truecrypt.org) in a manner
+ that might suggest that it is where information about Your
+ Product may be obtained or where bugs found in Your Product
+ may be reported or where support for Your Product may be
+ available or otherwise attempt to indicate that the domain
+ name truecrypt.org is associated with Your Product.
+
+ d. The complete source code of Your Product must be freely
+ and publicly available (for exceptions, see Section III.2)
+ at least until You cease to distribute Your Product. This
+ condition can be met in one or both of the following ways:
+ (i) You include the complete source code of Your Product
+ with every copy of Your Product that You make and distribute
+ and You make all such copies of Your Product available to
+ the general public free of charge, and/or (ii) You include
+ information (valid and correct at least until You cease to
+ distribute Your Product) about where the complete source
+ code of Your Product can be obtained free of charge (e.g.,
+ an Internet address) or for a reasonable reproduction fee
+ with every copy of Your Product that You make and distribute
+ and, if there is a web site officially associated with Your
+ Product, You include the aforementioned information about
+ the source code on a freely and publicly accessible web
+ page to which such web site links via an easily viewable
+ hyperlink (at least until You cease to distribute Your
+ Product).
+
+ The source code of Your Product must not be deliberately
+ obfuscated and it must not be in an intermediate form (e.g.,
+ the output of a preprocessor). Source code means the
+ preferred form in which a programmer would usually modify
+ the program.
+
+ Portions of the source code of Your Product not contained in
+ This Product (e.g., portions added by You in creating Your
+ Product, whether created by You or by third parties) must be
+ available under license(s) that (however, see also
+ Subsection III.1.e) allow(s) anyone to modify and derive new
+ works from the portions of the source code that are not
+ contained in This Product and to use, copy, and redistribute
+ such modifications and/or derivative works. The license(s)
+ must be perpetual, non-exclusive, royalty-free, no-charge,
+ and worldwide, and must not invalidate, weaken, restrict,
+ interpret, amend, modify, interfere with or otherwise affect
+ any part, term, provision, or clause of this License. The
+ text(s) of the license(s) must be included with every copy
+ of Your Product that You make and distribute.
+
+ e. You must not change the license terms of This Product in
+ any way (adding any new terms is considered changing the
+ license terms even if the original terms are retained),
+ which means, e.g., that no part of This Product may be put
+ under another license. You must keep intact all the legal
+ notices contained in the source code files. You must include
+ the following items with every copy of Your Product that You
+ make and distribute: a clear and conspicuous notice stating
+ that Your Product or portion(s) thereof is/are governed by
+ this version of the TrueCrypt License, a verbatim copy of
+ this version of the TrueCrypt License (as contained herein),
+ a clear and conspicuous notice containing information about
+ where the included copy of the License can be found, and an
+ appropriate copyright notice.
+
+
+2. You are not obligated to comply with Subsection III.1.d if
+Your Product is not distributed (i.e., Your Product is available
+only to You).
+
+
+
+IV. Disclaimer of Liability, Disclaimer of Warranty,
+Indemnification
+
+You expressly acknowledge and agree to the following:
+
+1. IN NO EVENT WILL ANY (CO)AUTHOR OF THIS PRODUCT, OR ANY
+APPLICABLE INTELLECTUAL-PROPERTY OWNER, OR ANY OTHER PARTY WHO
+MAY COPY AND/OR (RE)DISTRIBUTE THIS PRODUCT OR PORTIONS THEREOF,
+AS MAY BE PERMITTED HEREIN, BE LIABLE TO YOU OR TO ANY OTHER
+PARTY FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, ANY
+DIRECT, INDIRECT, GENERAL, SPECIAL, INCIDENTAL, PUNITIVE,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, CORRUPTION OR LOSS OF DATA, ANY LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES, A FAILURE OF THIS PRODUCT TO OPERATE WITH ANY
+OTHER PRODUCT, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR
+BUSINESS INTERRUPTION), WHETHER IN CONTRACT, STRICT LIABILITY,
+TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE) OR OTHERWISE,
+ARISING OUT OF THE USE, COPYING, MODIFICATION, OR
+(RE)DISTRIBUTION OF THIS PRODUCT (OR A PORTION THEREOF) OR OF
+YOUR PRODUCT (OR A PORTION THEREOF), OR INABILITY TO USE THIS
+PRODUCT (OR A PORTION THEREOF), EVEN IF SUCH DAMAGES (OR THE
+POSSIBILITY OF SUCH DAMAGES) ARE/WERE PREDICTABLE OR KNOWN TO
+ANY (CO)AUTHOR, INTELLECTUAL-PROPERTY OWNER, OR ANY OTHER PARTY.
+
+2. THIS PRODUCT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+KIND, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
+LIMITED TO, THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THIS PRODUCT IS WITH YOU. SHOULD
+THIS PRODUCT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+3. THIS PRODUCT MAY INCORPORATE IMPLEMENTATIONS OF CRYPTOGRAPHIC
+ALGORITHMS THAT ARE REGULATED (E.G., SUBJECT TO EXPORT/IMPORT
+CONTROL REGULATIONS) OR ILLEGAL IN SOME COUNTRIES. IT IS SOLELY
+YOUR RESPONSIBILITY TO VERIFY THAT IT IS LEGAL TO IMPORT AND/OR
+(RE)EXPORT AND/OR USE THIS PRODUCT (OR PORTIONS THEREOF) IN
+COUNTRIES WHERE YOU INTEND TO USE IT AND/OR TO WHICH YOU INTEND
+TO IMPORT IT AND/OR FROM WHICH YOU INTEND TO EXPORT IT, AND IT
+IS SOLELY YOUR RESPONSIBILITY TO COMPLY WITH ANY APPLICABLE
+REGULATIONS, RESTRICTIONS, AND LAWS.
+
+4. YOU SHALL INDEMNIFY, DEFEND AND HOLD ALL (CO)AUTHORS OF THIS
+PRODUCT, AND APPLICABLE INTELLECTUAL-PROPERTY OWNERS, HARMLESS
+FROM AND AGAINST ANY AND ALL LIABILITY, DAMAGES, LOSSES,
+SETTLEMENTS, PENALTIES, FINES, COSTS, EXPENSES (INCLUDING
+REASONABLE ATTORNEYS' FEES), DEMANDS, CAUSES OF ACTION, CLAIMS,
+ACTIONS, PROCEEDINGS, AND SUITS, DIRECTLY RELATED TO OR ARISING
+OUT OF YOUR USE, INABILITY TO USE, COPYING, (RE)DISTRIBUTION,
+IMPORT AND/OR (RE)EXPORT OF THIS PRODUCT (OR PORTIONS THEREOF)
+AND/OR YOUR BREACH OF ANY TERM OF THIS LICENSE.
+
+
+
+V. Trademarks
+
+This License does not grant permission to use trademarks
+associated with (or applying to) This Product, except for fair
+use as defined by applicable law and except for use expressly
+permitted or required by this License. Any attempt otherwise to
+use trademarks associated with (or applying to) This Product
+automatically and immediately terminates Your rights under This
+License and may constitute trademark infringement (which may be
+prosecuted).
+
+
+
+VI. General Terms and Conditions, Miscellaneous Provisions
+
+1. ANYONE WHO USES AND/OR COPIES AND/OR MODIFIES AND/OR CREATES
+DERIVATIVE WORKS OF AND/OR (RE)DISTRIBUTES THIS PRODUCT, OR ANY
+PORTION(S) THEREOF, IS, BY SUCH ACTION(S), AGREEING TO BE BOUND
+BY AND ACCEPTING ALL TERMS AND CONDITIONS OF THIS LICENSE (AND
+THE RESPONSIBILITIES AND OBLIGATIONS CONTAINED IN THIS LICENSE).
+IF YOU DO NOT ACCEPT (AND AGREE TO BE BOUND BY) ALL TERMS AND
+CONDITIONS OF THIS LICENSE, DO NOT USE, COPY, MODIFY, CREATE
+DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS PRODUCT, NOR ANY
+PORTION(S) THEREOF.
+
+2. YOU MAY NOT USE, MODIFY, COPY, CREATE DERIVATIVE WORKS OF,
+(RE)DISTRIBUTE, OR SUBLICENSE THIS PRODUCT, OR PORTION(S)
+THEREOF, EXCEPT AS EXPRESSLY PROVIDED IN THIS LICENSE (EVEN IF
+APPLICABLE LAW GIVES YOU MORE RIGHTS). ANY ATTEMPT (EVEN IF
+PERMITTED BY APPLICABLE LAW) OTHERWISE TO USE, MODIFY, COPY,
+CREATE DERIVATIVE WORKS OF, (RE)DISTRIBUTE, OR SUBLICENSE THIS
+PRODUCT, OR PORTION(S) THEREOF, AUTOMATICALLY AND IMMEDIATELY
+TERMINATES YOUR RIGHTS UNDER THIS LICENSE AND CAN CONSTITUTE
+COPYRIGHT INFRINGEMENT (WHICH MAY BE PROSECUTED). ANY CONDITIONS
+AND RESTRICTIONS CONTAINED IN THIS LICENSE ARE ALSO LIMITATIONS
+ON THE SCOPE OF THIS LICENSE AND ALSO DEFINE THE SCOPE OF YOUR
+RIGHTS UNDER THIS LICENSE. YOUR FAILURE TO COMPLY WITH THE TERMS
+AND CONDITIONS OF THIS LICENSE OR FAILURE TO PERFORM ANY
+APPLICABLE OBLIGATION IMPOSED BY THIS LICENSE AUTOMATICALLY AND
+IMMEDIATELY TERMINATES YOUR RIGHTS UNDER THIS LICENSE AND CAN
+CAUSE OR BE CONSIDERED COPYRIGHT INFRINGEMENT (WHICH MAY BE
+PROSECUTED). NOTHING IN THIS LICENSE SHALL IMPLY OR BE CONSTRUED
+AS A PROMISE, OBLIGATION, OR COVENANT NOT TO SUE FOR COPYRIGHT
+OR TRADEMARK INFRINGEMENT IF YOU DO NOT COMPLY WITH THE TERMS
+AND CONDITIONS OF THIS LICENSE.
+
+3. This License does not constitute or imply a waiver of any
+intellectual property rights except as may be otherwise
+expressly provided in this License. This License does not
+transfer, assign, or convey any intellectual property rights
+(e.g., it does not transfer ownership of copyrights or
+trademarks).
+
+4. Subject to the terms and conditions of this License, You may
+allow a third party to use Your copy of This Product (or a copy
+that You make and distribute, or Your Product) provided that the
+third party explicitly accepts and agrees to be bound by all
+terms and conditions of this License and the third party is not
+prohibited from using This Product (or portions thereof) by this
+License (see, e.g., Section VI.7) or by applicable law. However,
+You are not obligated to ensure that the third party accepts
+(and agrees to be bound by all terms of) this License if You
+distribute only the self-extracting package (containing This
+Product) that does not allow the user to install (nor extract)
+the files contained in the package until he or she accepts and
+agrees to be bound by all terms and conditions of this License.
+
+5. Without specific prior written permission from the authors of
+This Product (or from their common representative), You must not
+use the name of This Product, the names of the authors of This
+Product, or the names of the legal entities (or informal groups)
+of which the authors were/are members/employees, to endorse or
+promote Your Product or any work in which You include a modified
+or unmodified version of This Product, or to endorse or promote
+You or Your affiliates, or in a way that might suggest that Your
+Product (or any work in which You include a modified or
+unmodified version of This Product), You, or Your affiliates
+is/are endorsed by one or more authors of This Product, or in a
+way that might suggest that one or more authors of This Product
+is/are affiliated with You (or Your affiliates) or directly
+participated in the creation of Your Product or of any work in
+which You include a modified or unmodified version of This
+Product.
+
+6. IF YOU ARE NOT SURE WHETHER YOU UNDERSTAND ALL PARTS OF THIS
+LICENSE OR IF YOU ARE NOT SURE WHETHER YOU CAN COMPLY WITH ALL
+TERMS AND CONDITIONS OF THIS LICENSE, YOU MUST NOT USE, COPY,
+MODIFY, CREATE DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS
+PRODUCT, NOR ANY PORTION(S) OF IT. YOU SHOULD CONSULT WITH A
+LAWYER.
+
+7. IF (IN RELEVANT CONTEXT) ANY PROVISION OF CHAPTER IV OF THIS
+LICENSE IS UNENFORCEABLE, INVALID, OR PROHIBITED UNDER
+APPLICABLE LAW IN YOUR JURISDICTION, YOU HAVE NO RIGHTS UNDER
+THIS LICENSE AND YOU MUST NOT USE, COPY, MODIFY, CREATE
+DERIVATIVE WORKS OF, NOR (RE)DISTRIBUTE THIS PRODUCT, NOR ANY
+PORTION(S) THEREOF.
+
+8. Except as otherwise provided in this License, if any
+provision of this License, or a portion thereof, is found to be
+invalid or unenforceable under applicable law, it shall not
+affect the validity or enforceability of the remainder of this
+License, and such invalid or unenforceable provision shall be
+construed to reflect the original intent of the provision and
+shall be enforced to the maximum extent permitted by applicable
+law so as to effect the original intent of the provision as
+closely as possible.
+
+____________________________________________________________
+
+
+Third-Party Licenses
+
+This Product contains components that were created by third
+parties and that are governed by third-party licenses, which are
+contained hereinafter (separated by lines consisting of
+underscores). Each of the third-party licenses applies only to
+(portions of) the source code file(s) in which the third-party
+license is contained or in which it is explicitly referenced,
+and to compiled or otherwise processed forms of such source
+code. None of the third-party licenses applies to This Product
+as a whole, even when it uses terms such as "product",
+"program", or any other equivalent terms/phrases. This Product
+as a whole is governed by the TrueCrypt License (see above).
+Some of the third-party components have been modified by the
+authors of This Product. Unless otherwise stated, such
+modifications and additions are governed by the TrueCrypt
+License (see above). Note: Unless otherwise stated, graphics and
+files that are not part of the source code are governed by the
+TrueCrypt License.
+
+____________________________________________________________
+
+License agreement for Encryption for the Masses.
+
+Copyright (C) 1998-2000 Paul Le Roux. All Rights Reserved.
+
+This product can be copied and distributed free of charge,
+including source code.
+
+You may modify this product and source code, and distribute such
+modifications, and you may derive new works based on this
+product, provided that:
+
+1. Any product which is simply derived from this product cannot
+be called E4M, or Encryption for the Masses.
+
+2. If you use any of the source code in your product, and your
+product is distributed with source code, you must include this
+notice with those portions of this source code that you use.
+
+Or,
+
+If your product is distributed in binary form only, you must
+display on any packaging, and marketing materials which
+reference your product, a notice which states:
+
+"This product uses components written by Paul Le Roux
+<pleroux@swprofessionals.com>"
+
+3. If you use any of the source code originally by Eric Young,
+you must in addition follow his terms and conditions.
+
+4. Nothing requires that you accept this License, as you have
+not signed it. However, nothing else grants you permission to
+modify or distribute the product or its derivative works.
+
+These actions are prohibited by law if you do not accept this
+License.
+
+5. If any of these license terms is found to be to broad in
+scope, and declared invalid by any court or legal process, you
+agree that all other terms shall not be so affected, and shall
+remain valid and enforceable.
+
+6. THIS PROGRAM IS DISTRIBUTED FREE OF CHARGE, THEREFORE THERE
+IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. UNLESS OTHERWISE STATED THE PROGRAM IS PROVIDED
+"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.
+
+7. 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 HAD
+PREVIOUSLY BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+____________________________________________________________
+
+Copyright (c) 1998-2008, Brian Gladman, Worcester, UK.
+All rights reserved.
+
+LICENSE TERMS
+
+The free distribution and use of this software is allowed (with
+or without changes) provided that:
+
+ 1. source code distributions include the above copyright
+ notice, this list of conditions and the following
+ disclaimer;
+
+ 2. binary distributions include the above copyright notice,
+ this list of conditions and the following disclaimer in
+ their documentation;
+
+ 3. the name of the copyright holder is not used to endorse
+ products built using this software without specific written
+ permission.
+
+DISCLAIMER
+
+This software is provided 'as is' with no explicit or implied
+warranties in respect of its properties, including, but not
+limited to, correctness and/or fitness for purpose.
+____________________________________________________________
+
+Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+____________________________________________________________
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+____________________________________________________________
+Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
+
+____________________________________________________________
+Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
+This program and the accompanying materials are licensed and made available
+under the terms and conditions of the GNU Lesser General Public License,
+version 3.0 (LGPL-3.0).
+
+The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0
+____________________________________________________________
diff --git a/README.md b/README.md
index 2eb01c5..41eabe9 100644
--- a/README.md
+++ b/README.md
@@ -48,8 +48,6 @@ Requirements for Building VeraCrypt for Windows:
- Microsoft Windows SDK for Windows 7.1 (configured for Visual C++ 2010)
- Microsoft Windows SDK for Windows 8.1 (needed for SHA-256 code signing)
- Microsoft Windows Driver Kit 7.1.0 (build 7600.16385.1)
-- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
- header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20)
- NASM assembler 2.08 or compatible
- gzip compressor
- upx packer (available at http://upx.sourceforge.net/)
@@ -90,17 +88,13 @@ Instructions for Building VeraCrypt for Windows:
directory than '%SYSTEMDRIVE%\WinDDK', create an environment variable
'WINDDK_ROOT' pointing to the DDK installation directory.
-3) Copy the PKCS #11 header files to a standard include path or create an
- environment variable 'PKCS11_INC' pointing to the directory where
- the PKCS #11 header files are installed.
+3) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2010.
-4) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2010.
+4) Select 'All' as the active solution configuration.
-5) Select 'All' as the active solution configuration.
+5) Build the solution.
-6) Build the solution.
-
-7) If successful, there should be newly built VeraCrypt binaries in the
+6) If successful, there should be newly built VeraCrypt binaries in the
'Release' folder.
Instructions for Signing and Packaging VeraCrypt for Windows:
@@ -141,10 +135,6 @@ Requirements for Building VeraCrypt for Linux and Mac OS X:
wxWidgets 3.0 library source code (available at http://www.wxwidgets.org)
- FUSE library and header files (available at https://github.com/libfuse/libfuse
and https://osxfuse.github.io/)
-- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
- header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20).
- They are already included in the source tree under the directory PKCS11 but
- it is possible to override it using the environment variable 'PKCS11_INC'.
Instructions for Building VeraCrypt for Linux and Mac OS X:
@@ -255,9 +245,9 @@ Copyright (c) 2013-2016 IDRIX. All rights reserved.
Copyright (c) 2003-2012 TrueCrypt Developers Association. All rights reserved.
Copyright (c) 1998-2000 Paul Le Roux. All rights reserved.
Copyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.
-Copyright (c) 2002-2004 Mark Adler. All rights reserved.
+Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler.
Copyright (c) 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
-Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
+Copyright (c) Dieter Baron and Thomas Klausner.
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
For more information, please see the legal notices attached to parts of the
diff --git a/Tests/bench.bat b/Tests/bench.bat
index 392c0a4..ec21ed0 100644
--- a/Tests/bench.bat
+++ b/Tests/bench.bat
@@ -1,321 +1,321 @@
-@echo off
-
-setlocal
-
-call :freedrive mydriveletter && goto :cont
-echo ERROR: No free drive letter found.
-goto :exit
-:cont
-
-echo Using drive letter %mydriveletter%: for our tests
-echo.
-
-IF NOT EXIST test.sha512.hc GOTO :whirlpool
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount SHA-512 container (Normal)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password test /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo SHA-512 (Normal) = %hh%:%mm%:%ss%,%cc%
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount SHA-512 container (Hidden)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password testhidden /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo SHA-512 (Hidden) = %hh%:%mm%:%ss%,%cc%
-echo.
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-:whirlpool
-
-IF NOT EXIST test.whirlpool.hc GOTO :sha256
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount Whirlpool container (Normal).
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password test /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo Whirlpool (Normal) = %hh%:%mm%:%ss%,%cc%
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount Whirlpool container (Hidden).
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password testhidden /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo Whirlpool (Hidden) = %hh%:%mm%:%ss%,%cc%
-echo.
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-:sha256
-
-IF NOT EXIST test.sha256.hc GOTO :ripemd160
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount SHA-256 container (Normal)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password test /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo SHA-256 (Normal) = %hh%:%mm%:%ss%,%cc%
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount SHA-256 container (Hidden)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password testhidden /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo SHA-256 (Hidden) = %hh%:%mm%:%ss%,%cc%
-echo.
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-:ripemd160
-
-IF NOT EXIST test.ripemd160.hc GOTO :autodetect
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount RIPEMD-160 container (Normal)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password test /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo RIPEMD-160 (Normal) = %hh%:%mm%:%ss%,%cc%
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Mount RIPEMD-160 container (Hidden)
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password testhidden /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo RIPEMD-160 (Hidden) = %hh%:%mm%:%ss%,%cc%
-echo.
-
-"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
-
-:autodetect
-
-call :availablevolume testvolume && goto :contautodetect
-goto :exit
-:contautodetect
-
-rem Get start time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Try to mount with a wrong password and PRF autodetection
-"c:\Program Files\VeraCrypt\veracrypt.exe" /volume %testvolume% /l %mydriveletter% /password wrongpassword /q /silent /m ro
-
-rem Get end time:
-for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
- set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
-)
-
-rem Get elapsed time:
-set /A elapsed=end-start
-
-rem Show elapsed time:
-set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
-if %hh% lss 10 set hh=0%hh%
-if %mm% lss 10 set mm=0%mm%
-if %ss% lss 10 set ss=0%ss%
-if %cc% lss 10 set cc=0%cc%
-echo Wrong Password (PRF Auto-detection)= %hh%:%mm%:%ss%,%cc%
-echo.
-
-
-goto :exit
-
-rem Finds a free drive letter.
-rem
-rem Parameters:
-rem %1 = Output variable name.
-rem
-rem Example:
-rem call :freedrive mydriveletter && goto :cont
-rem echo ERROR: No free drive letter found.
-rem goto :EOF
-rem :cont
-rem echo Found drive letter: %mydriveletter%
-:freedrive
-setlocal EnableDelayedExpansion
-set exitcode=0
-set "output_var=%~1"
-for %%i in (C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
- set "drive=%%i:"
- rem If 'subst' fails, the drive letter is already in use.
- rem This way we can even detect optical drives that have a drive
- rem letter but no media in them, a case that goes undetected when
- rem using 'if exist'.
- subst !drive! %SystemDrive%\ >nul
- if !errorlevel! == 0 (
- subst !drive! /d >nul
- set "drive=%%i"
- goto :freedrive0
- )
-)
-set exitcode=1
-set drive=
-:freedrive0
-endlocal & set "%output_var%=%drive%" & exit /b %exitcode%
-
-:availablevolume
-setlocal EnableDelayedExpansion
-set exitcode=0
-set "output_var=%~1"
-for %%i in (test.sha512.hc,test.sha256.hc,test.whirlpool.hc,test.ripemd160.hc) do (
- if exist %%i (
- set "volume=%%i"
- goto :availablevolume0
- )
-)
-set exitcode=1
-set volume=
-:availablevolume0
-endlocal & set "%output_var%=%volume%" & exit /b %exitcode%
-
-:exit
+@echo off
+
+setlocal
+
+call :freedrive mydriveletter && goto :cont
+echo ERROR: No free drive letter found.
+goto :exit
+:cont
+
+echo Using drive letter %mydriveletter%: for our tests
+echo.
+
+IF NOT EXIST test.sha512.hc GOTO :whirlpool
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount SHA-512 container (Normal)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password test /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo SHA-512 (Normal) = %hh%:%mm%:%ss%,%cc%
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount SHA-512 container (Hidden)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha512.hc /hash sha512 /l %mydriveletter% /password testhidden /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo SHA-512 (Hidden) = %hh%:%mm%:%ss%,%cc%
+echo.
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+:whirlpool
+
+IF NOT EXIST test.whirlpool.hc GOTO :sha256
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount Whirlpool container (Normal).
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password test /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo Whirlpool (Normal) = %hh%:%mm%:%ss%,%cc%
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount Whirlpool container (Hidden).
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.whirlpool.hc /hash whirlpool /l %mydriveletter% /password testhidden /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo Whirlpool (Hidden) = %hh%:%mm%:%ss%,%cc%
+echo.
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+:sha256
+
+IF NOT EXIST test.sha256.hc GOTO :ripemd160
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount SHA-256 container (Normal)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password test /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo SHA-256 (Normal) = %hh%:%mm%:%ss%,%cc%
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount SHA-256 container (Hidden)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.sha256.hc /hash sha256 /l %mydriveletter% /password testhidden /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo SHA-256 (Hidden) = %hh%:%mm%:%ss%,%cc%
+echo.
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+:ripemd160
+
+IF NOT EXIST test.ripemd160.hc GOTO :autodetect
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount RIPEMD-160 container (Normal)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password test /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo RIPEMD-160 (Normal) = %hh%:%mm%:%ss%,%cc%
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Mount RIPEMD-160 container (Hidden)
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume test.ripemd160.hc /hash ripemd160 /l %mydriveletter% /password testhidden /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo RIPEMD-160 (Hidden) = %hh%:%mm%:%ss%,%cc%
+echo.
+
+"c:\Program Files\VeraCrypt\veracrypt.exe" /dismount %mydriveletter% /silent /q
+
+:autodetect
+
+call :availablevolume testvolume && goto :contautodetect
+goto :exit
+:contautodetect
+
+rem Get start time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Try to mount with a wrong password and PRF autodetection
+"c:\Program Files\VeraCrypt\veracrypt.exe" /volume %testvolume% /l %mydriveletter% /password wrongpassword /q /silent /m ro
+
+rem Get end time:
+for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
+ set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
+)
+
+rem Get elapsed time:
+set /A elapsed=end-start
+
+rem Show elapsed time:
+set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100
+if %hh% lss 10 set hh=0%hh%
+if %mm% lss 10 set mm=0%mm%
+if %ss% lss 10 set ss=0%ss%
+if %cc% lss 10 set cc=0%cc%
+echo Wrong Password (PRF Auto-detection)= %hh%:%mm%:%ss%,%cc%
+echo.
+
+
+goto :exit
+
+rem Finds a free drive letter.
+rem
+rem Parameters:
+rem %1 = Output variable name.
+rem
+rem Example:
+rem call :freedrive mydriveletter && goto :cont
+rem echo ERROR: No free drive letter found.
+rem goto :EOF
+rem :cont
+rem echo Found drive letter: %mydriveletter%
+:freedrive
+setlocal EnableDelayedExpansion
+set exitcode=0
+set "output_var=%~1"
+for %%i in (C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
+ set "drive=%%i:"
+ rem If 'subst' fails, the drive letter is already in use.
+ rem This way we can even detect optical drives that have a drive
+ rem letter but no media in them, a case that goes undetected when
+ rem using 'if exist'.
+ subst !drive! %SystemDrive%\ >nul
+ if !errorlevel! == 0 (
+ subst !drive! /d >nul
+ set "drive=%%i"
+ goto :freedrive0
+ )
+)
+set exitcode=1
+set drive=
+:freedrive0
+endlocal & set "%output_var%=%drive%" & exit /b %exitcode%
+
+:availablevolume
+setlocal EnableDelayedExpansion
+set exitcode=0
+set "output_var=%~1"
+for %%i in (test.sha512.hc,test.sha256.hc,test.whirlpool.hc,test.ripemd160.hc) do (
+ if exist %%i (
+ set "volume=%%i"
+ goto :availablevolume0
+ )
+)
+set exitcode=1
+set volume=
+:availablevolume0
+endlocal & set "%output_var%=%volume%" & exit /b %exitcode%
+
+:exit
diff --git a/Translations/Language.ar.xml b/Translations/Language.ar.xml
index f070740..dbc8d93 100644
--- a/Translations/Language.ar.xml
+++ b/Translations/Language.ar.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ar" name="العربية" en-name="Arabic" version="0.2.0" translators="Ahmad Gharbeia, Khaled Hosny, Ali Khojah" />
<!-- Fonts -->
diff --git a/Translations/Language.be.xml b/Translations/Language.be.xml
index 85720fb..c1b03b5 100644
--- a/Translations/Language.be.xml
+++ b/Translations/Language.be.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="be" name="Беларуская" en-name="Belarusian" version="0.1.0" translators="Aleg Azarousky" />
<!-- Fonts -->
diff --git a/Translations/Language.bg.xml b/Translations/Language.bg.xml
index 32e7b14..7ed5bd3 100644
--- a/Translations/Language.bg.xml
+++ b/Translations/Language.bg.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="bg" name="Български" en-name="Bulgarian" version="0.1.0" translators="Lachezar Gorchev" />
<!-- Fonts -->
diff --git a/Translations/Language.ca.xml b/Translations/Language.ca.xml
index 8823e54..6fc39d7 100644
--- a/Translations/Language.ca.xml
+++ b/Translations/Language.ca.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ca" name="Català" en-name="Catalan" version="0.1.0" translators="CESICAT, Centre de Seguretat de la Informació de Catalunya" />
<!-- Fonts -->
diff --git a/Translations/Language.cs.xml b/Translations/Language.cs.xml
index 90704d9..0d72654 100644
--- a/Translations/Language.cs.xml
+++ b/Translations/Language.cs.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
- <language langid="cs" name="Čeština" en-name="Czech" version="1.0.0" translators="Vítek Moser" />
+ <language langid="cs" name="Čeština" en-name="Czech" version="1.1.0" translators="Vítek Moser, Lagardere" />
<!-- Fonts -->
<font lang="cs" class="normal" size="11" face="default" />
<font lang="cs" class="bold" size="13" face="Arial" />
@@ -16,7 +16,7 @@
<control lang="cs" key="IDC_DONATE">Podpořte nás...</control>
<control lang="cs" key="IDC_FILE_TYPE">Asociovat pří&amp;ponu .hc s programem VeraCrypt</control>
<control lang="cs" key="IDC_OPEN_CONTAINING_FOLDER">&amp;Otevřít cílovou složku po dokončení</control>
- <control lang="cs" key="IDC_PROG_GROUP">Přidat VeraCrypt do &amp;Start menu</control>
+ <control lang="cs" key="IDC_PROG_GROUP">Přidat VeraCrypt do nabídky &amp;Start</control>
<control lang="cs" key="IDC_SYSTEM_RESTORE">Vytvořit bod o&amp;bnovení</control>
<control lang="cs" key="IDC_UNINSTALL">Odinsta&amp;lovat</control>
<control lang="cs" key="IDC_WIZARD_MODE_EXTRACT_ONLY">&amp;Rozbalit</control>
@@ -41,16 +41,16 @@
<control lang="cs" key="IDC_HIDDEN_SYSENC_INFO_LINK">Více informací</control>
<control lang="cs" key="IDC_HIDDEN_VOL">S&amp;krytý svazek VeraCrypt</control>
<control lang="cs" key="IDC_HIDDEN_VOL_HELP">Více informací o skrytých svazcích</control>
- <control lang="cs" key="IDC_HIDVOL_WIZ_MODE_DIRECT">Přímý mód</control>
- <control lang="cs" key="IDC_HIDVOL_WIZ_MODE_FULL">Normální mód</control>
+ <control lang="cs" key="IDC_HIDVOL_WIZ_MODE_DIRECT">Přímý režim</control>
+ <control lang="cs" key="IDC_HIDVOL_WIZ_MODE_FULL">Normální režim</control>
<control lang="cs" key="IDC_KB">&amp;KB</control>
<control lang="cs" key="IDC_KEYFILES_ENABLE">&amp;Použít souborové klíče</control>
- <control lang="en" key="IDC_KEYFILES_TRY_EMPTY_PASSWORD">Try first to mount with an empty password</control>
- <control lang="en" key="IDC_KEYFILES_RANDOM_SIZE">Random size ( 64 &lt;-&gt; 1048576 )</control>
+ <control lang="cs" key="IDC_KEYFILES_TRY_EMPTY_PASSWORD">Zkuste to nejdříve připojit s prázdným heslem</control>
+ <control lang="cs" key="IDC_KEYFILES_RANDOM_SIZE">Náhodná velikost ( 64 &lt;-&gt; 1048576 )</control>
<control lang="cs" key="IDC_KEY_FILES">Souborové &amp;klíče…</control>
<control lang="cs" key="IDC_LINK_HASH_INFO">Informace o hash. algoritmech</control>
<control lang="cs" key="IDC_LINK_MORE_INFO_ABOUT_CIPHER">Více informací</control>
- <control lang="en" key="IDC_LINK_PIM_INFO">Information on PIM</control>
+ <control lang="cs" key="IDC_LINK_PIM_INFO">Informace o PIM</control>
<control lang="cs" key="IDC_MB">&amp;MB</control>
<control lang="cs" key="IDC_MORE_INFO_ON_CONTAINERS">Více informací</control>
<control lang="cs" key="IDC_MORE_INFO_ON_SYS_ENCRYPTION">Více informací o zašifrování systému</control>
@@ -60,12 +60,12 @@
<control lang="cs" key="IDC_NO_HISTORY">Neukládat &amp;historii</control>
<control lang="cs" key="IDC_OPEN_OUTER_VOLUME">Otevřít vnější svazek</control>
<control lang="cs" key="IDC_PAUSE">&amp;Pauza</control>
- <control lang="en" key="IDC_PIM_ENABLE">Use P&amp;IM</control>
- <control lang="en" key="IDC_NEW_PIM_ENABLE">Use PIM</control>
+ <control lang="cs" key="IDC_PIM_ENABLE">Použít P&amp;IM</control>
+ <control lang="cs" key="IDC_NEW_PIM_ENABLE">Použít PIM</control>
<control lang="cs" key="IDC_QUICKFORMAT">Rychle zformátovat</control>
- <control lang="cs" key="IDC_SHOW_PASSWORD">&amp;Ukázat heslo</control>
+ <control lang="cs" key="IDC_SHOW_PASSWORD">&amp;Zobrazit heslo</control>
<control lang="cs" key="IDC_SHOW_PASSWORD_SINGLE">&amp;Zobrazit heslo</control>
- <control lang="en" key="IDC_SHOW_PIM">&amp;Display PIM</control>
+ <control lang="cs" key="IDC_SHOW_PIM">&amp;Zobrazit PIM</control>
<control lang="cs" key="IDC_SINGLE_BOOT">Jednoduché bootování</control>
<control lang="cs" key="IDC_STD_VOL">Standardní svazek VeraCrypt</control>
<control lang="cs" key="IDC_SYSENC_HIDDEN">S&amp;krytý</control>
@@ -78,50 +78,50 @@
<control lang="cs" key="IDT_COLLECTING_RANDOM_DATA_NOTE">DŮLEŽITÉ: Pohybujte s myší v tomto okně co nejnáhodněji. Čím déle s ní budete hýbat, tím lépe. Kryptografická síla šifrovacích klíčů se tím výrazně zvýší. Pro pokračování klikněte na Další.</control>
<control lang="cs" key="IDT_CONFIRM">&amp;Potvrdit:</control>
<control lang="cs" key="IDT_DONE">Hotovo</control>
- <control lang="en" key="IDT_DRIVE_LETTER">Drive letter:</control>
+ <control lang="cs" key="IDT_DRIVE_LETTER">Písmeno jednotky:</control>
<control lang="cs" key="IDT_ENCRYPTION_ALGO">Šifrovací algoritmus</control>
<control lang="cs" key="IDT_FILESYSTEM">Systém souborů</control>
<control lang="cs" key="IDT_FILE_CONTAINER">Vytvoří virtuální zašifrovaný disk uvnitř souboru. Doporučené pro nezkušené uživatele.</control>
- <control lang="cs" key="IDT_FORMAT_OPTIONS">Předvolby</control>
+ <control lang="cs" key="IDT_FORMAT_OPTIONS">Možnosti</control>
<control lang="cs" key="IDT_HASH_ALGO">Hashovací algoritmus</control>
<control lang="cs" key="IDT_HEADER_KEY">Klíč hlavičky:</control>
<control lang="cs" key="IDT_LEFT">Zbývá</control>
<control lang="cs" key="IDT_MASTER_KEY">Hlavní klíč:</control>
- <control lang="cs" key="IDT_MULTI_BOOT">Vyberte tuto volbu, je-li na tomto počítači nainstalováno více operačních systémů.\n\nNapříklad:\n- Windows XP a Windows XP\n- Windows XP a Windows Vista\n- Windows a Mac OS X\n- Windows a Linux\n- Windows, Linux a Mac OS X</control>
+ <control lang="cs" key="IDT_MULTI_BOOT">Vyberte tuto možnost, je-li na tomto počítači nainstalováno více operačních systémů.\n\nNapříklad:\n- Windows XP a Windows XP\n- Windows XP a Windows Vista\n- Windows a Mac OS X\n- Windows a Linux\n- Windows, Linux a Mac OS X</control>
<control lang="cs" key="IDT_NON_SYS_DEVICE">Zašifruje nesystémový oddíl na jakémkoliv interním nebo externím disku (např. flash disk). Volitelně může vytvořit skrytý svazek.</control>
<control lang="cs" key="IDT_PARTIAL_POOL_CONTENTS">Momentálně generovaný obsah (částečný)</control>
<control lang="cs" key="IDT_PASS">Schváleno</control>
<control lang="cs" key="IDT_PASSWORD">Heslo:</control>
- <control lang="en" key="IDT_PIM">Volume PIM:</control>
- <control lang="en" key="IDT_OLD_PIM">Volume PIM:</control>
+ <control lang="cs" key="IDT_PIM">Svazek PIM:</control>
+ <control lang="cs" key="IDT_OLD_PIM">Svazek PIM:</control>
<control lang="cs" key="IDT_PROGRESS">Průběh:</control>
<control lang="cs" key="IDT_RANDOM_POOL">Náhodný výběr:</control>
- <control lang="cs" key="IDT_SINGLE_BOOT">Vyberte tuto volbu, pokud je na tomto počítači nainstalován pouze jeden operační systém (i v případě, že má více uživatelů).</control>
+ <control lang="cs" key="IDT_SINGLE_BOOT">Vyberte tuto možnost, pokud je na tomto počítači nainstalován pouze jeden operační systém (i v případě, že má více uživatelů).</control>
<control lang="cs" key="IDT_SPEED">Rychlost</control>
<control lang="cs" key="IDT_STATUS">Stav</control>
<control lang="cs" key="IDT_SYSENC_KEYS_GEN_INFO">Klíče, sůl (=náhodná data), a další data byla úspěšně vygenerována. Chcete-li vygenerovat nové klíče, vyberte Zpět a poté Další. Jinak klikněte na Další pro pokračování.</control>
<control lang="cs" key="IDT_SYS_DEVICE">Zašifruje oddíl/disk, kde jsou nainstalovány Windows. Kdokoliv kdo bude chtít získat přístup a používat systém, číst a zapisovat soubory atd., musí zadat správné heslo před každým naběhnutím Windows. Volitelně lze vytvořit skrytý systém.</control>
<control lang="cs" key="IDT_SYS_PARTITION">Zvolte tuto možnost pro zašifrování oddílu, kde je aktuálně nainstalován operační systém Windows.</control>
- <control lang="en" key="IDT_VOLUME_LABEL">Volume Label in Windows:</control>
- <control lang="cs" key="IDT_WIPE_MODE">Čistící mód:</control>
+ <control lang="cs" key="IDT_VOLUME_LABEL">Název disku ve Windows:</control>
+ <control lang="cs" key="IDT_WIPE_MODE">Čistící režim:</control>
<control lang="cs" key="IDCLOSE">Zavřít</control>
<control lang="cs" key="IDC_ALLOW_ESC_PBA_BYPASS">Povolit přeskočení před-bootovací &amp;autentifikace stisknutím klávesy Esc (zapne boot manažera)</control>
<control lang="cs" key="IDC_AUTORUN_DISABLE">Nedělat nic</control>
<control lang="cs" key="IDC_AUTORUN_MOUNT">&amp;Automaticky připojit svazek VeraCrypt (uvedeno níže)</control>
<control lang="cs" key="IDC_AUTORUN_START">&amp;Spustit VeraCrypt</control>
<control lang="cs" key="IDC_AUTO_DETECT_PKCS11_MODULE">&amp;Detekovat knihovny automaticky</control>
- <control lang="cs" key="IDC_BOOT_LOADER_CACHE_PASSWORD">&amp;Ukládat před-bootovací autentifikační heslo v mezipaměti ovladače (pro připojení nesystémových svazků)</control>
+ <control lang="cs" key="IDC_BOOT_LOADER_CACHE_PASSWORD">&amp;Uložit před-bootovací autentifikační heslo v mezipaměti ovladače (pro připojení nesystémových svazků)</control>
<control lang="cs" key="IDC_BROWSE_DIRS">Procházet…</control>
<control lang="cs" key="IDC_BROWSE_FILES">Procházet…</control>
- <control lang="cs" key="IDC_CACHE">Ukládat &amp;hesla a soub. klíče do mezipaměti</control>
- <control lang="cs" key="IDC_CLOSE_BKG_TASK_WHEN_NOVOL">Skončit pokud neexistuje žádný připoj. svazek</control>
+ <control lang="cs" key="IDC_CACHE">Uložit &amp;hesla a souborové klíče do mezipaměti</control>
+ <control lang="cs" key="IDC_CLOSE_BKG_TASK_WHEN_NOVOL">Ukončit, neexistuje-li žádný připojený svazek</control>
<control lang="cs" key="IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT">&amp;Zavřít relaci tokenu (odhlášení) po úspěšném odpojení svazku</control>
- <control lang="en" key="IDC_COPY_EXPANDER">Include VeraCrypt Volume Expander</control>
+ <control lang="cs" key="IDC_COPY_EXPANDER">Zahrnout rozšíření svazku VeraCrypt</control>
<control lang="cs" key="IDC_COPY_WIZARD">Zahrnout průvodce vytvořením svazku VeraCrypt</control>
<control lang="cs" key="IDC_CREATE">Vytvořit</control>
<control lang="cs" key="IDC_CREATE_VOLUME">V&amp;ytvořit svazek</control>
<control lang="cs" key="IDC_DISABLE_BOOT_LOADER_OUTPUT">&amp;Nezobrazovat žádné texty na před-bootovací autentifikační obrazovce (kromě volitelného textu níže)</control>
- <control lang="en" key="IDC_DISABLE_EVIL_MAID_ATTACK_DETECTION">Disable "Evil Maid" attack detection</control>
+ <control lang="cs" key="IDC_DISABLE_EVIL_MAID_ATTACK_DETECTION">Zakázat detekci útoku "Evil Maid"</control>
<control lang="cs" key="IDC_ENABLE_HARDWARE_ENCRYPTION">Urychlit AES šifrování/dešifrování použitím AES instrukcí procesoru (jsou-li k dispozici)</control>
<control lang="cs" key="IDC_ENABLE_KEYFILES">Použít soubor. klíče</control>
<control lang="cs" key="IDC_ENABLE_NEW_KEYFILES">Použít soubor. klíče</control>
@@ -136,10 +136,10 @@
<control lang="cs" key="IDC_FAVORITE_MOVE_UP">Posunout &amp;nahoru</control>
<control lang="cs" key="IDC_FAVORITE_OPEN_EXPLORER_WIN_ON_MOUNT">Otevřít okno p&amp;růzkumníka pro vybraný svazek, dojde-li k úspěšnému připojení</control>
<control lang="cs" key="IDC_FAVORITE_REMOVE">&amp;Odstranit</control>
- <control lang="en" key="IDC_FAVORITE_USE_LABEL_IN_EXPLORER">Use favorite label as Explorer drive label</control>
+ <control lang="cs" key="IDC_FAVORITE_USE_LABEL_IN_EXPLORER">Použít oblíbený název jako název disku v průzkumníkovi</control>
<control lang="cs" key="IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX">Globální nastavení</control>
<control lang="cs" key="IDC_HK_DISMOUNT_BALLOON_TOOLTIP">Zobrazit bublinovou nápovědu po úspěšném odpojení</control>
- <control lang="cs" key="IDC_HK_DISMOUNT_PLAY_SOUND">Přehrát zvuk systémové notifikace po úspěšném odpojení</control>
+ <control lang="cs" key="IDC_HK_DISMOUNT_PLAY_SOUND">Přehrát zvuk systémového upozornění po úspěšném odpojení</control>
<control lang="cs" key="IDC_HK_MOD_ALT">Alt</control>
<control lang="cs" key="IDC_HK_MOD_CTRL">Ctrl</control>
<control lang="cs" key="IDC_HK_MOD_SHIFT">Shift</control>
@@ -152,16 +152,16 @@
<control lang="cs" key="IDC_MORE_INFO_ON_THREAD_BASED_PARALLELIZATION">Více informací</control>
<control lang="cs" key="IDC_MORE_SETTINGS">Více informací...</control>
<control lang="cs" key="IDC_MOUNTALL">&amp;Autom. připojit zařízení</control>
- <control lang="cs" key="IDC_MOUNT_OPTIONS">Volby připojení</control>
+ <control lang="cs" key="IDC_MOUNT_OPTIONS">Možnosti připojení</control>
<control lang="cs" key="IDC_MOUNT_READONLY">Připojit svazek jen &amp;pro čtení</control>
<control lang="cs" key="IDC_NEW_KEYFILES">Soubor. klíče…</control>
- <control lang="en" key="IDC_OLD_PIM_HELP">(Empty or 0 for default iterations)</control>
- <control lang="en" key="IDC_PIM_HELP">(Empty or 0 for default iterations)</control>
+ <control lang="cs" key="IDC_OLD_PIM_HELP">(prázdné nebo 0 pro výchozí opakování)</control>
+ <control lang="cs" key="IDC_PIM_HELP">(prázdné nebo 0 pro výchozí opakování)</control>
<control lang="cs" key="IDC_PREF_BKG_TASK_ENABLE">Povoleno</control>
- <control lang="cs" key="IDC_PREF_CACHE_PASSWORDS">Ukládat hesla do paměti ovladače</control>
- <control lang="cs" key="IDC_PREF_DISMOUNT_INACTIVE">Autom. odpojit svazek pokud z/do něj nebylo čteno/zapisováno</control>
+ <control lang="cs" key="IDC_PREF_CACHE_PASSWORDS">Uložit hesla do paměti ovladače</control>
+ <control lang="cs" key="IDC_PREF_DISMOUNT_INACTIVE">Automaticky odpojit svazek pokud z/do něj nebylo čteno/zapisováno</control>
<control lang="cs" key="IDC_PREF_DISMOUNT_LOGOFF">Uživatel se odhlašuje</control>
- <control lang="en" key="IDC_PREF_DISMOUNT_SESSION_LOCKED">User session locked</control>
+ <control lang="cs" key="IDC_PREF_DISMOUNT_SESSION_LOCKED">Uživatelská relace byla uzamčena</control>
<control lang="cs" key="IDC_PREF_DISMOUNT_POWERSAVING">Přecházím do úsporného režimu</control>
<control lang="cs" key="IDC_PREF_DISMOUNT_SCREENSAVER">Je spuštěn spořič obrazovky</control>
<control lang="cs" key="IDC_PREF_FORCE_AUTO_DISMOUNT">Vynutit automatické odpojení, i když svazek obsahuje otevřené soubory nebo adresáře</control>
@@ -170,8 +170,8 @@
<control lang="cs" key="IDC_PREF_MOUNT_READONLY">Připojit svazky jen pro čtení</control>
<control lang="cs" key="IDC_PREF_MOUNT_REMOVABLE">Připojit svazky jako výměnná média</control>
<control lang="cs" key="IDC_PREF_OPEN_EXPLORER">Otevřít okno Průzkumníka pro úspěšně připojený svazek</control>
- <control lang="en" key="IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT">Temporary Cache password during "Mount Favorite Volumes" operations</control>
- <control lang="cs" key="IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED">Použít jinou ikonu na hlavním panelu, pokud jsou k dispozici připojené svazky</control>
+ <control lang="cs" key="IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT">Heslo do mezipaměti během operace "Připojit oblíbený svazek"</control>
+ <control lang="cs" key="IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED">Použít jinou ikonu na hlavním panelu, jsou-li k dispozici připojené svazky</control>
<control lang="cs" key="IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT">Odstranit hesla z mezipaměti a automaticky odpojit</control>
<control lang="cs" key="IDC_PREF_WIPE_CACHE_ON_EXIT">Odstranit hesla z mezipaměti při ukončení</control>
<control lang="cs" key="IDC_PRESERVE_TIMESTAMPS">Zachovat časové razítko změny souborového svazku</control>
@@ -182,23 +182,23 @@
<control lang="cs" key="IDC_SHOW_PASSWORD_CHPWD_NEW">Zobrazit heslo</control>
<control lang="cs" key="IDC_SHOW_PASSWORD_CHPWD_ORI">Zobrazit heslo</control>
<control lang="cs" key="IDC_TRAVEL_OPEN_EXPLORER">Otevřít okno &amp;Průzkumníka pro připojený svazek</control>
- <control lang="cs" key="IDC_TRAV_CACHE_PASSWORDS">&amp;Ukládat hesla do mezipaměti</control>
- <control lang="en" key="IDC_TRUECRYPT_MODE">TrueCrypt Mode</control>
+ <control lang="cs" key="IDC_TRAV_CACHE_PASSWORDS">&amp;Uložit hesla do mezipaměti</control>
+ <control lang="cs" key="IDC_TRUECRYPT_MODE">Režim TrueCrypt</control>
<control lang="cs" key="IDC_UNMOUNTALL">O&amp;dpojit vše</control>
<control lang="cs" key="IDC_VOLUME_PROPERTIES">Vlastnos&amp;ti svazku…</control>
<control lang="cs" key="IDC_VOLUME_TOOLS">&amp;Nástroje svazku…</control>
<control lang="cs" key="IDC_WIPE_CACHE">Vyčistit &amp;mezipaměť</control>
- <control lang="en" key="IDD_DEFAULT_MOUNT_PARAMETERS">VeraCrypt - Mount Parameters</control>
+ <control lang="cs" key="IDD_DEFAULT_MOUNT_PARAMETERS">VeraCrypt - parametry připojení</control>
<control lang="cs" key="IDD_FAVORITE_VOLUMES">VeraCrypt - Oblíbené svazky</control>
<control lang="cs" key="IDD_HOTKEYS_DLG">VeraCrypt - Systémové klávesové zkratky</control>
<control lang="cs" key="IDD_MOUNT_DLG">VeraCrypt</control>
<control lang="cs" key="IDD_PASSWORDCHANGE_DLG">Změnit heslo nebo souborové klíče</control>
<control lang="cs" key="IDD_PASSWORD_DLG">Zadejte heslo svazku VeraCrypt</control>
- <control lang="cs" key="IDD_PERFORMANCE_SETTINGS">VeraCrypt - Volby výkonu</control>
- <control lang="cs" key="IDD_PREFERENCES_DLG">VeraCrypt - Předvolby</control>
- <control lang="cs" key="IDD_SYSENC_SETTINGS">VeraCrypt - Volby systémového šifrování</control>
- <control lang="cs" key="IDD_TOKEN_PREFERENCES">VeraCrypt - Volby bezpečnostního tokenu</control>
- <control lang="cs" key="IDD_TRAVELER_DLG">Nastavení cestovního disk VeraCrypt</control>
+ <control lang="cs" key="IDD_PERFORMANCE_SETTINGS">VeraCrypt - možnosti výkonu</control>
+ <control lang="cs" key="IDD_PREFERENCES_DLG">VeraCrypt - možnosti</control>
+ <control lang="cs" key="IDD_SYSENC_SETTINGS">VeraCrypt - možnosti systémového šifrování</control>
+ <control lang="cs" key="IDD_TOKEN_PREFERENCES">VeraCrypt - možnosti bezpečnostního tokenu</control>
+ <control lang="cs" key="IDD_TRAVELER_DLG">Nastavení přenosného disk VeraCrypt</control>
<control lang="cs" key="IDD_VOLUME_PROPERTIES">Vlastnosti svazku VeraCrypt</control>
<control lang="cs" key="IDM_ABOUT">O aplikaci…</control>
<control lang="cs" key="IDM_ADD_REMOVE_VOL_KEYFILES">Přidat/Odebrat souborové klíče do/z svazku…</control>
@@ -217,9 +217,9 @@
<control lang="cs" key="IDM_CREATE_HIDDEN_OS">Vytvořit skrytý operační systém...</control>
<control lang="cs" key="IDM_CREATE_RESCUE_DISK">Vytvořit záchranný disk…</control>
<control lang="cs" key="IDM_CREATE_VOLUME">Vytvořit nový svazek…</control>
- <control lang="en" key="IDM_DECRYPT_NONSYS_VOL">Permanently Decrypt...</control>
+ <control lang="cs" key="IDM_DECRYPT_NONSYS_VOL">Trvale dešifrovat...</control>
<control lang="cs" key="IDM_DEFAULT_KEYFILES">Výchozí souborové klíče…</control>
- <control lang="en" key="IDM_DEFAULT_MOUNT_PARAMETERS">Default Mount Parameters...</control>
+ <control lang="cs" key="IDM_DEFAULT_MOUNT_PARAMETERS">Výchozí parametry připojení...</control>
<control lang="cs" key="IDM_DONATE">Podpořte nás...</control>
<control lang="cs" key="IDM_ENCRYPT_SYSTEM_DEVICE">Zašifrovat systémový oddíl/disk…</control>
<control lang="cs" key="IDM_FAQ">Často kladené dotazy</control>
@@ -238,11 +238,11 @@
<control lang="cs" key="IDM_NEWS">Novinky</control>
<control lang="cs" key="IDM_ONLINE_HELP">Online nápověda</control>
<control lang="cs" key="IDM_ONLINE_TUTORIAL">Návod pro začátečníky</control>
- <control lang="cs" key="IDM_ORGANIZE_FAVORITES">Uspořádat Oblíbené svazky...</control>
- <control lang="cs" key="IDM_ORGANIZE_SYSTEM_FAVORITES">Uspořádat Oblíbené systémové svazky...</control>
+ <control lang="cs" key="IDM_ORGANIZE_FAVORITES">Upravit oblíbené svazky...</control>
+ <control lang="cs" key="IDM_ORGANIZE_SYSTEM_FAVORITES">Upravit oblíbené systémové svazky...</control>
<control lang="cs" key="IDM_PERFORMANCE_SETTINGS">Výkon...</control>
<control lang="cs" key="IDM_PERMANENTLY_DECRYPT_SYS">Natrvalo dešifrovat systémový oddíl/disk</control>
- <control lang="cs" key="IDM_PREFERENCES">Předvolby…</control>
+ <control lang="cs" key="IDM_PREFERENCES">Možnosti…</control>
<control lang="cs" key="IDM_REFRESH_DRIVE_LETTERS">Obnovit písmena disků</control>
<control lang="cs" key="IDM_REMOVE_ALL_KEYFILES_FROM_VOL">Odstranit všechny souborové klíče ze svazku…</control>
<control lang="cs" key="IDM_RESTORE_VOL_HEADER">Obnovit hlavičku svazku…</control>
@@ -252,18 +252,18 @@
<control lang="cs" key="IDM_SYSENC_RESUME">Obnovit přerušený proces</control>
<control lang="cs" key="IDM_SYSENC_SETTINGS">Systémové šifrování...</control>
<control lang="cs" key="IDM_SYSTEM_ENCRYPTION_STATUS">Vlastnosti...</control>
- <control lang="cs" key="IDM_SYS_ENC_SETTINGS">Předvolby...</control>
+ <control lang="cs" key="IDM_SYS_ENC_SETTINGS">Možnosti...</control>
<control lang="cs" key="IDM_SYS_FAVORITES_SETTINGS">Oblíbené systémové svazky...</control>
<control lang="cs" key="IDM_TC_DOWNLOADS">Ke stažení</control>
<control lang="cs" key="IDM_TEST_VECTORS">Testovací vektory…</control>
<control lang="cs" key="IDM_TOKEN_PREFERENCES">Bezpečnostní tokeny...</control>
- <control lang="cs" key="IDM_TRAVELER">Cestovní disk…</control>
+ <control lang="cs" key="IDM_TRAVELER">Přenosný disk…</control>
<control lang="cs" key="IDM_UNMOUNTALL">Odpojit všechny připojené svazky</control>
<control lang="cs" key="IDM_UNMOUNT_VOLUME">Odpojit svazek</control>
<control lang="cs" key="IDM_VERIFY_RESCUE_DISK">Ověřit záchranný disk</control>
- <control lang="en" key="IDM_VERIFY_RESCUE_DISK_ISO">Verify Rescue Disk Image</control>
+ <control lang="cs" key="IDM_VERIFY_RESCUE_DISK_ISO">Ověřit záchranný obraz *.iso</control>
<control lang="cs" key="IDM_VERSION_HISTORY">Historie verzí</control>
- <control lang="en" key="IDM_VOLUME_EXPANDER">Volume Expander</control>
+ <control lang="cs" key="IDM_VOLUME_EXPANDER">Rozšíření svazku</control>
<control lang="cs" key="IDM_VOLUME_PROPERTIES">Vlastnosti svazku</control>
<control lang="cs" key="IDM_VOLUME_WIZARD">Průvodce vytvořením svazku</control>
<control lang="cs" key="IDM_WEBSITE">Domovská stránka VeraCrypt</control>
@@ -274,14 +274,14 @@
<control lang="cs" key="IDT_AUTORUN">Konfigurace automatického spouštění (autorun.inf)</control>
<control lang="cs" key="IDT_AUTO_DISMOUNT">Automatické odpojení</control>
<control lang="cs" key="IDT_AUTO_DISMOUNT_ON">Odpojit vše když:</control>
- <control lang="cs" key="IDT_BOOT_LOADER_SCREEN_OPTIONS">Volby obrazovky bootovacího zavaděče</control>
+ <control lang="cs" key="IDT_BOOT_LOADER_SCREEN_OPTIONS">Možnosti obrazovky bootovacího zavaděče</control>
<control lang="cs" key="IDT_CONFIRM_PASSWORD">Potvrdit heslo:</control>
<control lang="cs" key="IDT_CURRENT">Aktuální</control>
<control lang="cs" key="IDT_CUSTOM_BOOT_LOADER_MESSAGE">Zobrazit volitelný text na obrazovce s před-bootovací autentifikací (maximálně 24 znaků):</control>
- <control lang="cs" key="IDT_DEFAULT_MOUNT_OPTIONS">Výchozí předvolby připojení</control>
- <control lang="cs" key="IDT_DISMOUNT_ACTION">Předvolby klávesových zkratek</control>
- <control lang="en" key="IDT_DRIVER_OPTIONS">Driver Configuration</control>
- <control lang="en" key="IDC_ENABLE_EXTENDED_IOCTL_SUPPORT">Enable extended disk control codes support</control>
+ <control lang="cs" key="IDT_DEFAULT_MOUNT_OPTIONS">Výchozí možnosti připojení</control>
+ <control lang="cs" key="IDT_DISMOUNT_ACTION">Možnosti klávesových zkratek</control>
+ <control lang="cs" key="IDT_DRIVER_OPTIONS">Konfigurace ovladače</control>
+ <control lang="cs" key="IDC_ENABLE_EXTENDED_IOCTL_SUPPORT">Povolit podporu ovládání rozšířeného disku</control>
<control lang="cs" key="IDT_FAVORITE_LABEL">Jmenovka vybraného oblíbeného svazku:</control>
<control lang="cs" key="IDT_FILE_SETTINGS">Nastavení souboru</control>
<control lang="cs" key="IDT_HOTKEY_KEY">Klávesa k přiřazení:</control>
@@ -289,19 +289,19 @@
<control lang="cs" key="IDT_LOGON">Akce k provedení po přihlášení do Windows</control>
<control lang="cs" key="IDT_MINUTES">minut</control>
<control lang="cs" key="IDT_MOUNT_LETTER">Připojit svazek s písm. disku:</control>
- <control lang="cs" key="IDT_MOUNT_SETTINGS">Předvolby připojování</control>
+ <control lang="cs" key="IDT_MOUNT_SETTINGS">Možnosti připojování</control>
<control lang="cs" key="IDT_NEW">Nové</control>
<control lang="cs" key="IDT_NEW_PASSWORD">Heslo:</control>
<control lang="cs" key="IDT_PARALLELIZATION_OPTIONS">Paralelizace založená na vláknech</control>
<control lang="cs" key="IDT_PKCS11_LIB_PATH">PKCS #11 cesta ke knihovně</control>
<control lang="cs" key="IDT_PKCS5_PRF">PKCS-5 PRF:</control>
- <control lang="en" key="IDT_NEW_PKCS5_PRF">PKCS-5 PRF:</control>
+ <control lang="cs" key="IDT_NEW_PKCS5_PRF">PKCS-5 PRF:</control>
<control lang="cs" key="IDT_PW_CACHE_OPTIONS">Mezipaměť pro hesla</control>
- <control lang="cs" key="IDT_SECURITY_OPTIONS">Volby zabezpečení</control>
+ <control lang="cs" key="IDT_SECURITY_OPTIONS">Možnosti zabezpečení</control>
<control lang="cs" key="IDT_TASKBAR_ICON">VeraCrypt služba na pozadí</control>
- <control lang="cs" key="IDT_TRAVELER_MOUNT">Svazek VeraCrypt, který má být připojen (relativní ke kořeni cest. disku):</control>
- <control lang="cs" key="IDT_TRAVEL_INSERTION">Po připojení cestovního disku:</control>
- <control lang="cs" key="IDT_TRAVEL_ROOT">Vytvořit soubory cestovního disku v (kořenový adresář cestovního disku):</control>
+ <control lang="cs" key="IDT_TRAVELER_MOUNT">Svazek VeraCrypt, který má být připojen (relativní ke kořeni přenos. disku):</control>
+ <control lang="cs" key="IDT_TRAVEL_INSERTION">Po připojení přenosného disku:</control>
+ <control lang="cs" key="IDT_TRAVEL_ROOT">Vytvořit soubory přenosného disku v (kořenový adresář přenosného disku):</control>
<control lang="cs" key="IDT_VOLUME">Svazek</control>
<control lang="cs" key="IDT_WINDOWS_RELATED_SETTING">Windows</control>
<control lang="cs" key="IDC_ADD_KEYFILE_PATH">Přidat &amp;cestu…</control>
@@ -322,7 +322,7 @@
<control lang="cs" key="IDC_KEYREMOVE">&amp;Odstranit</control>
<control lang="cs" key="IDC_KEYREMOVEALL">Odstranit &amp;všechny</control>
<control lang="cs" key="IDC_LINK_HIDVOL_PROTECTION_INFO">Co je ochrana skrytého svazku?</control>
- <control lang="cs" key="IDC_LINK_KEYFILES_INFO">Více informací o souborových klíčích</control>
+ <control lang="cs" key="IDC_LINK_KEYFILES_INFO">Více info o souborových klíčích</control>
<control lang="cs" key="IDC_MOUNT_REMOVABLE">Připojit svazek jako výměnné &amp;médium</control>
<control lang="cs" key="IDC_MOUNT_SYSENC_PART_WITHOUT_PBA">Připojit oddíl s &amp;použitím systémového šifrování bez před-bootovací autentifikace</control>
<control lang="cs" key="IDC_PARALLELIZATION_LABEL_LINK">Paralelizace:</control>
@@ -333,7 +333,7 @@
<control lang="cs" key="IDC_SHOW_PASSWORD_MO">&amp;Zobrazit heslo</control>
<control lang="cs" key="IDC_TOKEN_FILES_ADD">&amp;Soubor tokenu...</control>
<control lang="cs" key="IDC_USE_EMBEDDED_HEADER_BAK">Použít záložní hlavičku uloženou ve svazku, &amp;pokud je to možné</control>
- <control lang="cs" key="IDC_XTS_MODE_ENABLED">XTS mód</control>
+ <control lang="cs" key="IDC_XTS_MODE_ENABLED">Režim XTS</control>
<control lang="cs" key="IDD_ABOUT_DLG">O programu VeraCrypt</control>
<control lang="cs" key="IDD_BENCHMARK_DLG">VeraCrypt - test rychlosti šifrovacích algoritmů</control>
<control lang="cs" key="IDD_CIPHER_TEST_DLG">VeraCrypt - test vektorů</control>
@@ -341,7 +341,7 @@
<control lang="cs" key="IDD_KEYFILES">VeraCrypt - souborové klíče</control>
<control lang="cs" key="IDD_KEYFILE_GENERATOR">VeraCrypt - generátor souborových klíčů</control>
<control lang="cs" key="IDD_LANGUAGE">VeraCrypt - jazyk</control>
- <control lang="cs" key="IDD_MOUNT_OPTIONS">VeraCrypt - volby připojení</control>
+ <control lang="cs" key="IDD_MOUNT_OPTIONS">VeraCrypt - možnosti připojení</control>
<control lang="cs" key="IDD_NEW_TOKEN_KEYFILE">Vlastnosti nového souborového klíče tokenu</control>
<control lang="cs" key="IDD_RANDOM_POOL_ENRICHMENT">VeraCrypt - rozšíření náhodné oblasti</control>
<control lang="cs" key="IDD_RAWDEVICES_DLG">Vyberte oddíl nebo zařízení</control>
@@ -356,11 +356,11 @@
<control lang="cs" key="IDT_HIDDEN_VOL_PROTECTION">Ochrana skrytého svazku</control>
<control lang="cs" key="IDT_KEY">Velikost klíče:</control>
<control lang="cs" key="IDT_KEYFILE_GENERATOR_NOTE">DŮLEŽITÉ: Pohybujte s myší v tomto okně co nejnáhodněji. Čím déle s ní budete hýbat, tím lépe. Kryptografická síla souborového klíče se tak výrazně zvýší.</control>
- <control lang="cs" key="IDT_KEYFILE_WARNING">VAROVÁNÍ: Ztratíte-li soub. klíč nebo změní-li se jediný bit z prvních 1024 kilobytů, bude nemožné připojit svazek používající soubor. klíč!</control>
+ <control lang="cs" key="IDT_KEYFILE_WARNING">UPOZORNĚNÍ: Ztratíte-li soub. klíč nebo změní-li se jediný bit z prvních 1024 kilobajtů, bude nemožné připojit svazek používající soubor. klíč.</control>
<control lang="cs" key="IDT_KEY_UNIT">bitů</control>
- <control lang="en" key="IDT_NUMBER_KEYFILES">Number of keyfiles:</control>
- <control lang="en" key="IDT_KEYFILES_SIZE">Keyfiles size (in Bytes):</control>
- <control lang="en" key="IDT_KEYFILES_BASE_NAME">Keyfiles base name:</control>
+ <control lang="cs" key="IDT_NUMBER_KEYFILES">Počet klíčů:</control>
+ <control lang="cs" key="IDT_KEYFILES_SIZE">Velikost klíče (v bajtech):</control>
+ <control lang="cs" key="IDT_KEYFILES_BASE_NAME">Název úložiště klíče:</control>
<control lang="cs" key="IDT_LANGPACK_AUTHORS">Přeložil:</control>
<control lang="cs" key="IDT_PLAINTEXT">Velikost textu:</control>
<control lang="cs" key="IDT_PLAINTEXT_SIZE_UNIT">bitů</control>
@@ -371,14 +371,14 @@
<control lang="cs" key="IDT_SECURITY_TOKEN">Bezpečnostní token:</control>
<control lang="cs" key="IDT_SORT_METHOD">Metoda třídění:</control>
<control lang="cs" key="IDT_STATIC_MODELESS_WAIT_DLG_INFO">Čekejte prosím. Tento proces může trvat delší dobu...</control>
- <control lang="en" key="IDT_STATIC_MODAL_WAIT_DLG_INFO">Please wait...\nThis process may take a long time and VeraCrypt may seem unresponsive.</control>
+ <control lang="cs" key="IDT_STATIC_MODAL_WAIT_DLG_INFO">Prosím, vyčkejte...\nZpracování může trvat déle a může se zdát, že Veracrypt nereaguje.</control>
<control lang="cs" key="IDT_TEST_BLOCK_NUMBER">Číslo bloku:</control>
<control lang="cs" key="IDT_TEST_CIPHERTEXT">Šifrovaný text (hexadecimálně)</control>
<control lang="cs" key="IDT_TEST_DATA_UNIT_NUMBER">Číslo datové jednotky (64-bit hexadecimálně, velikost datové jednotky je 512 bajtů)</control>
<control lang="cs" key="IDT_TEST_KEY">Klíč (hexadecimálně)</control>
<control lang="cs" key="IDT_TEST_PLAINTEXT">Obyčejný text (hexadecimálně)</control>
<control lang="cs" key="IDT_TOKEN_KEYFILE_NAME">Jméno soub. klíče:</control>
- <control lang="cs" key="IDT_XTS_MODE">XTS mód</control>
+ <control lang="cs" key="IDT_XTS_MODE">Režim XTS</control>
<control lang="cs" key="MENU_SYSTEM_ENCRYPTION">S&amp;ystém</control>
<control lang="cs" key="MENU_VOLUMES">&amp;Svazky</control>
<control lang="cs" key="MENU_FAVORITES">&amp;Oblíbené</control>
@@ -395,10 +395,10 @@
<string lang="cs" key="ADMIN_PRIVILEGES_WARN_DEVICES">Pro šifrování/formátování oddílu/zařízení musíte být přihlášeni s administrátorskými právy.\n\nTo se netýká svazků, které jsou vytvořeny ze souborů.</string>
<string lang="cs" key="ADMIN_PRIVILEGES_WARN_HIDVOL">Pro vytvoření skrytého svazku musíte být přihlášeni s administrátorskými právy.\n\nPokračovat?</string>
<string lang="cs" key="ADMIN_PRIVILEGES_WARN_NTFS">Pro zformátování svazku systémem NTFS musíte být přihlášeni s administrátorskými právy.\n\nBez administrátorských práv můžete svazek zformátovat systémem souborů FAT.</string>
- <string lang="cs" key="AES_HELP">Šifra povolená FIPS (Rijndael, zveřejněno v roce 1998) kterou mohou používat úřady a agentury vlády Spojených států k ochraně utajovaných informací až k úrovni přísně tajné. 256-bitový klíč, 128-bitové bloky, 14 iterací (AES-256). Operační mód je XTS.</string>
+ <string lang="cs" key="AES_HELP">Šifra povolená FIPS (Rijndael, zveřejněno v roce 1998) kterou mohou používat úřady a agentury vlády Spojených států k ochraně utajovaných informací až k úrovni přísně tajné. 256-bitový klíč, 128-bitové bloky, 14 iterací (AES-256). Operační režim je XTS.</string>
<string lang="cs" key="ALREADY_MOUNTED">Svazek je již připojen.</string>
- <string lang="cs" key="ERR_SELF_TESTS_FAILED">UPOZORNĚNÍ: Alespoň jeden šifrovací nebo hashovací algoritmus selhal při interním automatickém testování!\n\nVeraCrypt instalace může být poškozena.</string>
- <string lang="cs" key="ERR_NOT_ENOUGH_RANDOM_DATA">UPOZORNĚNÍ: Ve shromažďovači náhodných čísel není dost informací k poskytnutí požadovaného množství náhodných dat.\n\nDále byste neměli pokračovat. Vyberte 'Ohlásit chybu' z menu Nápovědy a oznamte tuto chybu.</string>
+ <string lang="cs" key="ERR_SELF_TESTS_FAILED">UPOZORNĚNÍ: Alespoň jeden šifrovací nebo hashovací algoritmus nebyla úspěšný při interním automatickém testování.\n\nVeraCrypt instalace může být poškozena.</string>
+ <string lang="cs" key="ERR_NOT_ENOUGH_RANDOM_DATA">UPOZORNĚNÍ: Ve shromažďovači náhodných čísel není dost informací k poskytnutí požadovaného množství náhodných dat.\n\nDále byste neměli pokračovat. Vyberte 'Ohlásit chybu' z nabídky Nápovědy a oznamte tuto chybu.</string>
<string lang="cs" key="ERR_HARDWARE_ERROR">Disk je poškozený (je na něm fyzická vada) nebo je poškozený kabel nebo selhává paměť.\n\nJde o problém s vaším hardwarem, nikoliv s programem VeraCrypt. Proto tuto skutečnost NEHLAŠTE jako vadu/problém v programu VeraCrypt a NEŽÁDEJTE o pomoc s tímto problémem na VeraCrypt fórech. Kontaktujte, prosím, oddělení podpory vašeho dodavatele PC pro další pomoc. Děkujeme.\n\nPoznámka: Pokud se chyba opakuje na tom samém místě, je to pravděpodobně způsobeno špatným blokem na disku, což by mělo být možné opravit použitím softwaru třetí strany (v mnoha případech nestačí příkaz 'chkdsk /r', protože funguje jen na úrovní operačního systému; nástroj 'chkdsk' tuto chybu v některých případech ani nenajde).</string>
<string lang="cs" key="DEVICE_NOT_READY_ERROR">Pokud přistupujete k výměnnému médiu, ujistěte se prosím, že je médium vloženo. Zařízení/medium může být také poškozené (může se jednat o jeho fyzickou vadu) nebo může být poškozen/odpojen kabel.</string>
<string lang="cs" key="WHOLE_DRIVE_ENCRYPTION_PREVENTED_BY_DRIVERS">Váš systém pravděpodobně používá upravený ovladač chipsetu, který obsahuje chybu. Ta zabraňuje zašifrování celého systémového disku.\n\nNež budete pokračovat, pokuste se aktualizovat nebo odinstalovat jakékoliv upravené ovladače chipsetu (ne-Microsoftí). Pokud to nepomůže, pokuste se zašifrovat pouze systémový oddíl.</string>
@@ -409,39 +409,39 @@
<string lang="cs" key="CAPSLOCK_ON">UPOZORNĚNÍ: Caps Lock je zapnutý. To by mohlo způsobit zadání špatného hesla.</string>
<string lang="cs" key="VOLUME_TYPE_TITLE">Typ svazku</string>
<string lang="cs" key="HIDDEN_VOLUME_TYPE_HELP">Může se stát, že budete někým donuceni prozradit heslo k zašifrovanému svazku. Je mnoho situací, kdy nemůžete odmítnout prozradit heslo (například kvůli vydírání). Použitím tzv. skrytého svazku vám pomůže vyřešit takovéto situace bez prozrazení hesla k vašemu svazku.</string>
- <string lang="cs" key="NORMAL_VOLUME_TYPE_HELP">Vyberte tuto volbu, chcete-li vytvořit normální svazek VeraCrypt.</string>
+ <string lang="cs" key="NORMAL_VOLUME_TYPE_HELP">Vyberte tuto možnost, chcete-li vytvořit normální svazek VeraCrypt.</string>
<string lang="cs" key="HIDDEN_OS_PRECLUDES_SINGLE_KEY_WDE">Chcete-li nainstalovat operační systém na skrytý svazek, pak nelze zašifrovat celý systémový disk použitím jednoho klíče.</string>
- <string lang="cs" key="CIPHER_HIDVOL_HOST_TITLE">Šifrovací předvolby vnějšího svazku</string>
- <string lang="cs" key="CIPHER_HIDVOL_TITLE">Šifrovací předvolby skrytého svazku</string>
- <string lang="cs" key="CIPHER_TITLE">Předvolby šifrování</string>
- <string lang="cs" key="CLEAN_WINMRU_FAILED">UPOZORNĚNÍ: Nepodařilo se vyčistit cestu naposledy vybraného svazku/souborového klíče (zapamatované při výběru souboru)!</string>
- <string lang="cs" key="COMPRESSION_NOT_SUPPORTED">Chyba: Souborový svazek byl zkomprimován na úrovni systému souborů. VeraCrypt nepodporuje zkomprimované souborové svazky (poznámka: komprese zašifrovaných dat je neefektivní a zbytečná).\n\nVypněte, prosím, kompresi pro souborový svazek dle následujících kroků: 1) Klikněte pravým tlačítkem myši na souborový svazek v Průzkumníku Windows (ne v programu VeraCrypt). 2) Vyberte 'Vlastnosti'. 3) V dialogovém okně 'Vlastnosti' klikněte 'Upřesnit'. 4) V dialogovém okně 'Upřesnit atributy', zrušte volbu 'Komprimovat obsah a šetřit tak místo na disku' a klikněte 'OK'. 5) V dialogovém okně 'Vlastnosti' klikněte 'OK'.</string>
- <string lang="cs" key="CREATE_FAILED">Vytvoření svazku %s selhalo</string>
+ <string lang="cs" key="CIPHER_HIDVOL_HOST_TITLE">Šifrovací možnosti vnějšího svazku</string>
+ <string lang="cs" key="CIPHER_HIDVOL_TITLE">Šifrovací možnosti skrytého svazku</string>
+ <string lang="cs" key="CIPHER_TITLE">Možnosti šifrování</string>
+ <string lang="cs" key="CLEAN_WINMRU_FAILED">UPOZORNĚNÍ: Nepodařilo se vyčistit cestu naposledy vybraného svazku/souborového klíče (zapamatované při výběru souboru).</string>
+ <string lang="cs" key="COMPRESSION_NOT_SUPPORTED">Chyba: Souborový svazek byl zkomprimován na úrovni systému souborů. VeraCrypt nepodporuje zkomprimované souborové svazky (poznámka: komprese zašifrovaných dat je neefektivní a zbytečná).\n\nVypněte, prosím, kompresi pro souborový svazek dle následujících kroků: 1) Klikněte pravým tlačítkem myši na souborový svazek v Průzkumníku Windows (ne v programu VeraCrypt). 2) Vyberte 'Vlastnosti'. 3) V dialogovém okně 'Vlastnosti' klikněte 'Upřesnit'. 4) V dialogovém okně 'Upřesnit atributy', zrušte možnost 'Komprimovat obsah a šetřit tak místo na disku' a klikněte 'OK'. 5) V dialogovém okně 'Vlastnosti' klikněte 'OK'.</string>
+ <string lang="cs" key="CREATE_FAILED">Vytvoření svazku %s nebylo úspěšné</string>
<string lang="cs" key="DEVICE_FREE_BYTES">Velikost %s je %.2f bajtů</string>
<string lang="cs" key="DEVICE_FREE_KB">Velikost %s je %.2f KB</string>
<string lang="cs" key="DEVICE_FREE_MB">Velikost %s je %.2f MB</string>
<string lang="cs" key="DEVICE_FREE_GB">Velikost %s je %.2f GB</string>
<string lang="cs" key="DEVICE_FREE_TB">Velikost %s je %.2f TB</string>
<string lang="cs" key="DEVICE_FREE_PB">Velikost %s je %.2f PB</string>
- <string lang="cs" key="DEVICE_IN_USE_FORMAT">VAROVÁNÍ: Zařízení/oddíl je používán operačním systémem nebo aplikacemi. Formátování zařízení/oddílu může způsobit poškození dat nebo systémovou nestabilitu.\n\nPokračovat?</string>
- <string lang="cs" key="DEVICE_IN_USE_INPLACE_ENC">Varování: Oddíl je právě používán operačním systémem nebo aplikacemi. Měli byste zavřít všechny aplikace, které by mohly oddíl používat (včetně antivirového programu).\n\nPokračovat?</string>
- <string lang="cs" key="FORMAT_CANT_DISMOUNT_FILESYS">Chyba: Zařízení/oddíl obsahuje souborový systém, který nelze připojit. Systém souborů může být používán operačním systémem. Formátování zařízení/oddílu by pravděpodobně způsobilo poškození dat a systémovou nestabilitu.\n\nPro vyřešení tohoto problému doporučujeme nejdříve smazat oddíl a poté ho znovu vytvořit bez formátování. Postupujte následovně: 1) Pravý-klik myši na ikonu 'Počítač' (nebo 'Tento počítač') ve 'Start' menu a vyberte 'Spravovat'. Objeví se okno 'Správa počítače'. 2) V okně 'Správa počítače' vyberte 'Uložení' &gt; 'Správa disků'. 3) Pravý-klik myši na oddíl, který chcete zašifrovat a vyberte buď 'Smazat oddíl' nebo 'Smazat svazek' nebo 'Smazat logický disk'. 4) Klikněte 'Ano'. Pokud se Windows zeptají na restart počítače, učiňte tak. Poté zopakujte kroky 1 a 2 a pokračujte od kroku 5. 5) Pravý-klik na nealokované/volné místo a vyberte buď 'Nový oddíl' nebo 'Nový obyčejný svazek' nebo 'Nový logický disk'. 6) Objeví se okno 'Průvodce vytvořením nového oddílu' nebo 'Průvodce nového jednoduchého svazku'; následujte jejich instrukce. Na stránce průvodce nazvané 'Zformátovat oddíl' vyberte buď 'Neformátovat tento oddíl' nebo 'Neformátovat tento svazek'. Ve stejném průvodci klikněte 'Další' a poté 'Dokončit'. 7) Cesta k zařízení, kterou jste vybrali v programu VeraCrypt může být nyní špatně. Ukončete proto průvodce vytvořením oddílu VeraCrypt (pokud stále běží) a spusťte ho znovu. 8) Zkuste zašifrovat zařízení/oddíl znovu.\n\nPokud VeraCrypt opakovaně selhává při šifrování zařízení/oddílu, zvažte místo toho vytvoření souborového svazku.</string>
+ <string lang="cs" key="DEVICE_IN_USE_FORMAT">UPOZORNĚNÍ: Zařízení/oddíl je používán operačním systémem nebo aplikacemi. Formátování zařízení/oddílu může způsobit poškození dat nebo systémovou nestabilitu.\n\nPokračovat?</string>
+ <string lang="cs" key="DEVICE_IN_USE_INPLACE_ENC">UPOZORNĚNÍ: Oddíl je právě používán operačním systémem nebo aplikacemi. Měli byste zavřít všechny aplikace, které by mohly oddíl používat (včetně antivirového programu).\n\nPokračovat?</string>
+ <string lang="cs" key="FORMAT_CANT_DISMOUNT_FILESYS">Chyba: Zařízení/oddíl obsahuje souborový systém, který nelze připojit. Systém souborů může být používán operačním systémem. Formátování zařízení/oddílu by pravděpodobně způsobilo poškození dat a systémovou nestabilitu.\n\nPro vyřešení tohoto problému doporučujeme nejdříve smazat oddíl a poté ho znovu vytvořit bez formátování. Postupujte následovně: 1) Pravý-klik myši na ikonu 'Počítač' (nebo 'Tento počítač') v nabídce 'Start' a vyberte 'Spravovat'. Objeví se okno 'Správa počítače'. 2) V okně 'Správa počítače' vyberte 'Uložení' &gt; 'Správa disků'. 3) Pravý-klik myši na oddíl, který chcete zašifrovat a vyberte buď 'Smazat oddíl' nebo 'Smazat svazek' nebo 'Smazat logický disk'. 4) Klikněte 'Ano'. Pokud se Windows zeptají na restart počítače, učiňte tak. Poté zopakujte kroky 1 a 2 a pokračujte od kroku 5. 5) Pravý-klik na nealokované/volné místo a vyberte buď 'Nový oddíl' nebo 'Nový obyčejný svazek' nebo 'Nový logický disk'. 6) Objeví se okno 'Průvodce vytvořením nového oddílu' nebo 'Průvodce nového jednoduchého svazku'; následujte jejich instrukce. Na stránce průvodce nazvané 'Zformátovat oddíl' vyberte buď 'Neformátovat tento oddíl' nebo 'Neformátovat tento svazek'. Ve stejném průvodci klikněte 'Další' a poté 'Dokončit'. 7) Cesta k zařízení, kterou jste vybrali v programu VeraCrypt může být nyní špatně. Ukončete proto průvodce vytvořením oddílu VeraCrypt (pokud stále běží) a spusťte ho znovu. 8) Zkuste zašifrovat zařízení/oddíl znovu.\n\nPokud VeraCrypt opakovaně selhává při šifrování zařízení/oddílu, zvažte místo toho vytvoření souborového svazku.</string>
<string lang="cs" key="INPLACE_ENC_CANT_LOCK_OR_DISMOUNT_FILESYS">Chyba: Systém souborů nemohl být uzamknut a/nebo odpojen. Možná je používán operačním systémem nebo aplikacemi (např. antivirový program). Zašifrování oddílu může způsobit poškození dat a systémovou nestabilitu.\n\nZavřete, prosím, všechny aplikace, které mohou používat systém souborů (včetně antivirového programu) a zkuste to znovu. Pokud to nepomůže, následujte kroky uvedené níže.</string>
- <string lang="cs" key="DEVICE_IN_USE_INFO">UPOZORNĚNÍ: Některé z připojených zařízení/oddílů byly již používány!\n\nIgnorování může způsobit nežádoucí následky včetně nestability systému.\n\nDůrazně doporučujeme zavřít všechny aplikace, které by mohly zařízení/oddíly používat.</string>
+ <string lang="cs" key="DEVICE_IN_USE_INFO">UPOZORNĚNÍ: Některé z připojených zařízení/oddílů byly již používány.\n\nIgnorování může způsobit nežádoucí následky včetně nestability systému.\n\nDůrazně doporučujeme zavřít všechny aplikace, které by mohly zařízení/oddíly používat.</string>
<string lang="cs" key="DEVICE_PARTITIONS_ERR">Vybrané zařízení obsahuje oddíly.\n\nZformátování zařízení by mohlo způsobit systémovou nestabilitu a/nebo poškození dat. Vyberte prosím oddíl na zařízení nebo odstraňte všechny oddíly na zařízení, aby ho mohl VeraCrypt bezpečně zformátovat.</string>
<string lang="cs" key="DEVICE_PARTITIONS_ERR_W_INPLACE_ENC_NOTE">Vybrané ne-systémové zařízení obsahuje oddíly.\n\nZašifrované svazky umístěné na zařízeních mohou být vytvořeny na zařízeních, které neobsahují žádné oddíly (včetně pevných disků a solid-state disků). Zařízení, které obsahuje oddíly, může být úplně zašifrováno ta, jak je (s použitím jednoho hlavního klíče) pouze tehdy, pokud se jedná o jednotku, kde jsou nainstalovány Windows a pokud z této jednotky také bootují.\n\nPokud chcete zašifrovat vybrané ne-systémové zařízení s použitím jednoho hlavního klíče, musíte na zařízení nejprve odstranit všechny oddíly, aby mohl VeraCrypt toto zařízení bezpečně naformátovat (formátování zařízení, které obsahuje oddíly, může způsobit systémovou nestability a/nebo poškození dat). Případně můžete zašifrovat každý oddíl na disku zvlášť (každý oddíl bude zašifrován jiným hlavním klíčem).\n\nPoznámka: Pokud chcete odstranit všechny oddíly z GPT disku, je možné, že ho budete nejprve muset převést na MBR disk (s použitím např. nástroje Správy počítače), abyste mohli odstranit skryté oddíly.</string>
- <string lang="cs" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">Varování: Pokud zašifrujete celé zařízení (oproti zašifrování pouze jednoho oddílu na něm), operační systém bude zařízení považovat za nové, prázdné a nenaformátované (protože nebude obsahovat žádnou tabulku oddílů) a může tak spontánně inicializovat toto zařízení (nebo se vás zeptá, zda tak chcete učinit), což může svazek poškodit. Navíc, nebude možné trvale připojovat svazek jako oblíbený (např. pokud se změní číslo jednotky) nebo mu přidělit jmenovku oblíbeného svazku.\n\nAbyste se tomu vyhnuli, zvažte, zda místo toho nechcete na zařízení vytvořit pouze oddíl a pak ho zašifrovat.\n\nJste si jisti, že chcete zašifrovat celé zařízení?</string>
- <string lang="cs" key="AFTER_FORMAT_DRIVE_LETTER_WARN">DŮLEŽITÉ: Mějte prosím na paměti, že tento svazek NEMŮŽE být připojen s použitím písmena jednotky %c:, které má již přiděleno!\n\nPro připojení tohoto svazku klikněte na 'Autom. připojit zařízení' v hlavním okně VeraCryptu (případně v hlavním okně VeraCryptu zvolte 'Vybrat zařízení', pak vyberte oddíl/zařízení a klikněte na 'Připojit'). Svazek bude připojen k jinému písmenu disku, které vyberete ze seznamu v hlavním okně VeraCryptu.\n\nPůvodní písmeno %c: by se mělo použít pouze v případě, že potřebujete z oddílu/zařízení odstranit šifrování (např. pokud již nepotřebujete šifrování). V tom případě klikněte pravým tlačítkem myši na písmeno jednotky %c: v seznamu 'Počítač' (nebo 'Tento počítač') a vyberte 'Formátovat'. V opačném případě by nemělo být písmeno %c: nikdy použito (pokud ho neodstraníte, jak je popsáno ve FAQ VeraCryptu, a nepřiřadíte k jinému oddílu/zařízení).</string>
+ <string lang="cs" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">UPOZORNĚNÍ: Pokud zašifrujete celé zařízení (oproti zašifrování pouze jednoho oddílu na něm), operační systém bude zařízení považovat za nové, prázdné a nenaformátované (protože nebude obsahovat žádnou tabulku oddílů) a může tak spontánně inicializovat toto zařízení (nebo se vás zeptá, zda tak chcete učinit), což může svazek poškodit. Navíc, nebude možné trvale připojovat svazek jako oblíbený (např. pokud se změní číslo jednotky) nebo mu přidělit jmenovku oblíbeného svazku.\n\nAbyste se tomu vyhnuli, zvažte, zda místo toho nechcete na zařízení vytvořit pouze oddíl a pak ho zašifrovat.\n\nOpravdu chcete zašifrovat celé zařízení?</string>
+ <string lang="cs" key="AFTER_FORMAT_DRIVE_LETTER_WARN">DŮLEŽITÉ: Mějte prosím na paměti, že tento svazek NEMŮŽE být připojen s použitím písmena jednotky %c:, které má již přiděleno.\n\nPro připojení tohoto svazku klikněte na 'Autom. připojit zařízení' v hlavním okně VeraCryptu (případně v hlavním okně VeraCryptu zvolte 'Vybrat zařízení', pak vyberte oddíl/zařízení a klikněte na 'Připojit'). Svazek bude připojen k jinému písmenu disku, které vyberete ze seznamu v hlavním okně VeraCryptu.\n\nPůvodní písmeno %c: by se mělo použít pouze v případě, že potřebujete z oddílu/zařízení odstranit šifrování (např. pokud již nepotřebujete šifrování). V tom případě klikněte pravým tlačítkem myši na písmeno jednotky %c: v seznamu 'Počítač' (nebo 'Tento počítač') a vyberte 'Formátovat'. V opačném případě by nemělo být písmeno %c: nikdy použito (pokud ho neodstraníte, jak je popsáno ve FAQ VeraCryptu, a nepřiřadíte k jinému oddílu/zařízení).</string>
<string lang="cs" key="OS_NOT_SUPPORTED_FOR_NONSYS_INPLACE_ENC">Šifrování ne-systémových svazků tak, jak jsou, není podporováno pro operační systém, který momentálně používáte (lze tak učinit pouze na Windows Vista a pozdějších verzích Windows).\n\nDůvodem je, že tato verze Windows nepodporuje zmenšování systému souborů (systém souborů musí být zmenšen, aby se vytvořil prostor pro hlavičku svazku a hlavičku se zálohou).</string>
<string lang="cs" key="ONLY_NTFS_SUPPORTED_FOR_NONSYS_INPLACE_ENC">Vybraný oddíl pravděpodobně neobsahuje systém souborů NTFS. Pouze NTFS oddíly mohou být zašifrovány tak, jak jsou.\n\nPoznámka: Důvodem je, že tato verze Windows nepodporuje zmenšování systému souborů (systém souborů musí být zmenšen, aby se vytvořil prostor pro hlavičku svazku a hlavičku se zálohou).</string>
- <string lang="cs" key="ONLY_MOUNTED_VOL_SUPPORTED_FOR_NONSYS_INPLACE_ENC">&gt;Vybraný oddíl pravděpodobně neobsahuje systém souborů NTFS. Pouze NTFS oddíly mohou být zašifrovány tak, jak jsou.\n\nPokud chcete vytvořit zašifrovaný svazek VeraCrypt v tomto oddílu, vyberte volbu "Vytvořit zašifrovaný svazek a naformátovat ho" (místo volby "Zašifrovat oddíl tak, jak je").</string>
+ <string lang="cs" key="ONLY_MOUNTED_VOL_SUPPORTED_FOR_NONSYS_INPLACE_ENC">&gt;Vybraný oddíl pravděpodobně neobsahuje systém souborů NTFS. Pouze NTFS oddíly mohou být zašifrovány tak, jak jsou.\n\nPokud chcete vytvořit zašifrovaný svazek VeraCrypt v tomto oddílu, vyberte možnost "Vytvořit zašifrovaný svazek a naformátovat ho" (místo možnosti "Zašifrovat oddíl tak, jak je").</string>
<string lang="cs" key="PARTITION_TOO_SMALL_FOR_NONSYS_INPLACE_ENC">Chyba: Oddíl je příliš malý. VeraCrypt ho nemůže zašifrovat tak, jak je.</string>
- <string lang="cs" key="INPLACE_ENC_ALTERNATIVE_STEPS">Pro zašifrování dat na tomto oddílu pokračujte dle následujících kroků:\n\n1) Vytvořte svazek VeraCrypt na prázdném oddílu/zařízení, a pak jej připojte.\n\n2) Zkopírujte všechny soubory z oddílu, který jste původně chtěli zašifrovat, do připojeného oddílu (ten, který jste vytvořili a připojili v kroku 1). Tím vytvoříte VeraCryptem zašifrovanou zálohu dat.\n\n3) Vytvořte svazek VeraCrypt na oddílu, který jste původně chtěli zašifrovat a ujistěte se, že (v průvodci VeraCryptu) vyberete volbu "Vytvořit zašifrovaný svazek a naformátovat ho" (místo volby "Zašifrovat svazek tak, jak je"). Všechna data uložená na oddílu budou smazána. Až bude svazek vytvořen, připojte jej.\n\n4) Zkopírujte všechny soubory z připojeného záložního svazku VeraCrypt (vytvořeném a připojeném v kroku 1) do připojeného VeraCrypt svazku, který byl vytvořen (a připojen) v kroku 3.\n\nAž dokončíte tyto kroky, data budou zašifrována a navíc budete mít k dispozici i zašifrovanou zálohu dat.</string>
- <string lang="cs" key="RAW_DEV_NOT_SUPPORTED_FOR_INPLACE_ENC">VeraCrypt může zašifrovat za běhu pouze oddíl, dynamický svazek, a nebo celý systémový disk.\n\nChcete-li vytvořit zašifrovaný svazek VeraCrypt uvnitř vybraného ne-systémového zařízení, vyberte možnost "Vytvořit zašifrovaný svazek a naformátovat ho" (místo volby "Zašifrovat oddíl tak, jak je").</string>
+ <string lang="cs" key="INPLACE_ENC_ALTERNATIVE_STEPS">Pro zašifrování dat na tomto oddílu pokračujte dle následujících kroků:\n\n1) Vytvořte svazek VeraCrypt na prázdném oddílu/zařízení, a pak jej připojte.\n\n2) Zkopírujte všechny soubory z oddílu, který jste původně chtěli zašifrovat, do připojeného oddílu (ten, který jste vytvořili a připojili v kroku 1). Tím vytvoříte VeraCryptem zašifrovanou zálohu dat.\n\n3) Vytvořte svazek VeraCrypt na oddílu, který jste původně chtěli zašifrovat a ujistěte se, že (v průvodci VeraCryptu) vyberete možnost "Vytvořit zašifrovaný svazek a naformátovat ho" (místo možnosti "Zašifrovat svazek tak, jak je"). Všechna data uložená na oddílu budou smazána. Až bude svazek vytvořen, připojte jej.\n\n4) Zkopírujte všechny soubory z připojeného záložního svazku VeraCrypt (vytvořeném a připojeném v kroku 1) do připojeného VeraCrypt svazku, který byl vytvořen (a připojen) v kroku 3.\n\nAž dokončíte tyto kroky, data budou zašifrována a navíc budete mít k dispozici i zašifrovanou zálohu dat.</string>
+ <string lang="cs" key="RAW_DEV_NOT_SUPPORTED_FOR_INPLACE_ENC">VeraCrypt může zašifrovat za běhu pouze oddíl, dynamický svazek, a nebo celý systémový disk.\n\nChcete-li vytvořit zašifrovaný svazek VeraCrypt uvnitř vybraného ne-systémového zařízení, vyberte možnost "Vytvořit zašifrovaný svazek a naformátovat ho" (místo možnosti "Zašifrovat oddíl tak, jak je").</string>
<string lang="cs" key="INPLACE_ENC_INVALID_PATH">Chyba: VeraCrypt může za běhu zašifrovat jen oddíl, dynamický svazek nebo celý systémový disk. Ujistěte se, že zadaná cesta je planá.</string>
- <string lang="cs" key="CANNOT_RESIZE_FILESYS">Chyba: Systém souborů nelze zmenšit (systém souborů musí být zmenšen, aby se vytvořilo místo pro hlavičku svazku a záložní hlavičku).\n\nMožné příčiny a řešení:\n\n- Málo volného místa na svazku. Ujistěte se, že žádná další aplikace nezapisuje do systému souborů.\n\n- Poškozený systém souborů. Zkuste jej zkontrolovat a opravte chyby (klikněte na dané písmeno disku pravým tlačítkem myši v seznamu, vyberte Vlastnosti &gt; Nástroje &gt; 'Zkontrolovat', a ujistěte se, že jste vybrali volbu 'Automaticky opravovat chyby systému souborů' a klikněte na Start).\n\nPokud výše uvedené kroky nepomohly, následujte kroky uvedené níže.</string>
- <string lang="cs" key="NOT_ENOUGH_FREE_FILESYS_SPACE_FOR_SHRINK">Chyba: Na svazku není dostatek volného místa a systém souborů tak nemůže být zmenšen (systém souborů musí být zmenšen, aby se vytvořilo místo pro záložní hlavičku svazku).\n\nSmažte všechny zbytečné soubory a vyprázdněte koš, aby zbylo aspoň 256 KB volného místa a pak to zkuste znovu. Kvůli problému Windows se může stát, že Windows Explorer vám ukáže jinou hodnotu volného místa, dokud se systém nerestartuje. Pokud restart systému nepomůže, systém souborů může být poškozený. Zkuste jej zkontrolovat a opravit případné chyby (klikněte na dané písmeno disku pravým tlačítkem myši v seznamu, vyberte Vlastnosti &gt; Nástroje &gt; 'Zkontrolovat', a ujistěte se, že jste vybrali volbu 'Automaticky opravovat chyby systému souborů' a klikněte na Start).\n\nPokud kroky uvedené výše nepomohly, pokračujte kroky uvedenými níže.</string>
- <string lang="cs" key="DISK_FREE_BYTES">Volné místo na disku %s je %.2f bytů.</string>
+ <string lang="cs" key="CANNOT_RESIZE_FILESYS">Chyba: Systém souborů nelze zmenšit (systém souborů musí být zmenšen, aby se vytvořilo místo pro hlavičku svazku a záložní hlavičku).\n\nMožné příčiny a řešení:\n\n- Málo volného místa na svazku. Ujistěte se, že žádná další aplikace nezapisuje do systému souborů.\n\n- Poškozený systém souborů. Zkuste jej zkontrolovat a opravte chyby (klikněte na dané písmeno disku pravým tlačítkem myši v seznamu, vyberte Vlastnosti &gt; Nástroje &gt; 'Zkontrolovat', a ujistěte se, že jste vybrali možnost 'Automaticky opravovat chyby systému souborů' a klikněte na Start).\n\nPokud výše uvedené kroky nepomohly, následujte kroky uvedené níže.</string>
+ <string lang="cs" key="NOT_ENOUGH_FREE_FILESYS_SPACE_FOR_SHRINK">Chyba: Na svazku není dostatek volného místa a systém souborů tak nemůže být zmenšen (systém souborů musí být zmenšen, aby se vytvořilo místo pro záložní hlavičku svazku).\n\nSmažte všechny zbytečné soubory a vyprázdněte koš, aby zbylo aspoň 256 KB volného místa a pak to zkuste znovu. Kvůli problému Windows se může stát, že Windows Explorer vám ukáže jinou hodnotu volného místa, dokud se systém nerestartuje. Pokud restart systému nepomůže, systém souborů může být poškozený. Zkuste jej zkontrolovat a opravit případné chyby (klikněte na dané písmeno disku pravým tlačítkem myši v seznamu, vyberte Vlastnosti &gt; Nástroje &gt; 'Zkontrolovat', a ujistěte se, že jste vybrali možnost 'Automaticky opravovat chyby systému souborů' a klikněte na Start).\n\nPokud kroky uvedené výše nepomohly, pokračujte kroky uvedenými níže.</string>
+ <string lang="cs" key="DISK_FREE_BYTES">Volné místo na disku %s je %.2f bajtů.</string>
<string lang="cs" key="DISK_FREE_KB">Volné místo na disku %s je %.2f KB</string>
<string lang="cs" key="DISK_FREE_MB">Volné místo na disku %s je %.2f MB</string>
<string lang="cs" key="DISK_FREE_GB">Volné místo na disku %s je %.2f GB</string>
@@ -449,8 +449,8 @@
<string lang="cs" key="DISK_FREE_PB">Volné místo na disku %s je %.2f PB</string>
<string lang="cs" key="DRIVELETTERS">Nelze získat volná písmena disků.</string>
<string lang="cs" key="DRIVER_NOT_FOUND">Chyba: Ovladač VeraCrypt nebyl nalezen.\n\nZkopírujte soubory 'veracrypt.sys' a 'veracrypt-x64.sys' do adresáře, kde je umístěna hlavní aplikace VeraCrypt (VeraCrypt.exe).</string>
- <string lang="cs" key="DRIVER_VERSION">Chyba: Aktuálně je spuštěna nekompatibilní verze ovladače VeraCrypt.\n\nPokud se snažíte spustit VeraCrypt v cestovním módu (např. bez instalace) a máte přitom již nainstalovanou jinou verzi VeraCryptu, musíte ji nejprve odinstalovat (nebo aktualizovat pomocí VeraCrypt instalátoru). Pro odinstalaci následujte tyto kroky: Na Windows Vista nebo novější vyberte 'Menu Start' &gt; Počítač &gt; 'Odinstalovat nebo změnit program' &gt; VeraCrypt &gt; Odinstalace; na Windows XP, vyberte 'Menu Start' &gt; Nastavení &gt; 'Ovládací panely' &gt; 'Přidat nebo odebrat programy' &gt; VeraCrypt &gt; Odstranit.\n\nVelmi podobně, pokud se snažíte spustit VeraCrypt v cestovním módu (např. bez instalace) a jiná verze programu VeraCrypt již běží v cestovním módu, musíte nejprve restartovat systém a pak spustit pouze tuto novou verzi.</string>
- <string lang="cs" key="ERR_CIPHER_INIT_FAILURE">Chyba: Selhala inicializace šifry.</string>
+ <string lang="cs" key="DRIVER_VERSION">Chyba: Aktuálně je spuštěna nekompatibilní verze ovladače VeraCrypt.\n\nPokud se snažíte spustit VeraCrypt v přenosném režimu (např. bez instalace) a máte přitom již nainstalovanou jinou verzi VeraCryptu, musíte ji nejprve odinstalovat (nebo aktualizovat pomocí VeraCrypt instalátoru). Pro odinstalaci následujte tyto kroky: Na Windows Vista nebo novější vyberte 'Menu Start' &gt; Počítač &gt; 'Odinstalovat nebo změnit program' &gt; VeraCrypt &gt; Odinstalace; na Windows XP, vyberte 'Menu Start' &gt; Nastavení &gt; 'Ovládací panely' &gt; 'Přidat nebo odebrat programy' &gt; VeraCrypt &gt; Odstranit.\n\nVelmi podobně, pokud se snažíte spustit VeraCrypt v přenosném režimu (např. bez instalace) a jiná verze programu VeraCrypt již běží v přenosném režimu, musíte nejprve restartovat systém a pak spustit pouze tuto novou verzi.</string>
+ <string lang="cs" key="ERR_CIPHER_INIT_FAILURE">Chyba: Inicializace šifry nebyla úspěšná.</string>
<string lang="cs" key="ERR_CIPHER_INIT_WEAK_KEY">Chyba: Byl detekován slabý nebo potenciálně slabý klíč. Klíč bude zahozen. Zkuste to prosím znovu.</string>
<string lang="cs" key="EXCEPTION_REPORT">Došlo ke kritické chybě a VeraCrypt musí být ukončen. Pokud to bylo způsobeno chybou v VeraCryptu, rádi bychom ji opravili. Můžete nám poslat automaticky vygenerovanou zprávu, která obsahuje následující položky:\n\n- Verze programu\n- Verze operačního systému\n- Typ procesoru\n- Název komponenty VeraCrypt\n- Kontrolní součet spustitelného souboru VeraCrypt\n- Symbolický název okna dialogu\n- Typ chyby\n- Adresa chyby\n- Zásobník VeraCryptu\n\nZvolíte-li 'Ano', následující URL odkaz (který obsahuje celou zprávu o chybě) se otevře ve vašem výchozím internetovém prohlížeči.\n\n%hs\n\nChcete nám poslat výše uvedenou zprávu o chybě?</string>
<string lang="cs" key="EXCEPTION_REPORT_EXT">Došlo ke kritické chybě v systému, což zapříčinilo ukončení VeraCryptu.\n\nTato chyba nebyla způsobena VeraCryptem (takže ji ani vývojáři nemohou opravit). Zkontrolujte váš systém pro případné problémy (např. konfigurace systému, síťové připojení, selhávající hardwarová komponenta).</string>
@@ -472,24 +472,24 @@
<string lang="cs" key="PERMANENTLY_DECRYPT">&amp;Dešifrovat trvale</string>
<string lang="cs" key="EXIT">&amp;Konec</string>
<string lang="cs" key="EXT_PARTITION">Vytvořte prosím logický disk pro tento rozšířený oddíl a poté to zkuste znovu.</string>
- <string lang="cs" key="FILE_HELP">Svazek VeraCrypt může být umístěn v souboru (tzv. VeraCrypt souborový svazek), který může zůstat na pevném disku, USB flash disku, atd. Souborový svazek VeraCrypt je jako každý jiný obyčejný soubor (může být například přemístěn nebo smazán jako normální soubor). Klikněte na 'Vybrat soubor' pro výběr jména souboru pro souborový svazek a zvolte také umístění, kde ho chcete vytvořit.\n\nVAROVÁNÍ: Vyberete-li již existující soubor, VeraCrypt ho NEZAŠIFRUJE; soubor bude smazán a nahrazen nově vytvořeným souborovým svazkem VeraCrypt. Existující soubory budete moci zašifrovat (později) jejich přesunutím do souborového svazku VeraCrypt, který se nyní chystáte vytvořit.</string>
- <string lang="cs" key="FILE_HELP_HIDDEN_HOST_VOL">Vyberte umístění vnějšího svazku, který se má vytvořit (uvnitř tohoto svazku bude později vytvořen skrytý svazek).\n\nSvazek VeraCrypt může být umístěn v souboru (tzv. VeraCrypt souborový svazek), který může zůstat na pevném disku, USB flash disku, atd. Souborový svazek VeraCrypt je jako každý jiný obyčejný soubor (může být například přemístěn nebo smazán jako normální soubor). Klikněte na 'Vybrat soubor' pro výběr jména souboru pro souborový svazek a zvolte také umístění, kde ho chcete vytvořit.\n\nVAROVÁNÍ: Vyberete-li již existující soubor, VeraCrypt ho NEZAŠIFRUJE; soubor bude smazán a nahrazen nově vytvořeným souborovým svazkem VeraCrypt. Existující soubory budete moci zašifrovat (později) jejich přesunutím do souborového svazku VeraCrypt, který se nyní chystáte vytvořit.</string>
+ <string lang="cs" key="FILE_HELP">Svazek VeraCrypt může být umístěn v souboru (tzv. VeraCrypt souborový svazek), který může zůstat na pevném disku, USB flash disku, atd. Souborový svazek VeraCrypt je jako každý jiný obyčejný soubor (může být například přemístěn nebo smazán jako normální soubor). Klikněte na 'Vybrat soubor' pro výběr jména souboru pro souborový svazek a zvolte také umístění, kde ho chcete vytvořit.\n\nUPOZORNĚNÍ: Vyberete-li již existující soubor, VeraCrypt ho NEZAŠIFRUJE; soubor bude smazán a nahrazen nově vytvořeným souborovým svazkem VeraCrypt. Existující soubory budete moci zašifrovat (později) jejich přesunutím do souborového svazku VeraCrypt, který se nyní chystáte vytvořit.</string>
+ <string lang="cs" key="FILE_HELP_HIDDEN_HOST_VOL">Vyberte umístění vnějšího svazku, který se má vytvořit (uvnitř tohoto svazku bude později vytvořen skrytý svazek).\n\nSvazek VeraCrypt může být umístěn v souboru (tzv. VeraCrypt souborový svazek), který může zůstat na pevném disku, USB flash disku, atd. Souborový svazek VeraCrypt je jako každý jiný obyčejný soubor (může být například přemístěn nebo smazán jako normální soubor). Klikněte na 'Vybrat soubor' pro výběr jména souboru pro souborový svazek a zvolte také umístění, kde ho chcete vytvořit.\n\nUPOZORNĚNÍ: Vyberete-li již existující soubor, VeraCrypt ho NEZAŠIFRUJE; soubor bude smazán a nahrazen nově vytvořeným souborovým svazkem VeraCrypt. Existující soubory budete moci zašifrovat (později) jejich přesunutím do souborového svazku VeraCrypt, který se nyní chystáte vytvořit.</string>
<string lang="cs" key="DEVICE_HELP">Zašifrované VeraCrypt svazky umístěné na zařízeních mohou být vytvořeny uvnitř oddílů na pevných discích, solid-state discích, USB pamětích, a na dalších podporovaných úložných zařízeních. Oddíly mohou být také zašifrovány za běhu.\n\nNavíc, zašifrované VeraCrypt svazky na zařízeních mohou být vytvořeny na takových zařízeních, které neobsahují žádné oddíly (včetně pevných disků a solid-state disků).\n\nPoznámka: Zařízení, které obsahuje oddíly, může být úplně zašifrováno za běhu (s pomocí jednoho klíče) pouze tehdy, pokud jde o disk, kde jsou Windows nainstalovány a odkud také nabíhají.</string>
- <string lang="cs" key="DEVICE_HELP_NO_INPLACE">Zašifrované VeraCrypt svazky umístěné na zařízeních mohou být vytvořeny uvnitř oddílů na pevných discích, solid-state discích, USB pamětích, a na dalších podporovaných úložných zařízeních.\n\nVAROVÁNÍ: Mějte na paměti, že oddíl/zařízení bude zformátováno a všechna aktuální data ztracena.</string>
- <string lang="cs" key="DEVICE_HELP_HIDDEN_HOST_VOL">\nVyberte umístění vnějšího svazku, který se má vytvořit (uvnitř tohoto svazku bude později vytvořen svazek skrytý).\n\nVnější svazky mohou být vytvořeny uvnitř oddílů na pevných discích, solid-state discích, USB pamětích a na dalších podporovaných úložných zařízeních. Vnější svazky mohou být také vytvořeny na takových zařízeních, které neobsahují žádné oddíly (včetně pevných disků a solid-state disků).\n\nVAROVÁNÍ: Mějte na paměti, že oddíl/zařízení bude zformátováno a všechna aktuální data na něm budou ztracena.</string>
+ <string lang="cs" key="DEVICE_HELP_NO_INPLACE">Zašifrované VeraCrypt svazky umístěné na zařízeních mohou být vytvořeny uvnitř oddílů na pevných discích, solid-state discích, USB pamětích, a na dalších podporovaných úložných zařízeních.\n\nUPOZORNĚNÍ: Mějte na paměti, že oddíl/zařízení bude zformátováno a všechna aktuální data ztracena.</string>
+ <string lang="cs" key="DEVICE_HELP_HIDDEN_HOST_VOL">\nVyberte umístění vnějšího svazku, který se má vytvořit (uvnitř tohoto svazku bude později vytvořen svazek skrytý).\n\nVnější svazky mohou být vytvořeny uvnitř oddílů na pevných discích, solid-state discích, USB pamětích a na dalších podporovaných úložných zařízeních. Vnější svazky mohou být také vytvořeny na takových zařízeních, které neobsahují žádné oddíly (včetně pevných disků a solid-state disků).\n\nUPOZORNĚNÍ: Mějte na paměti, že oddíl/zařízení bude zformátováno a všechna aktuální data na něm budou ztracena.</string>
<string lang="cs" key="FILE_HELP_HIDDEN_HOST_VOL_DIRECT">Zvolte umístění svazku VeraCrypt, uvnitř kterého chcete vytvořit skrytý svazek.</string>
- <string lang="cs" key="FILE_IN_USE">VAROVÁNÍ: Hostitelský soubor/zařízení se již používá!\n\nPokud to budete ignorovat, může dojít k neočekávaným výsledkům včetně nestability systému. Všechny aplikace, které by mohly používat hostitelský soubor/zařízení (např. antivir nebo zálohovací aplikace) by měly být ukončeny ještě před připojením svazku.\n\nPokračovat v připojení?</string>
- <string lang="cs" key="FILE_IN_USE_FAILED">Chyba: Svazek nelze připojit. Hostitelský soubor/zařízení je již používáno. Pokus o připojení bez výhradních práv selhal také.</string>
+ <string lang="cs" key="FILE_IN_USE">UPOZORNĚNÍ: Hostitelský soubor/zařízení se již používá.\n\nPokud to budete ignorovat, může dojít k neočekávaným výsledkům včetně nestability systému. Všechny aplikace, které by mohly používat hostitelský soubor/zařízení (např. antivir nebo zálohovací aplikace) by měly být ukončeny ještě před připojením svazku.\n\nPokračovat v připojení?</string>
+ <string lang="cs" key="FILE_IN_USE_FAILED">Chyba: Svazek nelze připojit. Hostitelský soubor/zařízení je již používáno. Pokus o připojení bez výhradních práv také nebyl úspěšný.</string>
<string lang="cs" key="FILE_OPEN_FAILED">Tento soubor nemohl být otevřen.</string>
<string lang="cs" key="FILE_TITLE">Umístění svazku</string>
<string lang="cs" key="FILESYS_PAGE_TITLE">Velké soubory</string>
<string lang="cs" key="FILESYS_PAGE_HELP_QUESTION">Budete ukládat na tento VeraCrypt svazek soubory větší než 4 GB?</string>
<string lang="cs" key="FILESYS_PAGE_HELP_EXPLANATION">Dle vašeho výběru výše, VeraCrypt vybere vhodný systém souborů pro svazek VeraCrypt (budete moci vybrat systém souborů v dalším kroku).</string>
- <string lang="cs" key="FILESYS_PAGE_HELP_EXPLANATION_HIDVOL">Protože vytváříte vnější svazek, měli byste zvážit volbu 'Ne'. Pokud zvolíte 'Ano', předvolený systém souborů bude NTFS, který není tak vhodný pro externí svazky jako FAT (např. maximální možná velikost skrytého svazku bude mnohem větší, pokud bude svazek naformátován jako FAT). Standardně je zvolen FAT pro skrytý i normální svazek (tím nejsou FAT svazky tak podezřelé). Pokud ale bude chtít uživatel ukládat soubory větší než 4 GB (což souborový systém FAT nedovoluje), FAT nebude předvoleným systémem souborů.</string>
+ <string lang="cs" key="FILESYS_PAGE_HELP_EXPLANATION_HIDVOL">Protože vytváříte vnější svazek, měli byste zvážit možnost 'Ne'. Pokud zvolíte 'Ano', výchozí systém souborů bude NTFS, který není tak vhodný pro externí svazky jako FAT (např. maximální možná velikost skrytého svazku bude mnohem větší, pokud bude svazek naformátován jako FAT). Standardně je zvolen FAT pro skrytý i normální svazek (tím nejsou FAT svazky tak podezřelé). Pokud ale bude chtít uživatel ukládat soubory větší než 4 GB (což souborový systém FAT nedovoluje), FAT nebude výchozím systémem souborů.</string>
<string lang="cs" key="FILESYS_PAGE_HELP_EXPLANATION_HIDVOL_CONFIRM">Jste si jisti volbou 'Ano'?</string>
- <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_TITLE">Mód vytvoření svazku</string>
- <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_FORMAT_HELP">Toto je nejrychlejší cesta, jak vytvořit VeraCrypt svazek sídlící v oddílu nebo celém zařízení (šifrování za běhu, což je druhá volba, je pomalejší, protože obsah každého sektoru se musí nejprve přečíst, pak zašifrovat a nakonec zapsat). Jakákoliv data aktuálně uložená v oddílu/zařízení, budou ztracena (data NEBUDOU zašifrována; budou přepsána náhodnými daty). Pokud chcete zašifrovat data přítomna v oddílu, zvolte druhou volbu.</string>
- <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_INPLACE_HELP">Vybraný oddíl a všechna data uložena na něm budou zašifrována za běhu. Je-li oddíl prázdný, měli byste vybrat druhou volbu (svazek bude vytvořen mnohem rychleji).</string>
+ <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_TITLE">Režim vytvoření svazku</string>
+ <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_FORMAT_HELP">Toto je nejrychlejší cesta, jak vytvořit VeraCrypt svazek sídlící v oddílu nebo celém zařízení (šifrování za běhu, což je druhá volba, je pomalejší, protože obsah každého sektoru se musí nejprve přečíst, pak zašifrovat a nakonec zapsat). Jakákoliv data aktuálně uložená v oddílu/zařízení, budou ztracena (data NEBUDOU zašifrována; budou přepsána náhodnými daty). Pokud chcete zašifrovat data přítomna v oddílu, zvolte druhou možnost.</string>
+ <string lang="cs" key="DEVICE_TRANSFORM_MODE_PAGE_INPLACE_HELP">Vybraný oddíl a všechna data uložena na něm budou zašifrována za běhu. Je-li oddíl prázdný, měli byste vybrat druhou možnost (svazek bude vytvořen mnohem rychleji).</string>
<string lang="cs" key="NOTE_BEGINNING">Poznámka: </string>
<string lang="cs" key="RESUME">&amp;Pokračovat</string>
<string lang="cs" key="DEFER">&amp;Pozdržet</string>
@@ -498,7 +498,7 @@
<string lang="cs" key="FORMAT">&amp;Formátovat</string>
<string lang="cs" key="WIPE">&amp;Vyčistit</string>
<string lang="cs" key="FORMAT_ABORT">Přerušit formátování?</string>
- <string lang="cs" key="SHOW_MORE_INFORMATION">Ukázat více informací</string>
+ <string lang="cs" key="SHOW_MORE_INFORMATION">Zobrazit více informací</string>
<string lang="cs" key="DO_NOT_SHOW_THIS_AGAIN">Znovu již neukazovat</string>
<string lang="cs" key="WIPE_FINISHED">Obsah oddílu/zařízení byl úspěšně vymazán.</string>
<string lang="cs" key="WIPE_FINISHED_DECOY_SYSTEM_PARTITION">Obsah oddílu, kde je umístěn originální systém (jehož klonem je skrytý systém), byl úspěšně vymazán.</string>
@@ -508,11 +508,11 @@
<string lang="cs" key="FORMAT_FINISHED_HELP">\n\nVeraCrypt svazek byl vytvořen a je připraven k použití. Pokud chcete vytvořit další svazek VeraCrypt, klikněte Další. Jinak klikněte Konec.</string>
<string lang="cs" key="SYSENC_HIDDEN_VOL_FORMAT_FINISHED_HELP">\n\nSkrytý svazek VeraCrypt byl úspěšně vytvořen (skrytý operační systém bude umístěn v tomto skrytém svazku).\n\nKlikněte na Další pro pokračování.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_FINISHED_TITLE">Svazek plně zašifrován</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_FINISHED_TITLE">Volume Fully Decrypted</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_FINISHED_TITLE">Svazek byl plně dešifrován</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_FINISHED_INFO">DŮLEŽITÉ: PRO PŘIPOJENÍ TOHOTO NOVĚ VYTVOŘENÉHO SVAZKU VERACRYPT A PRO PŘÍSTUP K DATŮM NA NĚM, KLIKNĚTE NA 'Autom. připojit zařízení' V HLAVNÍM OKNĚ VERACRYPT. Jakmile zadáte správné heslo (a/nebo přiložíte správný souborový klíč/e), svazek bude připojen k písmenu jednotky, které jste vybrali v seznamu v hlavním okně VeraCryptu (a budete moci přistupovat k zašifrovaným datům přes toto vybrané písmeno jednotky).\n\nZAPAMATUJTE SI PROSÍM, NEBO ZAPIŠTE, VÝŠE UVEDENÉ KROKY. TĚMITO KROKY SE MUSÍTE ŘÍDIT KDYKOLIV, KDYŽ BUDETE CHTÍT SVAZEK PŘIPOJIT A PŘISTUPOVAT K DATŮM NA NĚM. Případně můžete v hlavním okně VeraCryptu kliknout na 'Vybrat zařízení', pak vybrat tento oddíl/svazek a kliknout na 'Připojit'.\n\nOddíl/svazek byl úspěšně zašifrován (obsahuje nyní úplně zašifrovaný svazek VeraCrypt) a je připraven k použití.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_FINISHED_INFO">The VeraCrypt volume has been successfully decrypted.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_FINISHED_DRIVE_LETTER_SEL_INFO">The VeraCrypt volume has been successfully decrypted.\n\nPlease select a drive letter that you wish to assign to the decrypted volume and then click Finish.\n\nIMPORTANT: Until a drive letter is assigned to the decrypted volume, you will not be able to access data stored on the volume.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_FINISHED_NO_DRIVE_LETTER_AVAILABLE">Warning: To be able to access the decrypted data, a drive letter needs to be assigned to the decrypted volume. However, no drive letter is currently available.\n\nPlease vacate a drive letter (for example, by disconnecting a USB flash drive or external hard drive, etc.) and then click OK.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_FINISHED_INFO">Svazek VeraCrypt byl plně dešifrován.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_FINISHED_DRIVE_LETTER_SEL_INFO">Svazek VeraCrypt byl úspěšně dešifrován.\n\nVyberte písmeno jednotky, které si přejete přiřadit k dešifrovanému svazku a kikněte na tlačítko "Dokončit".\n\nDŮLEŽITÉ: Dokud bude přiřazeno písmeno dešifrovanému svazku, nebude možné přistupovat k uloženým datům.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_FINISHED_NO_DRIVE_LETTER_AVAILABLE">UPOZORNĚNÍ: Pro přístup k dešifrovaným datům, musí být ke svazku přiřazeno písmeno jednotky. Momentálně není vybráno žádné písmeno.\n\nUvolněte prosím, písmeno jednotky (např. odpojením USB zařízení nebo externího pevného disku, atd.) a klikněte na tlačítko "OK".</string>
<string lang="cs" key="FORMAT_FINISHED_INFO">Svazek VeraCrypt byl úspěšně vytvořen.</string>
<string lang="cs" key="FORMAT_FINISHED_TITLE">Svazek byl vytvořen</string>
<string lang="cs" key="FORMAT_HELP">DŮLEŽITÉ: Pohybujte s myší v tomto okně co nejnáhodněji. Čím déle s ní budete hýbat, tím lépe. Kryptografická síla šifrovacích klíčů se tak výrazně zvýší. Pak klikněte Formátovat pro vytvoření svazku.</string>
@@ -521,49 +521,49 @@
<string lang="cs" key="FORMAT_HIDVOL_TITLE">Formát skrytého svazku</string>
<string lang="cs" key="FORMAT_TITLE">Formát svazku</string>
<string lang="cs" key="HELP_READER_ERROR">Pro čtení nebo tisk Uživatelské příručky VeraCrypt je nutný prohlížeč Adobe Reader (nebo jiný kompatibilní nástroj). Adobe Reader (freeware) lze stáhnout na adrese: www.adobe.com\n\nChcete si raději prohlédnout online dokumentaci?</string>
- <string lang="cs" key="HIDDEN_VOL_WIZARD_MODE_NORMAL_HELP">Zvolíte-li tuto možnost, průvodce vám nejdříve pomůže vytvořit běžný svazek VeraCrypt a poté skrytý svazek uvnitř. Nezkušení uživatelé by vždy měli vybrat tuto volbu.</string>
+ <string lang="cs" key="HIDDEN_VOL_WIZARD_MODE_NORMAL_HELP">Zvolíte-li tuto možnost, průvodce vám nejdříve pomůže vytvořit běžný svazek VeraCrypt a poté skrytý svazek uvnitř. Nezkušení uživatelé by vždy měli vybrat tuto možnost.</string>
<string lang="cs" key="HIDDEN_VOL_WIZARD_MODE_DIRECT_HELP">Zvolíte-li tuto možnost, vytvoříte skrytý svazek uvnitř existujícího svazku VeraCrypt. Předpokládá se, že jste již vytvořili svazek VeraCrypt, do kterého lze umístit skrytý svazek.</string>
- <string lang="cs" key="HIDDEN_VOL_WIZARD_MODE_TITLE">Mód vytvoření svazku</string>
+ <string lang="cs" key="HIDDEN_VOL_WIZARD_MODE_TITLE">Režim vytvoření svazku</string>
<string lang="cs" key="HIDVOL_FORMAT_FINISHED_TITLE">Skrytý svazek byl vytvořen</string>
- <string lang="cs" key="HIDVOL_FORMAT_FINISHED_HELP">Skrytý svazek VeraCrypt byl úspěšně vytvořen a je připraven k použití. Pokud jste postupovali dle instrukcí, a pokud jste si dali pozor na požadavky a opatření uvedená v sekci "Bezpečnostní požadavky a opatření týkající se skrytých svazků" v uživatelské příručce VeraCrypt, mělo by být nemožné prokázat, že skrytý svazek existuje, i když je připojený externí svazek.\n\nVAROVÁNÍ: POKUD NEBUDETE CHRÁNIT SKRYTÝ SVAZEK (PRO VÍCE INFORMACÍ, JAK TAK UČINIT, VIZ SEKCE "OCHRANA SKYTÝCH SVAZKŮ PROTI POŠKOZENÍ" V UŽIVATELSKÉ PŘÍRUČCE VERACRYPT), NEZAPISUJTE DO VNĚJŠÍHO SVAZKU. JINAK MŮŽETE PŘEPSAT A POŠKODIT SKRYTÝ SVAZEK!</string>
+ <string lang="cs" key="HIDVOL_FORMAT_FINISHED_HELP">Skrytý svazek VeraCrypt byl úspěšně vytvořen a je připraven k použití. Pokud jste postupovali dle instrukcí, a pokud jste si dali pozor na požadavky a opatření uvedená v sekci "Bezpečnostní požadavky a opatření týkající se skrytých svazků" v uživatelské příručce VeraCrypt, mělo by být nemožné prokázat, že skrytý svazek existuje, i když je připojený externí svazek.\n\nUPOZORNĚNÍ: POKUD NEBUDETE CHRÁNIT SKRYTÝ SVAZEK (PRO VÍCE INFORMACÍ, JAK TAK UČINIT, VIZ SEKCE "OCHRANA SKYTÝCH SVAZKŮ PROTI POŠKOZENÍ" V UŽIVATELSKÉ PŘÍRUČCE VERACRYPT), NEZAPISUJTE DO VNĚJŠÍHO SVAZKU. JINAK MŮŽETE PŘEPSAT A POŠKODIT SKRYTÝ SVAZEK.</string>
<string lang="cs" key="FIRST_HIDDEN_OS_BOOT_INFO">Spustili jste operační systém na skrytém svazku. Jak jste si asi všimli, skrytý operační systém vypadá tak, jako by byl nainstalován na stejném oddílu původního operačního systému. Ale v reálu je nainstalován uvnitř oddílu za ním (ve skrytém svazku). Všechny operace pro čtení a zapisování jsou transparentně přesměrovány z původního oddílu systému do skrytého svazku.\n\nAni operační systém, ani aplikace nebudou vědět, data čtená a zapisovaná do systémového oddílu jsou ve skutečnosti zapisována a čtena z oddílu za ním (z/do skrytého svazku). Jakákoliv taková data jsou zašifrována a dešifrována za běhu, jako obvykle (s jiným šifrovacím klíčem, než je klíč použitý pro operační systém, který odláká pozornost).\n\n\nKlikněte na Další pro pokračování.</string>
<string lang="cs" key="HIDVOL_HOST_FILLING_HELP_SYSENC">Vnější svazek byl vytvořen a připojen jako disk %hc:. Do tohoto vnějšího svazku byste nyní měli nakopírovat nějaká citlivě vypadající soubory, které ve skutečnosti NECHCETE skrýt. Budou tam umístěny pro kohokoliv, kdo by vás nutil prozradit heslo k prvnímu oddílu za oddílem s operačním systémem, kde budou umístěny jak vnější svazek, tak skrytý svazek (obsahující skrytý operační systém). Budete moci odhalit heslo pro tento vnější svazek a existence skrytého svazku (a skrytého operačního systému) zůstane utajena.\n\nDŮLEŽITÉ: Soubory, které nakopírujete do vnějšího svazku, by neměly zabírat více než %s. Jinak by nemusel být k dispozici dostatek volného místa na vnějším svazku pro skrytý svazek (a nebudete moci pokračovat). Jakmile dokončíte kopírování, klikněte na Další (neodpojujte svazek).</string>
<string lang="cs" key="HIDVOL_HOST_FILLING_HELP">Vnější svazek byl úspěšně vytvořen a připojen jako jednotka %hc:. Do tohoto svazku byste nyní měli nakopírovat nějaké citlivě-vypadající soubory, které ve skutečnosti NECHCETE skrýt. Soubory tam budou uloženy pro kohokoliv, kdo by Vás nutil odhalit heslo. Odhalíte jen heslo pro tento vnější svazek, ne pro skrytý. Soubory, o které Vám jde ve skutečnosti, budou uloženy ve skrytém svazku, který se vytvoří později. Jakmile data dokopírujete, klikněte Další. Svazek neodpojujte.\n\nPoznámka: Až kliknete Další, clusterová bitmapa vnějšího svazku bude oskenována pro určení velikosti nepřerušené oblasti volného místa, jehož konec se nachází na konci svazku. Tato oblast bude obsahovat skrytý svazek, takže tím omezí svou maximální možnou velikost. Skenování clusterové bitmapy zajistí, že žádná data na vnějším svazku nebudou přepsána vnějším svazkem.</string>
<string lang="cs" key="HIDVOL_HOST_FILLING_TITLE">Obsah vnějšího svazku</string>
- <string lang="cs" key="HIDVOL_HOST_PRE_CIPHER_HELP">\n\nV dalším kroku zadáte volby pro vnější svazek (uvnitř kterého bude později vytvořen skrytý svazek).</string>
+ <string lang="cs" key="HIDVOL_HOST_PRE_CIPHER_HELP">\n\nV dalším kroku zadáte možnosti pro vnější svazek (uvnitř kterého bude později vytvořen skrytý svazek).</string>
<string lang="cs" key="HIDVOL_HOST_PRE_CIPHER_HELP_SYSENC">\n\nV dalších krocích vytvoříte tzv. externí svazek VeraCrypt uvnitř prvního oddílu za systémovým oddílem (jak bylo vysvětleno v jednom z předchozích kroků).</string>
<string lang="cs" key="HIDVOL_HOST_PRE_CIPHER_TITLE">Vnější svazek</string>
- <string lang="cs" key="HIDDEN_OS_PRE_CIPHER_HELP">V následujících krocích zadáte volby a heslo pro skrytý svazek, který bude obsahovat skrytý operační systém.\n\nPoznámka: Clusterová bitmapa vnějšího svazku byla oskenována, aby se zjistila velikost nepřerušovaného volného místa, jehož konec bude uspořádán s koncem vnějšího svazku. V této oblasti bude umístěn skrytý svazek, omezuje tedy jeho maximální možnou velikost. Maximální možná velikost skrytého svazku byla vypočtena a potvrzena tak, že musí být větší, než velikost systémového oddílu (což je nutné, protože celý obsah systémového oddílu bude muset být zkopírován na skrytý svazek). Tím se zajistí, že žádná data, která jsou aktuálně uložena na vnějším svazku, nebudou přepsána daty zapsanými do oblasti skrytého svazku.</string>
- <string lang="cs" key="HIDDEN_OS_PRE_CIPHER_WARNING">DŮLEŽITÉ: Zapamatujte si, prosím, algoritmy, které vyberete v tomto kroku. Budete muset vybrat úplně stejné algoritmy pro klamný systém. Jinak bude skryté systém nepřístupný! (Klamný systém musí být zašifrován stejným šifrovacím algoritmem jako skrytý systém.)\n\nPoznámka: Důvodem je, že klamný systém a skrytý systém budou sdílet společný bootovací zavaděč, který podporuje jen jeden algoritmus, vybraný uživatelem (pro každý algoritmus existuje speciální verze bootovacího zavaděče VeraCryptu).</string>
- <string lang="cs" key="HIDVOL_PRE_CIPHER_HELP">\n\nBitmapový cluster svazku byl oskenován a maximální možná velikost skrytého svazku byla určena. V dalším kroku zadáte volby, velikost a heslo pro skrytý svazek.</string>
+ <string lang="cs" key="HIDDEN_OS_PRE_CIPHER_HELP">V následujících krocích zadáte možnosti a heslo pro skrytý svazek, který bude obsahovat skrytý operační systém.\n\nPoznámka: Clusterová bitmapa vnějšího svazku byla oskenována, aby se zjistila velikost nepřerušovaného volného místa, jehož konec bude uspořádán s koncem vnějšího svazku. V této oblasti bude umístěn skrytý svazek, omezuje tedy jeho maximální možnou velikost. Maximální možná velikost skrytého svazku byla vypočtena a potvrzena tak, že musí být větší, než velikost systémového oddílu (což je nutné, protože celý obsah systémového oddílu bude muset být zkopírován na skrytý svazek). Tím se zajistí, že žádná data, která jsou aktuálně uložena na vnějším svazku, nebudou přepsána daty zapsanými do oblasti skrytého svazku.</string>
+ <string lang="cs" key="HIDDEN_OS_PRE_CIPHER_WARNING">DŮLEŽITÉ: Zapamatujte si, prosím, algoritmy, které vyberete v tomto kroku. Budete muset vybrat úplně stejné algoritmy pro klamný systém. Jinak bude skryté systém nepřístupný. (Klamný systém musí být zašifrován stejným šifrovacím algoritmem jako skrytý systém.)\n\nPoznámka: Důvodem je, že klamný systém a skrytý systém budou sdílet společný bootovací zavaděč, který podporuje jen jeden algoritmus, vybraný uživatelem (pro každý algoritmus existuje speciální verze bootovacího zavaděče VeraCryptu).</string>
+ <string lang="cs" key="HIDVOL_PRE_CIPHER_HELP">\n\nBitmapový cluster svazku byl oskenován a maximální možná velikost skrytého svazku byla určena. V dalším kroku zadáte možnosti, velikost a heslo pro skrytý svazek.</string>
<string lang="cs" key="HIDVOL_PRE_CIPHER_TITLE">Skrytý svazek</string>
- <string lang="cs" key="HIDVOL_PROT_WARN_AFTER_MOUNT">Skrytý svazek je nyní chráněn proti poškození, dokud nebude odpojen vnější svazek.\n\nVAROVÁNÍ: Bude-li zaznamenána snaha zapsat data do skrytého svazku, VeraCrypt začne chránit proti zápisu celý svazek (jak vnější tak skrytou část) dokud nebude odpojen. To může způsobit poškození souborového systému vnějšího svazku, což může (pokud se tak bude dít opakovaně) nepříznivě ovlivnit hodnověrnost popření skrytého svazku. Proto byste měli zajistit, aby do skryté části svazku nebylo zapisováno. Jakákoliv data uložená do skrytého svazku nebudou uložena a ztratí se. Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis selhal" nebo "Parametr je nesprávný").</string>
- <string lang="cs" key="HIDVOL_PROT_WARN_AFTER_MOUNT_PLURAL">Každý skrytý svazek uvnitř nově připojených svazků je nyní chráněn proti poškození, dokud nebude odpojen.\n\nVAROVÁNÍ: Bude-li zaznamenána snaha uložit data do chráněného oblasti skrytého svazku jakéhokoliv z těchto svazků, VeraCrypt začne chránit proti zápisu celý svazek (jak vnější tak skrytou část) dokud nebude odpojen. To může způsobit poškození souborového systému vnějšího svazku, což může (pokud se tak bude dít opakovaně) nepříznivě ovlivnit hodnověrnost popření skrytého svazku. Proto byste měli zajistit, aby do skryté části svazku nebylo zapisováno. Jakákoliv data uložená do skrytého svazku nebudou uložena a ztratí se. Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis selhal" nebo "Parametr je nesprávný").</string>
- <string lang="cs" key="DAMAGE_TO_HIDDEN_VOLUME_PREVENTED">VAROVÁNÍ: Byl zaznamenán pokus o zapsání dat do skryté oblasti svazku připojeného jako %c:! VeraCrypt zabránil zápisu těchto dat, aby skrytý svazek chránil. To mohlo způsobit poškození souborového systému vnějšího svazku a Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis selhal" nebo "Parametr je nesprávný"). Celý svazek (jak vnější tak skrytá část) bude chráněn proti zápisu, dokud nebude odpojen. Pokud to není první případ, kdy VeraCrypt chránil skrytou část svazku před zápisem, hodnověrnost popření skrytého svazku může být nepříznivě ovlivněna (kvůli možné neobvyklé korelované inkonzistenci uvnitř vnějšího svazku souborového systému). Proto byste měli zvážit vytvoření nového svazku VeraCrypt (s vypnutou funkcí Rychlého formátování) a přesunout soubory z tohoto svazku do nového; tento svazek by měl být bezpečně vymazán (jak vnější tak skrytá část). Důrazně doporučujeme, abyste nyní operační systém restartovali.</string>
+ <string lang="cs" key="HIDVOL_PROT_WARN_AFTER_MOUNT">Skrytý svazek je nyní chráněn proti poškození, dokud nebude odpojen vnější svazek.\n\nUPOZORNĚNÍ: Bude-li zaznamenána snaha zapsat data do skrytého svazku, VeraCrypt začne chránit proti zápisu celý svazek (jak vnější tak skrytou část) dokud nebude odpojen. To může způsobit poškození souborového systému vnějšího svazku, což může (pokud se tak bude dít opakovaně) nepříznivě ovlivnit hodnověrnost popření skrytého svazku. Proto byste měli zajistit, aby do skryté části svazku nebylo zapisováno. Jakákoliv data uložená do skrytého svazku nebudou uložena a ztratí se. Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis nebyl úspěšný" nebo "Parametr je nesprávný").</string>
+ <string lang="cs" key="HIDVOL_PROT_WARN_AFTER_MOUNT_PLURAL">Každý skrytý svazek uvnitř nově připojených svazků je nyní chráněn proti poškození, dokud nebude odpojen.\n\nUPOZORNĚNÍ: Bude-li zaznamenána snaha uložit data do chráněného oblasti skrytého svazku jakéhokoliv z těchto svazků, VeraCrypt začne chránit proti zápisu celý svazek (jak vnější tak skrytou část) dokud nebude odpojen. To může způsobit poškození souborového systému vnějšího svazku, což může (pokud se tak bude dít opakovaně) nepříznivě ovlivnit hodnověrnost popření skrytého svazku. Proto byste měli zajistit, aby do skryté části svazku nebylo zapisováno. Jakákoliv data uložená do skrytého svazku nebudou uložena a ztratí se. Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis nebyl úspěšný" nebo "Parametr je nesprávný").</string>
+ <string lang="cs" key="DAMAGE_TO_HIDDEN_VOLUME_PREVENTED">UPOZORNĚNÍ: Byl zaznamenán pokus o zapsání dat do skryté oblasti svazku připojeného jako %c:. VeraCrypt zabránil zápisu těchto dat, aby skrytý svazek chránil. To mohlo způsobit poškození souborového systému vnějšího svazku a Windows to mohou hlásit jako chybu zápisu ("Zpožděný zápis nebyl úspěšný" nebo "Parametr je nesprávný"). Celý svazek (jak vnější tak skrytá část) bude chráněn proti zápisu, dokud nebude odpojen. Pokud to není první případ, kdy VeraCrypt chránil skrytou část svazku před zápisem, hodnověrnost popření skrytého svazku může být nepříznivě ovlivněna (kvůli možné neobvyklé korelované inkonzistenci uvnitř vnějšího svazku souborového systému). Proto byste měli zvážit vytvoření nového svazku VeraCrypt (s vypnutou funkcí Rychlého formátování) a přesunout soubory z tohoto svazku do nového; tento svazek by měl být bezpečně vymazán (jak vnější tak skrytá část). Důrazně doporučujeme, abyste nyní operační systém restartovali.</string>
<string lang="cs" key="CANNOT_SATISFY_OVER_4G_FILE_SIZE_REQ">Naznačili jste, že na svazek hodláte ukládat soubory větší než 4 GB. V tom případě musí být svazek naformátován systémem souborů NTFS, což bohužel nebude možné.</string>
<string lang="cs" key="CANNOT_CREATE_NON_HIDDEN_NTFS_VOLUMES_UNDER_HIDDEN_OS">Mějte prosím na paměti, že pokud běží skrytý operační systém, ne-skryté svazky VeraCrypt nemohou být naformátovány jako NTFS. Důvodem je, že by svazek musel být dočasně připojen bez ochrany proti zápisu, aby ho mohl operační systém naformátovat jako NTFS (přičemž formátování jako FAT je prováděno VeraCryptem, nikoliv operačním systémem a bez toho, aby musel být svazek připojen). Pro více technických informací, viz níže. Ne-skrytý NTFS svazek můžete vytvořit z klamného operačního systému.</string>
- <string lang="cs" key="HIDDEN_VOL_CREATION_UNDER_HIDDEN_OS_HOWTO">Z bezpečnostních důvodů, pokud je spuštěn skrytý operační systém, skryté svazky mohou být vytvořeny pouze 'přímým' módem (protože vnější svazky musí být vždy připojeny pouze pro čtení). Abyste vytvořili skrytý svazek bezpečně, postupujte dle těchto kroků:\n\n1) Spusťte klamný systém.\n\n2) Vytvořte běžný svazek VeraCrypt a do tohoto svazku nakopírujte nějaká citlivě vypadající data, která ve skutečnosti NECHCETE skrýt (svazek se stane vnějším svazkem).\n\n3) Spusťte skrytý systém a spusťte Průvodce vytvořením svazku VeraCrypt. Pokud jde o svazek umístěny v souboru, přesuňte ho do systémového oddílu nebo do jiného skrytého svazku (jinak bude nově vytvořený svazek připojen pouze pro čtení a nemohl by být zformátován). Postupujte podle instrukcí v průvodci až k výběru 'přímého' módu pro vytvoření skrytého svazku.\n\n4) V průvodci vyberte svazek, který jste vytvořili v kroku 2, a pak postupujte dle instrukcí a vytvořte v něm skrytý svazek.</string>
+ <string lang="cs" key="HIDDEN_VOL_CREATION_UNDER_HIDDEN_OS_HOWTO">Z bezpečnostních důvodů, pokud je spuštěn skrytý operační systém, skryté svazky mohou být vytvořeny pouze 'přímým' režimem (protože vnější svazky musí být vždy připojeny pouze pro čtení). Abyste vytvořili skrytý svazek bezpečně, postupujte dle těchto kroků:\n\n1) Spusťte klamný systém.\n\n2) Vytvořte běžný svazek VeraCrypt a do tohoto svazku nakopírujte nějaká citlivě vypadající data, která ve skutečnosti NECHCETE skrýt (svazek se stane vnějším svazkem).\n\n3) Spusťte skrytý systém a spusťte Průvodce vytvořením svazku VeraCrypt. Pokud jde o svazek umístěny v souboru, přesuňte ho do systémového oddílu nebo do jiného skrytého svazku (jinak bude nově vytvořený svazek připojen pouze pro čtení a nemohl by být zformátován). Postupujte podle instrukcí v průvodci až k výběru 'přímého' režimu pro vytvoření skrytého svazku.\n\n4) V průvodci vyberte svazek, který jste vytvořili v kroku 2, a pak postupujte dle instrukcí a vytvořte v něm skrytý svazek.</string>
<string lang="cs" key="HIDDEN_OS_WRITE_PROTECTION_BRIEF_INFO">Z bezpečnostních důvodů, pokud je skrytý operační systém spuštěn, lokální nezašifrované systémy souborů a neskryté svazky VeraCrypt jsou připojeny pouze pro čtení (do těchto systémů souborů nebo svazků VeraCrypt nemůžete zapisovat).\n\nData můžete zapisovat do jakéhokoliv systému souborů, který je umístěn uvnitř skrytého svazku VeraCrypt (za předpokladu, že skrytý svazek není umístěn v souborovém svazku, který je umístěn na nezašifrovaném systému souborů nebo na jiném systému souborů, který je pouze pro čtení).</string>
- <string lang="cs" key="HIDDEN_OS_WRITE_PROTECTION_EXPLANATION">Jsou 3 hlavní důvody, proč byla takováto protiopatření implementována:\n\n- Umožňuje vytvoření bezpečné platformy pro připojení skrytých svazků VeraCrypt. Oficiálně doporučujeme připojit skryté svazky pouze pokud běží skrytý operační systém. (Pro více informací, viz podsekce 'Bezpečnostní požadavky a prevence ohledně skrytých svazků' v dokumentaci.)\n\n- V některých případech je možné zjistit, že v určitém čase nebyl konkrétní systém souborů připojen k (nebo že příslušný soubor na systému souborů nebyl uložen nebo k němu nebyl přístup přímo) příslušné instanci operačního systému (např. analyzováním a porovnáním žurnálů systému souborů, časových razítek souborů, aplikačních logů, chybových logů, apod.). To vše může naznačit, že je na počítači nainstalován skrytý operační systém. Protiopatření přecházejí těmto problémům.\n\n- Zabraňuje poškození dat a umožňuje bezpečnou hibernaci. Když Windows přejdou z hibernace, předpokládají, že všechny připojené systémy souborů jsou ve stejném stavu, jako když systém přešel do hibernace. VeraCrypt toto zabezpečuje tím, že chrání proti zápisu jakýkoliv systém souborů ať už v klamném nebo skrytém systému. Bez této ochrany by mohlo u připojeného systému dojít k poškození souborů, pokud by byl druhý systém hibernován.</string>
+ <string lang="cs" key="HIDDEN_OS_WRITE_PROTECTION_EXPLANATION">Jsou tři hlavní důvody, proč byla takováto protiopatření implementována:\n\n- Umožňuje vytvoření bezpečné platformy pro připojení skrytých svazků VeraCrypt. Oficiálně doporučujeme připojit skryté svazky pouze pokud běží skrytý operační systém. (Pro více informací, viz podsekce 'Bezpečnostní požadavky a prevence ohledně skrytých svazků' v dokumentaci.)\n\n- V některých případech je možné zjistit, že v určitém čase nebyl konkrétní systém souborů připojen k (nebo že příslušný soubor na systému souborů nebyl uložen nebo k němu nebyl přístup přímo) příslušné instanci operačního systému (např. analyzováním a porovnáním žurnálů systému souborů, časových razítek souborů, aplikačních logů, chybových logů, apod.). To vše může naznačit, že je na počítači nainstalován skrytý operační systém. Protiopatření přecházejí těmto problémům.\n\n- Zabraňuje poškození dat a umožňuje bezpečnou hibernaci. Když Windows přejdou z hibernace, předpokládají, že všechny připojené systémy souborů jsou ve stejném stavu, jako když systém přešel do hibernace. VeraCrypt toto zabezpečuje tím, že chrání proti zápisu jakýkoliv systém souborů ať už v klamném nebo skrytém systému. Bez této ochrany by mohlo u připojeného systému dojít k poškození souborů, pokud by byl druhý systém hibernován.</string>
<string lang="cs" key="DECOY_TO_HIDDEN_OS_DATA_TRANSFER_HOWTO">Poznámka: Pokud potřebujete bezpečně přesunout soubory z klamného systému do skrytého systému, dbejte následujících kroků: 1) Spusťte klamný systém. 2) Uložte soubory na nezašifrovaný svazek nebo na vnější/normální svazek VeraCrypt. 3) Spusťte skrytý systém. 4) Uložili jste-li soubory na svazek VeraCrypt, připojte ho (bude automaticky připojen jen pro čtení). 5) Zkopírujte soubory do skrytého systémového oddílu nebo na jiný svazek.</string>
<string lang="cs" key="CONFIRM_RESTART">Váš počítač musí být restartován.\n\nChcete nyní provést restart?</string>
<string lang="cs" key="ERR_GETTING_SYSTEM_ENCRYPTION_STATUS">Nastala chyba při získávání informací o stavu zašifrovaného systému.</string>
- <string lang="en" key="ERR_PASSWORD_MISSING">No password specified in the command line. The volume can't be created.</string>
- <string lang="en" key="ERR_SIZE_MISSING">No volume size specified in the command line. The volume can't be created.</string>
- <string lang="en" key="ERR_NTFS_INVALID_VOLUME_SIZE">The volume file size specified in the command line is incompatible with selected NTFS filesystem.</string>
- <string lang="en" key="ERR_FAT_INVALID_VOLUME_SIZE">The volume file size specified in the command line is incompatible with selected FAT32 filesystem.</string>
- <string lang="en" key="ERR_DYNAMIC_NOT_SUPPORTED">The filesystem on the target drive doesn't support creating sparse files which is required for dynamic volumes.</string>
- <string lang="en" key="ERR_DEVICE_CLI_CREATE_NOT_SUPPORTED">Only container files can be created through the command line.</string>
- <string lang="en" key="ERR_CONTAINER_SIZE_TOO_BIG">The container file size specified in the command line is greater than the available disk free space. Volume can't be created.</string>
- <string lang="en" key="ERR_VOLUME_SIZE_TOO_SMALL">The volume size specified in the command line is too small. The volume can't be created.</string>
- <string lang="en" key="ERR_VOLUME_SIZE_TOO_BIG">The volume size specified in the command line is too big. The volume can't be created.</string>
+ <string lang="cs" key="ERR_PASSWORD_MISSING">V příkazovém řádku nebylo specifikováno heslo. Nemůže být vytvořen žádný svazek.</string>
+ <string lang="cs" key="ERR_SIZE_MISSING">V příkazovém řádku nebyl specifikován svazek. Nemůže být vytvořen žádný svazek.</string>
+ <string lang="cs" key="ERR_NTFS_INVALID_VOLUME_SIZE">Specifikovaný svazek v příkazovém řádku je nokompatibilní s vybraným souborovým systémem NTFS.</string>
+ <string lang="cs" key="ERR_FAT_INVALID_VOLUME_SIZE">Specifikovaný svazek v příkazovém řádku je nokompatibilní s vybraným souborovým systémem FAT32.</string>
+ <string lang="cs" key="ERR_DYNAMIC_NOT_SUPPORTED">Souborový systém na cílovém zařízení nepodporuje vytvoření řídkých souborů, které jsou potřebné pro dynamický svazek.</string>
+ <string lang="cs" key="ERR_DEVICE_CLI_CREATE_NOT_SUPPORTED">Přes příkazový řádek mohou být vytvořeny jen kontejnerové soubory.</string>
+ <string lang="cs" key="ERR_CONTAINER_SIZE_TOO_BIG">Velikost kontejnerového souboru specifikovaného v příkazovém řádku je větší než velikost volného místa na disku. Svazek nemůže být vytvořen.</string>
+ <string lang="cs" key="ERR_VOLUME_SIZE_TOO_SMALL">Velikost svazku specifikovaného v příkazovém řádku je malá. Svazek nemůže být vytvořen.</string>
+ <string lang="cs" key="ERR_VOLUME_SIZE_TOO_BIG">Velikost svazku specifikovaného v příkazovém řádku je moc velká. Svazek nemůže být vytvořen.</string>
<string lang="cs" key="INIT_SYS_ENC">Nelze inicializovat aplikační komponenty pro systémové šifrování.</string>
- <string lang="cs" key="INIT_RAND">Selhala inicializace generátoru náhodných čísel!</string>
- <string lang="en" key="CAPI_RAND">Windows Crypto API failed!\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n%hs, Last Error = 0x%.8X)</string>
- <string lang="cs" key="INIT_REGISTER">Aplikace nemohla být inicializována. Selhala registrace Dialogové třídy.</string>
+ <string lang="cs" key="INIT_RAND">Inicializace generátoru náhodných čísel nebyla úspěšná.</string>
+ <string lang="cs" key="CAPI_RAND">Windows Crypto API selhalo.\n\n\n(Pokud budete ohlašovat chybu ve spojení s touto funkcí, zahrňte i následující technické informace:\n%hs, Poslední chyba = 0x%.8X)</string>
+ <string lang="cs" key="INIT_REGISTER">Aplikace nemohla být inicializována. Registrace Dialogové třídy nebyla úspěšná.</string>
<string lang="cs" key="INIT_RICHEDIT">Chyba: Systémová knihovna Rich Edit nemohla být načtena.</string>
<string lang="cs" key="INTRO_TITLE">Průvodce vytvořením svazku VeraCrypt</string>
- <string lang="cs" key="MAX_HIDVOL_SIZE_BYTES">Maximální možná velikost skrytého svazku pro tento svazek je %.2f bytů.</string>
+ <string lang="cs" key="MAX_HIDVOL_SIZE_BYTES">Maximální možná velikost skrytého svazku pro tento svazek je %.2f bajtů.</string>
<string lang="cs" key="MAX_HIDVOL_SIZE_KB">Maximální možná velikost skrytého svazku pro tento svazek je %.2f KB.</string>
<string lang="cs" key="MAX_HIDVOL_SIZE_MB">Maximální možná velikost skrytého svazku pro tento svazek je %.2f MB.</string>
<string lang="cs" key="MAX_HIDVOL_SIZE_GB">Maximální možná velikost skrytého svazku pro tento svazek je %.2f GB.</string>
@@ -573,7 +573,7 @@
<string lang="cs" key="MOUNT_BUTTON">&amp;Připojit</string>
<string lang="cs" key="NEW_VERSION_REQUIRED">Pro připojení tohoto oddílu je potřeba novější verze programu VeraCrypt.</string>
<string lang="cs" key="VOL_CREATION_WIZARD_NOT_FOUND">Chyba: Průvodce vytvořením svazku nebyl nalezen.\n\nUjistěte se prosím, že soubor 'VeraCrypt Format.exe' je ve složce, ze které byl 'VeraCrypt.exe' spuštěn. Pokud není, přeinstalujte prosím VeraCrypt nebo najděte 'VeraCrypt Format.exe' na vašem disku a spusťte jej.</string>
- <string lang="en" key="VOL_EXPANDER_NOT_FOUND">Error: Volume Expander not found.\n\nPlease make sure that the file 'VeraCryptExpander.exe' is in the folder from which 'VeraCrypt.exe' was launched. If it is not, please reinstall VeraCrypt, or locate 'VeraCryptExpander.exe' on your disk and run it.</string>
+ <string lang="cs" key="VOL_EXPANDER_NOT_FOUND">Chyba: rozšíření svazku nebylo nalezeno.\n\nProsím, zkontrolujte, že soubor 'VeraCryptExpander.exe' je ve složce, ze které se 'VeraCrypt.exe' spouští. Pokud není, přeinstalujte VeraCrypt, nebo najděte 'VeraCryptExpander.exe' na disku a spušťte ho.</string>
<string lang="cs" key="NEXT">&amp;Další &gt;</string>
<string lang="cs" key="FINALIZE">&amp;Dokončit</string>
<string lang="cs" key="INSTALL">&amp;Instalovat</string>
@@ -581,14 +581,14 @@
<string lang="cs" key="NODRIVER">Nelze připojit k ovladači zařízení VeraCrypt. VeraCrypt nemůže pracovat, pokud ovladač zařízení neběží.\n\nKvůli architektuře Windows bude pravděpodobně nutné se odhlásit nebo restartovat systém, aby mohl být ovladač zařízení načten.</string>
<string lang="cs" key="NOFONT">Nastala chyba při nahrávání/připravování fontů.</string>
<string lang="cs" key="NOT_FOUND">Písmeno disku nebylo nalezeno nebo nebylo specifikováno.</string>
- <string lang="en" key="ERR_CANNOT_ASSIGN_DRIVE_LETTER_NONSYS_DEC">Error: Cannot assign drive letter.\n\nUntil a drive letter is assigned to the decrypted volume, you will not be able to access data stored on the volume.\n\nRetry?</string>
+ <string lang="cs" key="ERR_CANNOT_ASSIGN_DRIVE_LETTER_NONSYS_DEC">Chyba: nebylo možné přiřadit písmeno jednotky.\n\nDokud nebude písmeno přiřazeno, nebudete mít přístup k datům na zařížení.\n\nZkusit znovu?</string>
<string lang="cs" key="DRIVE_LETTER_UNAVAILABLE">Písmeno jednotky není k dispozici.</string>
- <string lang="cs" key="NO_FILE_SELECTED">Nebyl vybrán žádný soubor!</string>
+ <string lang="cs" key="NO_FILE_SELECTED">Nebyl vybrán žádný soubor.</string>
<string lang="cs" key="NO_FREE_DRIVES">Žádné písmeno disku není k dispozici.</string>
- <string lang="cs" key="NO_FREE_DRIVE_FOR_OUTER_VOL">Není k dispozici žádné volné písmeno disku pro vnější svazek! Vytvoření svazku nelze dokončit.</string>
+ <string lang="cs" key="NO_FREE_DRIVE_FOR_OUTER_VOL">Není k dispozici žádné volné písmeno disku pro vnější svazek. Vytvoření svazku nelze dokončit.</string>
<string lang="cs" key="NO_OS_VER">Verze vašeho operačního systému nebyla rozpoznána nebo používáte nepodporovaný operační systém.</string>
- <string lang="cs" key="NO_PATH_SELECTED">Nebyla vybrána cesta!</string>
- <string lang="cs" key="NO_SPACE_FOR_HIDDEN_VOL">Pro skrytý svazek není dostatek volného místa! Vytvoření svazku nelze dokončit.</string>
+ <string lang="cs" key="NO_PATH_SELECTED">Nebyla vybrána cesta.</string>
+ <string lang="cs" key="NO_SPACE_FOR_HIDDEN_VOL">Pro skrytý svazek není dostatek volného místa. Vytvoření svazku nelze dokončit.</string>
<string lang="cs" key="HIDDEN_VOLUME_TOO_SMALL_FOR_OS_CLONE">Chyba: Soubory, které jste nakopírovali do vnějšího svazku, zabírají příliš moc místa. Tím pádem není na vnějším svazku ani dost místa pro skrytý svazek.\n\nSkrytý svazek musí být stejně velký jako systémový oddíl (oddíl, kde je nainstalován momentálně běžící operační systém). Důvodem je, že skrytý operační systém musí být vytvořen zkopírováním obsahu systémového oddílu do skrytého svazku.\n\n\nProces vytváření skrytého operačního systému nemůže pokračovat.</string>
<string lang="cs" key="OPENFILES_DRIVER">Ovladač nemůže odpojit svazek. Některé soubory umístěné na svazku jsou pravděpodobně ještě otevřené.</string>
<string lang="cs" key="OPENFILES_LOCK">Svazek nemohl být uzamknut. Na svazku jsou stále otevřené soubory. Proto nemůže být odpojen.</string>
@@ -597,31 +597,31 @@
<string lang="cs" key="OPEN_TITLE">Zadejte cestu a jméno souboru</string>
<string lang="cs" key="SELECT_PKCS11_MODULE">Vybrat knihovnu PKCS #11</string>
<string lang="cs" key="OUTOFMEMORY">Nedostatek paměti</string>
- <string lang="cs" key="FORMAT_DEVICE_FOR_ADVANCED_ONLY">DŮLEŽITÉ: Důrazně doporučujeme, aby nezkušení uživatelé vytvořili souborový svazek VeraCrypt na vybraném zařízení/oddílu, místo zašifrování celého zařízení/oddílu.\n\nPokud vytvoříte souborový svazek VeraCrypt (oproti zašifrování zařízení nebo oddílu), neriskujete například ztrátu velkého množství souborů. Souborový svazek VeraCrypt (ačkoliv obsahuje virtuální zašifrovaný disk) se chová je ve skutečnosti jako obyčejný soubor. Pro více informací viz kapitola Návod pro začátečníky v uživatelské příručce VeraCryptu.\n\nJste si jisti, že chcete zašifrovat celé zařízení/oddíl?</string>
- <string lang="cs" key="OVERWRITEPROMPT">VAROVÁNÍ: Soubor '%s' již existuje!\n\nDŮLEŽITÉ: VERACRYPT TENTO SOUBOR NEZAŠIFRUJE, ALE SMAŽE HO. Jste si jisti, že chcete tento soubor smazat a nahradit ho novým souborovým svazkem VeraCrypt?</string>
- <string lang="cs" key="OVERWRITEPROMPT_DEVICE">VAROVÁNÍ: VŠECHNY SOUBORY, KTERÉ JSOU MOMENTÁLNĚ ULOŽENY NA VÁMI VYBRANÉM %s '%s'%s BUDOU VYMAZÁNY A ZTRACENY (NEBUDOU ZAŠIFROVÁNY)!\n\nJste si jisti, že chcete pokračovat s formátováním?</string>
- <string lang="cs" key="NONSYS_INPLACE_ENC_CONFIRM">VAROVÁNÍ: Nebudete moci na svazek přistoupit ani přistupovat k souborům na něm do té doby, než bude plně zašifrován.\n\nJste si jisti, že chcete začít zašifrovávat vybraný %s '%s'%s?</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_CONFIRM">WARNING: You will not be able to mount the volume or access any files stored on it until it has been fully decrypted.\n\nAre you sure you want to start decrypting the selected %s '%s'%s?</string>
- <string lang="cs" key="NONSYS_INPLACE_ENC_CONFIRM_BACKUP">VAROVÁNÍ: Pokud dojde při šifrování dat za běhu k náhlému výpadku proudu, nebo pokud systém spadne kvůli softwarové chybě nebo hardwarovému selhání, část dat bude poškozena nebo ztracena. Než začnete zašifrovávat, ujistěte se, že máte záložní kopie souborů, které chcete zašifrovat.\n\nMáte takovou zálohu?</string>
- <string lang="cs" key="OVERWRITEPROMPT_DEVICE_HIDDEN_OS_PARTITION">VAROVÁNÍ: JAKÉKOLIV SOUBORY ULOŽENÉ NA ODDÍLU '%s'%s (NAPŘ. NA PRVNÍM ODDÍLU ZA SYSTÉMOVÝM ODDÍLEM) BUDOU VYMAZÁNA A ZTRACENA (NEBUDOU ZAŠIFROVÁNA)!\n\nJste si jisti, že chcete pokračovat ve formátování?</string>
- <string lang="cs" key="OVERWRITEPROMPT_DEVICE_SECOND_WARNING_LOTS_OF_DATA">VAROVÁNÍ: VYBRANÝ ODDÍL OBSAHUJE VELKÉ MNOŽSTVÍ DAT! Všechny soubory uložené na tomto oddílu budou smazány a ztraceny (NEBUDOU zašifrovány)!</string>
+ <string lang="cs" key="FORMAT_DEVICE_FOR_ADVANCED_ONLY">DŮLEŽITÉ: Důrazně doporučujeme, aby nezkušení uživatelé vytvořili souborový svazek VeraCrypt na vybraném zařízení/oddílu, místo zašifrování celého zařízení/oddílu.\n\nPokud vytvoříte souborový svazek VeraCrypt (oproti zašifrování zařízení nebo oddílu), neriskujete například ztrátu velkého množství souborů. Souborový svazek VeraCrypt (ačkoliv obsahuje virtuální zašifrovaný disk) se chová je ve skutečnosti jako obyčejný soubor. Pro více informací viz kapitola Návod pro začátečníky v uživatelské příručce VeraCryptu.\n\nOpravdu chcete zašifrovat celé zařízení/oddíl?</string>
+ <string lang="cs" key="OVERWRITEPROMPT">UPOZORNĚNÍ: Soubor '%s' již existuje.\n\nDŮLEŽITÉ: VERACRYPT TENTO SOUBOR NEZAŠIFRUJE, ALE SMAŽE HO. Opravdu chcete tento soubor smazat a nahradit ho novým souborovým svazkem VeraCrypt?</string>
+ <string lang="cs" key="OVERWRITEPROMPT_DEVICE">UPOZORNĚNÍ: VŠECHNY SOUBORY, KTERÉ JSOU MOMENTÁLNĚ ULOŽENY NA VÁMI VYBRANÉM %s '%s'%s BUDOU VYMAZÁNY A ZTRACENY (NEBUDOU ZAŠIFROVÁNY).\n\nOpravdu chcete pokračovat s formátováním?</string>
+ <string lang="cs" key="NONSYS_INPLACE_ENC_CONFIRM">UPOZORNĚNÍ: Nebudete moci na svazek přistoupit ani přistupovat k souborům na něm do té doby, než bude plně zašifrován.\n\nOpravdu chcete začít zašifrovávat vybraný %s '%s'%s?</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_CONFIRM">UPOZORNĚNÍ: Nebudete moci připojit svazek nebo přistupovat k souborům na něm uloženým, dokud nebude plně dešifrován.\n\nOpravdu chcete spustit dešifrování vybraného %s '%s'%s?</string>
+ <string lang="cs" key="NONSYS_INPLACE_ENC_CONFIRM_BACKUP">UPOZORNĚNÍ: Pokud dojde při šifrování dat za běhu k náhlému výpadku proudu, nebo pokud systém spadne kvůli softwarové chybě nebo hardwarovému selhání, část dat bude poškozena nebo ztracena. Než začnete zašifrovávat, ujistěte se, že máte záložní kopie souborů, které chcete zašifrovat.\n\nMáte takovou zálohu?</string>
+ <string lang="cs" key="OVERWRITEPROMPT_DEVICE_HIDDEN_OS_PARTITION">UPOZORNĚNÍ: JAKÉKOLIV SOUBORY ULOŽENÉ NA ODDÍLU '%s'%s (NAPŘ. NA PRVNÍM ODDÍLU ZA SYSTÉMOVÝM ODDÍLEM) BUDOU VYMAZÁNA A ZTRACENA (NEBUDOU ZAŠIFROVÁNA).\n\nOpravdu chcete pokračovat ve formátování?</string>
+ <string lang="cs" key="OVERWRITEPROMPT_DEVICE_SECOND_WARNING_LOTS_OF_DATA">UPOZORNĚNÍ: VYBRANÝ ODDÍL OBSAHUJE VELKÉ MNOŽSTVÍ DAT. Všechny soubory uložené na tomto oddílu budou smazány a ztraceny (NEBUDOU zašifrovány).</string>
<string lang="cs" key="ERASE_FILES_BY_CREATING_VOLUME">Smaž všechny soubory uložené na oddílu tím, že se uvnitř vytvoří svazek VeraCrypt</string>
<string lang="cs" key="PASSWORD">Heslo</string>
- <string lang="en" key="PIM">PIM</string>
+ <string lang="cs" key="PIM">PIM</string>
<string lang="cs" key="IDD_PCDM_CHANGE_PKCS5_PRF">Zadejte hlavičku klíče derivačního algoritmu</string>
<string lang="cs" key="IDD_PCDM_ADD_REMOVE_VOL_KEYFILES">Přidat/Odebrat souborové klíče do/ze svazku</string>
<string lang="cs" key="IDD_PCDM_REMOVE_ALL_KEYFILES_FROM_VOL">Odstranit všechny souborové klíče ze svazku</string>
<string lang="cs" key="PASSWORD_CHANGED">Heslo a souborový klíč/e byly úspěšně změněny.\n\nDŮLEŽITÉ: Ujistěte se, prosím, že jste si přečetli sekci 'Změna hesel a souborových klíčů' v kapitole 'Bezpečnostní požadavky a opatření' v uživatelské příručce VeraCryptu.</string>
- <string lang="en" key="FAVORITE_PIM_CHANGED">This volume is registered as a System Favorite and its PIM was changed.\nDo you want VeraCrypt to automatically update the System Favorite configuration (administrator privileges required)?\n\nPlease note that if you answer no, you'll have to update the System Favorite manually.</string>
+ <string lang="cs" key="FAVORITE_PIM_CHANGED">Tento svazek je registrován jako systémově oblíbený a jeho PIM bylo změněno.\nPřejete si, aby VeraCrypt automaticky aktualizoval jeho konfiguraci (vyžadována oprávnění správce systému)?\n\nProsím, neopomeňte, že pokud odpovíte 'Ne', budete muset je manuálně aktualizovat.</string>
<string lang="cs" key="SYS_PASSWORD_CHANGED_ASK_RESCUE_DISK">DŮLEŽITÉ: Pokud jste nezničili váš Záchranný disk VeraCrypt, váš systémový oddíl/disk může být stále dešifrován použitím starého hesla (nabootováním Záchranného disku VeraCrypt a zadáním starého hesla). Měli byste vytvořit nový Záchranný disk VeraCrypt a pak zničit starý.\n\nChcete vytvořit nový Záchranný disk VeraCrypt?</string>
<string lang="cs" key="SYS_HKD_ALGO_CHANGED_ASK_RESCUE_DISK">Záchranný disk VeraCrypt stále používá předchozí algoritmus. Považujete-li předchozí algoritmus za nedostatečně bezpečný, měli byste vytvořit nový záchranný disk VeraCrypt a pak starý zničit.\n\nChcete vytvořit nový Záchranný disk VeraCrypt?</string>
- <string lang="cs" key="KEYFILES_NOTE">Jakýkoliv typ souboru (například .mp3, .jpg, .zip, .avi) může být použit jako souborový klíč VeraCryptu. Vězte, že VeraCrypt nikdy nemění obsah souborového klíče. Můžete vybrat více než jen jeden souborový klíč (na pořadí nezáleží). Pokud zadáte adresář, všechny neskryté soubory nalezené uvnitř, budou použity jako souborové klíče. Klikněte na 'Přidat soubory tokenu' a vyberte souborové klíče uložené na bezpečnostních tokenech nebo smart kartách (nebo k importu souborových klíčů na bezpečnostní tokeny nebo na smart karty).</string>
+ <string lang="cs" key="KEYFILES_NOTE">Jakýkoliv typ souboru (například *.mp3, *.jpg, *.zip, *.avi) může být použit jako souborový klíč VeraCryptu. Vězte, že VeraCrypt nikdy nemění obsah souborového klíče. Můžete vybrat více než jen jeden souborový klíč (na pořadí nezáleží). Pokud zadáte adresář, všechny neskryté soubory nalezené uvnitř, budou použity jako souborové klíče. Klikněte na 'Přidat soubory tokenu' a vyberte souborové klíče uložené na bezpečnostních tokenech nebo smart kartách (nebo k importu souborových klíčů na bezpečnostní tokeny nebo na smart karty).</string>
<string lang="cs" key="KEYFILE_CHANGED">Souborový klíč(e) byl úspěšně přidán/odstraněn.</string>
<string lang="cs" key="KEYFILE_EXPORTED">Souborový klíč exportován.</string>
<string lang="cs" key="PKCS5_PRF_CHANGED">Klíč hlavičky derivačního algoritmu byl úspěšně zadán.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_RESUME_PASSWORD_PAGE_HELP">Zadejte prosím heslo a/nebo souborový klíč/e k nesystémovému svazku, u kterého chcete pokračovat v procesu šifrování za běhu.\n\n\nPoznámka: Až kliknete na Další, VeraCrypt se pokusí najít všechny nesystémové svazky, u kterých byl přerušen proces šifrování a u kterých může být VeraCrypt hlavička dešifrována použitím uvedeného hesla a/nebo souborového klíče/ů. Pokud bude nalezeno více než jeden svazek, budete muset v příštím kroku vybrat jeden z nich.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_RESUME_VOL_SELECT_HELP">Vyberte, prosím, jeden svazek ze seznamu. Seznam obsahuje všechny přístupné ne-systémové svazky, kde byl přerušen proces šifrování a jejichž hlavičky mohou být dešifrovány s použitím použitého hesla a souborového klíče.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_PASSWORD_PAGE_HELP">Please enter the password and/or keyfile(s) for the non-system VeraCrypt volume that you want to decrypt.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_PASSWORD_PAGE_HELP">Prosím, zadejte heslo a/nebo souborový(é) klíč(e) pro nesystémový svazek VeraCrypt, který chcete dešifrovat.</string>
<string lang="cs" key="PASSWORD_HELP">Je velmi důležité, abyste zadali dobré heslo. Měli byste se vyvarovat takového hesla, které obsahuje jen jedno slovo nebo může být nalezeno ve slovníku (nebo kombinace 2, 3 nebo 4 takovýchto slov). Nemělo by obsahovat žádná jména nebo data narození. Nemělo by být lehce uhodnutelné. Dobré heslo se skládá z kombinace různých velkých a malých písmen, čísel a speciálních znaků jako např. @ ^ = $ * + atd. Doporučujeme zvolit heslo skládající se z 20 znaků a více (čím delší, tím lepší). Maximální možná délka je 64 znaků.</string>
<string lang="cs" key="PASSWORD_HIDDENVOL_HELP">Zadejte heslo pro skrytý svazek. </string>
<string lang="cs" key="PASSWORD_HIDDEN_OS_HELP">Zadejte, prosím, heslo pro skrytý operační systém (např. pro skrytý svazek). </string>
@@ -632,44 +632,44 @@
<string lang="cs" key="PASSWORD_HIDVOL_HOST_TITLE">Heslo vnějšího svazku</string>
<string lang="cs" key="PASSWORD_HIDVOL_TITLE">Heslo skrytého svazku</string>
<string lang="cs" key="PASSWORD_HIDDEN_OS_TITLE">Heslo pro skrytý operační systém</string>
- <string lang="cs" key="PASSWORD_LENGTH_WARNING">UPOZORNĚNÍ: Krátká hesla se dají jednoduše prolomit použitím metody hrubé síly!\n\nDoporučujeme vybrat heslo skládající se z více než 20 znaků.\n\nJste si jisti, že chcete použít kratší heslo?</string>
+ <string lang="cs" key="PASSWORD_LENGTH_WARNING">UPOZORNĚNÍ: Krátká hesla se dají jednoduše prolomit použitím metody hrubé síly.\n\nDoporučujeme vybrat heslo skládající se z více než 20 znaků.\n\nOpravdu chcete použít kratší heslo?</string>
<string lang="cs" key="PASSWORD_TITLE">Heslo svazku</string>
<string lang="cs" key="PASSWORD_WRONG">Nesprávné heslo nebo se nejedná o svazek VeraCrypt.</string>
- <string lang="cs" key="PASSWORD_OR_KEYFILE_WRONG">Špatný souborový klíč(y) a/nebo heslo nebo se nejedná o svazek VeraCrypt.</string>
- <string lang="cs" key="PASSWORD_OR_MODE_WRONG">Špatný mód připojení, nesprávné heslo nebo se nejedná o svazek VeraCrypt.</string>
- <string lang="cs" key="PASSWORD_OR_KEYFILE_OR_MODE_WRONG">Špatný mód připojení, nesprávný souborový klíč/e a/nebo špatné heslo nebo se nejedná o svazek VeraCrypt.</string>
+ <string lang="cs" key="PASSWORD_OR_KEYFILE_WRONG">Špatný souborový klíč(e) a/nebo heslo, či se nejedná o svazek VeraCrypt.</string>
+ <string lang="cs" key="PASSWORD_OR_MODE_WRONG">Špatný režim připojení, nesprávné heslo nebo se nejedná o svazek VeraCrypt.</string>
+ <string lang="cs" key="PASSWORD_OR_KEYFILE_OR_MODE_WRONG">Špatný režim připojení, nesprávný souborový klíč/e a/nebo špatné heslo nebo se nejedná o svazek VeraCrypt.</string>
<string lang="cs" key="PASSWORD_WRONG_AUTOMOUNT">Špatné heslo nebo nebyl nalezen žádný svazek VeraCrypt.</string>
<string lang="cs" key="PASSWORD_OR_KEYFILE_WRONG_AUTOMOUNT">Špatný souborový klíč/heslo nebo nebyl nalezen žádný svazek VeraCrypt.</string>
<string lang="cs" key="PASSWORD_WRONG_CAPSLOCK_ON">\n\nUpozornění: Caps Lock je zapnutý. Tím můžete špatně zadat heslo.</string>
- <string lang="en" key="PIM_CHANGE_WARNING">Remember Number to Mount Volume</string>
- <string lang="en" key="PIM_HIDVOL_HOST_TITLE">Outer Volume PIM</string>
- <string lang="en" key="PIM_HIDVOL_TITLE">Hidden Volume PIM</string>
- <string lang="en" key="PIM_HIDDEN_OS_TITLE">PIM for Hidden Operating System</string>
- <string lang="en" key="PIM_HELP">PIM (Personal Iterations Multiplier) is a value that controls the number of iterations used by the header key derivation as follows:\n Iterations = 15000 + (PIM x 1000).\n\nWhen left empty or set to 0, VeraCrypt will use a default value (485) that ensures a high security.\n\nWhen the password is less than 20 characters, PIM can't be smaller than 485 in order to maintain a minimal security level.\nWhen the password is 20 characters or more, PIM can be set to any value.\n\nA PIM value larger than 485 will lead to slower mount. A small PIM value (less than 485) will lead to a quicker mount but it can reduce security if the password is not strong enough.</string>
- <string lang="en" key="PIM_SYSENC_HELP">PIM (Personal Iterations Multiplier) is a value that controls the number of iterations used by the header key derivation as follows:\n Iterations = PIM x 2048.\n\nWhen left empty or set to 0, VeraCrypt will use a default value that ensures a high security.\n\nWhen the password is less than 20 characters, PIM can't be smaller than 98 in order to maintain a minimal security level.\nWhen the password is 20 characters or more, PIM can be set to any value.\n\nA PIM value larger than 98 will lead to slower boot. A small PIM value (less than 98) will lead to a quicker boot but it can reduce security if the password is not strong enough.</string>
- <string lang="en" key="PIM_SYSENC_CHANGE_WARNING">Remember Number to Boot System</string>
- <string lang="en" key="PIM_LARGE_WARNING">You have chosen a PIM value that is larger than VeraCrypt default value.\nPlease note that this will lead to much slower mount/boot.</string>
- <string lang="en" key="PIM_SMALL_WARNING">You have chosen a Personal Iterations Multiplier (PIM) that is smaller than the default VeraCrypt value. Please note that if your password is not strong enough, this could lead to a weaker security.\n\nDo you confirm that you are using a strong password?</string>
- <string lang="en" key="PIM_SYSENC_TOO_BIG">Personal Iterations Multiplier (PIM) maximum value for system encryption is 65535.</string>
- <string lang="en" key="PIM_TITLE">Volume PIM</string>
- <string lang="cs" key="HIDDEN_FILES_PRESENT_IN_KEYFILE_PATH">\n\nVAROVÁNÍ: V cestě k souborovým klíčům byl nalezen skrytý soubor/y. Tyto skryté soubory nemohou být použity jako souborové klíče. Pokud je potřebujete použít jako souborové klíče, odstraňte jejich 'Skrytý' atribut (pravým tlačítkem myši na něj klikněte, vyberte 'Vlastnosti', odškrtněte 'Skrytý' a potvrďte OK). Poznámka: Skryté soubory jsou viditelné jen tehdy, pokud je daná volba zapnuta (Ovládací panely &gt; 'Možnosti složky' &gt; Zobrazit).</string>
+ <string lang="cs" key="PIM_CHANGE_WARNING">Zapamatovat číslo pro připojení svazku</string>
+ <string lang="cs" key="PIM_HIDVOL_HOST_TITLE">Vnější svazek PIM</string>
+ <string lang="cs" key="PIM_HIDVOL_TITLE">Skrytý svazek PIM</string>
+ <string lang="cs" key="PIM_HIDDEN_OS_TITLE">PIM pro skrytý operační systém</string>
+ <string lang="cs" key="PIM_HELP">PIM je hodnota, která reguluje počet iretací použitých v odvozenině hlavičky klíče, jako např.:\n Iterace = 15000 + (PIM x 1000).\n\nPokud zanecháte prázdné, nebo nastavíte 0, VeraCrypt použije výchozí hodnotu (485), která zaručuje vysokou bezpečnost.\n\nJe-li heslo kratší než 20 znaků, PIM nesmí být menší než 485, aby byla zachována alespoň minimální úroveň zapezpečení.\nMá-li heslo minimálně 20 znaků, PIM může obsahovat jakoukoliv hodnotu.\n\nHodnota PIM větší než 485 bude mít za následek pomalejší připojení. Malá hodnota PIM (menší než 485) povede k rychlejšímu připojení, ale bude omezeno zabezpečení, pokud není heslo dostatečně silné.</string>
+ <string lang="cs" key="PIM_SYSENC_HELP">PIM je hodnota, která reguluje počet iretací použitých odvozenímhlavičky klíče, jako např.:\n Iterace = PIM x 2048.\n\nPokud zanecháte prázdné, nebo nastavíte 0, VeraCrypt použije výchozí hodnotu, která zajistí vysoké zabezpečení.\n\nJe-li heslo kratší než 20 znaků, PIM nesmí být menší než 98 aby byla zachována alespoň minimální úroveň zapezpečení.\nMá-li heslo minimálně 20 znaků, PIM může obsahovat jakoukoliv hodnotu.\n\nHodnota PIM větší než 98 bude mít za následek pomalejší bootování. Malá hodnota PIM (menší než 98) povede k rychlejšímu připojení, ale bude omezeno zabezpečení, pokud není heslo dostatečně silné.</string>
+ <string lang="cs" key="PIM_SYSENC_CHANGE_WARNING">Zapamatovat si číslo pro bootování systému</string>
+ <string lang="cs" key="PIM_LARGE_WARNING">Byla vybrána hodnota PIM , která je větší než výchozí hodnota VeraCryptu.\nUvědomte si, že to povede k pomalejšímu připojení/bootování.</string>
+ <string lang="cs" key="PIM_SMALL_WARNING">Byla vybrána hodnota PIM , která je menší než výchozí hodnota VeraCryptu. Uvědomte si, že není-li vaše heslo dostatečně silné, povede to ke slabšímu zabezpečení.\n\nOpravdu si myslíte, že používáte silné heslo?</string>
+ <string lang="cs" key="PIM_SYSENC_TOO_BIG">Maximální hodnota (PIM) pro systémové zašifrování je 65535.</string>
+ <string lang="cs" key="PIM_TITLE">Svazek PIM</string>
+ <string lang="cs" key="HIDDEN_FILES_PRESENT_IN_KEYFILE_PATH">\n\nUPOZORNĚNÍ: V cestě k souborovým klíčům byl nalezen skrytý soubor/y. Tyto skryté soubory nemohou být použity jako souborové klíče. Pokud je potřebujete použít jako souborové klíče, odstraňte jejich 'Skrytý' atribut (pravým tlačítkem myši na něj klikněte, vyberte 'Vlastnosti', odškrtněte 'Skrytý' a potvrďte OK). Poznámka: Skryté soubory jsou viditelné jen tehdy, pokud je daná volba zapnuta (Ovládací panely &gt; 'Možnosti složky' &gt; Zobrazit).</string>
<string lang="cs" key="HIDDEN_VOL_PROT_PASSWORD_US_KEYB_LAYOUT">Pokud se snažíte ochránit skrytý svazek, který obsahuje skrytý systém, ujistěte se, že používáte při zadávání hesla ke skrytému svazku standardní US rozložení klávesnice. Je to nutné vzhledem k tomu, že hesla musí být zadávána v před-bootovacím prostředí (než se spustí Windows), kde nejsou ne-US rozložení klávesnice k dispozici.</string>
<string lang="cs" key="FOUND_NO_PARTITION_W_DEFERRED_INPLACE_ENC">VeraCrypt nenašel žádný svazek, kde by bylo přerušeno nesystémové šifrování a kde by bylo možné dešifrovat hlavičku svazku s pomocí dodaného hesla a/nebo souborového klíče/ů.\n\nUjistěte se, prosím, že heslo a/nebo souborový klíč/e jsou správné a že oddíl/svazek není používán systémem nebo aplikacemi (včetně antivirového programu).</string>
- <string lang="en" key="SELECTED_PARTITION_ALREADY_INPLACE_ENC">The selected partition/device is already fully encrypted.\nHeader Flags = 0x%.8X</string>
- <string lang="en" key="SELECTED_PARTITION_NOT_INPLACE_ENC">The selected partition/device is not using in-place encryption.\nHeader Flags = 0x%.8X</string>
+ <string lang="cs" key="SELECTED_PARTITION_ALREADY_INPLACE_ENC">Vybraný oddíl/zařízení je již plně dešifrován.\nPříznak hlavičky = 0x%.8X</string>
+ <string lang="cs" key="SELECTED_PARTITION_NOT_INPLACE_ENC">Vybraný oddíl/zařízení nepoužívá šifrování 'na místě'.\nPříznak hlavičky = 0x%.8X</string>
<string lang="cs" key="SYSENC_MOUNT_WITHOUT_PBA_NOTE">\n\nPoznámka: Snažíte-li se připojit oddíl umístěný na zašifrovaném systémovém disku bez před-bootovací autentifikace nebo snažíte-li se připojit zašifrovaný systémový oddíl operačního systému, který neběží, můžete tak učinit přes 'Systém' &gt; 'Připojit bez před-bootovací autentifikace.'</string>
- <string lang="cs" key="MOUNT_WITHOUT_PBA_VOL_ON_ACTIVE_SYSENC_DRIVE">V tomto módu nemůžete připojit oddíl umístěný na disku, jehož část je součástí aktivního systémového šifrování.\n\nNež budete moci připojit oddíl v tomto módu, musíte buď nabootovat z operačního systému nainstalovaném na odlišném disku (zašifrovaném nebo nezašifrovaném) nebo nabootovat z nezašifrovaného operačního systému.</string>
- <string lang="en" key="CANT_DECRYPT_PARTITION_ON_ENTIRELY_ENCRYPTED_SYS_DRIVE">VeraCrypt cannot decrypt an individual partition on an entirely encrypted system drive (you can decrypt only the entire system drive).</string>
- <string lang="en" key="CANT_DECRYPT_PARTITION_ON_ENTIRELY_ENCRYPTED_SYS_DRIVE_UNSURE">Warning: As the drive contains the VeraCrypt Boot Loader, it may be an entirely encrypted system drive. If it is, please note that VeraCrypt cannot decrypt an individual partition on an entirely encrypted system drive (you can decrypt only the entire system drive). If that is the case, you will be able to continue now but you will receive the 'Incorrect password' error message later.</string>
+ <string lang="cs" key="MOUNT_WITHOUT_PBA_VOL_ON_ACTIVE_SYSENC_DRIVE">V tomto režimu nemůžete připojit oddíl umístěný na disku, jehož část je součástí aktivního systémového šifrování.\n\nNež budete moci připojit oddíl v tomto režimu, musíte buď nabootovat z operačního systému nainstalovaném na odlišném disku (zašifrovaném nebo nezašifrovaném) nebo nabootovat z nezašifrovaného operačního systému.</string>
+ <string lang="cs" key="CANT_DECRYPT_PARTITION_ON_ENTIRELY_ENCRYPTED_SYS_DRIVE">VeraCrypt nemůže dešifrovat jednotlivý oddíl na ceskově zašifrovaném systémovém disku (můžete pouze dešifrovat celý systémový disk jako takový).</string>
+ <string lang="cs" key="CANT_DECRYPT_PARTITION_ON_ENTIRELY_ENCRYPTED_SYS_DRIVE_UNSURE">UPOZORNĚNÍ: Jelikož disk obsahuje VeraCrypt Boot Loader, může být kompletně celý systémový disk zašifrován. Pokud ano, uvědomte si, že VeraCrypt nemůže dešifrovat jednotlivý oddíl na celkově zašifrovaném systémovém disku (můžete dešifrovat celý systémový disk jako takový). Je-li tomu tak, můžete pokračovat, ale bude zobrazena chybová zpráva 'Nesprávné heslo'.</string>
<string lang="cs" key="PREV">&lt; &amp;Zpět</string>
- <string lang="cs" key="RAWDEVICES">Seznam základních zařízení instalovaných na vašem systému nemohl být vytvořen!</string>
+ <string lang="cs" key="RAWDEVICES">Seznam základních zařízení instalovaných na vašem systému nemohl být vytvořen.</string>
<string lang="cs" key="READONLYPROMPT">Svazek '%s' již existuje a je jen pro čtení. Jste si jistí, že ho chcete nahradit?</string>
<string lang="cs" key="SELECT_DEST_DIR">Vyberte cílový adresář</string>
<string lang="cs" key="SELECT_KEYFILE">Vyberte souborový klíč</string>
- <string lang="cs" key="SELECT_KEYFILE_PATH">Zvolte cestu pro hledání souborového klíče. UPOZORNĚNÍ: Zapamatována bude pouze cesta, nikoliv název souboru!</string>
- <string lang="en" key="SELECT_KEYFILE_GENERATION_DIRECTORY">Select a directory where to store the keyfiles.</string>
- <string lang="en" key="SELECTED_KEYFILE_IS_CONTAINER_FILE">The current container file was selected as a keyfile. It will be skipped.</string>
- <string lang="cs" key="SERPENT_HELP">Navrhnuta Rossem Andersonem, Elim Bihamem a Larsem Knudsenem. Zveřejněna v roce 1998. 256-bitový klíč, 128-bitové bloky. Operační mód je XTS. Serpent byla jedním z finalistů AES.</string>
+ <string lang="cs" key="SELECT_KEYFILE_PATH">Zvolte cestu pro hledání souborového klíče. UPOZORNĚNÍ: Zapamatována bude pouze cesta, nikoliv název souboru.</string>
+ <string lang="cs" key="SELECT_KEYFILE_GENERATION_DIRECTORY">Vyberte adresář, kde chcete uložit souborové klíče.</string>
+ <string lang="cs" key="SELECTED_KEYFILE_IS_CONTAINER_FILE">Současný kontejnerový soubor byl vybrán jako souborový klíč. Bude přeskočen.</string>
+ <string lang="cs" key="SERPENT_HELP">Navrhnuta Rossem Andersonem, Elim Bihamem a Larsem Knudsenem. Zveřejněna v roce 1998. 256-bitový klíč, 128-bitové bloky. Operační režim je XTS. Serpent byla jedním z finalistů AES.</string>
<string lang="cs" key="SIZE_HELP">Definujte, prosím, velikost svazku, který chcete vytvořit.\n\nVytvoříte-li dynamický (rozptýlený soubor) svaze, tento parametr určí jeho maximální možnou velikost.\n\nMinimální možná velikost FAT svazku je 292 KB. Minimální možná velikost NTFS svazku je 3792 KB.</string>
<string lang="cs" key="SIZE_HELP_HIDDEN_HOST_VOL">Definujte, prosím, velikost vnějšího svazku, který se má vytvořit (nejdříve vytvoříte vnější svazek a pak skrytý uvnitř něj). Minimální možná velikost svazku, v němž má být vytvořen svazek skrytý, je 340 KB.</string>
<string lang="cs" key="SIZE_HELP_HIDDEN_VOL">Zadejte, prosím, velikost skrytého svazku, který se má vytvořit. Minimální možná velikost skrytého svazku je 40 KB (nebo 3664 KB pokud je naformátován jako NTFS). Maximální možná velikost skrytého svazku je uvedena výše.</string>
@@ -680,33 +680,33 @@
<string lang="cs" key="SIZE_PARTITION_HIDDEN_VOL_HELP">\n\nMinimální možná velikost svazku, v němž má být vytvořen svazek skrytý, je 340 KB.</string>
<string lang="cs" key="SIZE_TITLE">Velikost svazku</string>
<string lang="cs" key="SPARSE_FILE">Dynamický</string>
- <string lang="cs" key="TESTS_FAILED">VAROVÁNÍ: AUTOTEST SELHAL!</string>
+ <string lang="cs" key="TESTS_FAILED">UPOZORNĚNÍ: AUTOMATICKÝ TEST NEBYL ÚSPĚŠNÝ.</string>
<string lang="cs" key="TESTS_PASSED">Autotesty všech šifer proběhly v pořádku</string>
<string lang="cs" key="TEST_INCORRECT_TEST_DATA_UNIT_SIZE">Číslo datové jednotky je příliš dlouhé nebo krátké.</string>
<string lang="cs" key="TEST_INCORRECT_SECONDARY_KEY_SIZE">Sekundární klíč, který jste zadali, je příliš dlouhý nebo příliš krátký.</string>
<string lang="cs" key="TEST_CIPHERTEXT_SIZE">Testovací šifrovaný text, který jste zadali, je příliš dlouhý nebo krátký.</string>
<string lang="cs" key="TEST_KEY_SIZE">Testovací klíč, který jste zadali, je příliš dlouhý nebo krátký.</string>
<string lang="cs" key="TEST_PLAINTEXT_SIZE">Testovací čistý text, který jste zadali, je příliš dlouhý nebo krátký.</string>
- <string lang="cs" key="TWO_LAYER_CASCADE_HELP">Dvě šifry v kaskádě operující v LRW módu. Každý blok je nejprve zašifrován s %s (%d-bitový klíč) a poté s %s (%d-bitový klíč). Každá šifra používá svůj vlastní klíč. Všechny klíče jsou vzájemně nezávislé.</string>
- <string lang="cs" key="THREE_LAYER_CASCADE_HELP">Tři šifry v kaskádě operující v módu LRW. Každý blok je nejprve zašifrován s %s (%d-bitový klíč) a poté s %s (%d-bitový klíč) a nakonec s %s (%d-bitový klíč). Každá šifra používá svůj vlastní klíč. Všechny klíče jsou vzájemně nezávislé.</string>
- <string lang="cs" key="AUTORUN_MAY_NOT_ALWAYS_WORK">Podle konfigurace operačního systému můžou tyto funkce pro automatické spuštění a automatické připojení fungovat pouze pokud jsou data cestovních disků vytvořena na nezapisovatelném CD/DVD médiu. Toto není chyba v VeraCryptu (jde o omezení Windows).</string>
- <string lang="cs" key="TRAVELER_DISK_CREATED">Cestovní disk VeraCrypt byl úspěšně vytvořen.\n\nPro spuštění VeraCryptu v přenosném módu potřebujete administrátorská oprávnění. Měli byste také vědět, že prozkoumáním registrů se dá zjistit, že byl VeraCrypt spuštěn na systému Windows, i když běžel v přenosném módu.</string>
+ <string lang="cs" key="TWO_LAYER_CASCADE_HELP">Dvě šifry v kaskádě operující v režimu LRW. Každý blok je nejprve zašifrován s %s (%d-bitový klíč) a poté s %s (%d-bitový klíč). Každá šifra používá svůj vlastní klíč. Všechny klíče jsou vzájemně nezávislé.</string>
+ <string lang="cs" key="THREE_LAYER_CASCADE_HELP">Tři šifry v kaskádě operující v režimu LRW. Každý blok je nejprve zašifrován s %s (%d-bitový klíč) a poté s %s (%d-bitový klíč) a nakonec s %s (%d-bitový klíč). Každá šifra používá svůj vlastní klíč. Všechny klíče jsou vzájemně nezávislé.</string>
+ <string lang="cs" key="AUTORUN_MAY_NOT_ALWAYS_WORK">Podle konfigurace operačního systému můžou tyto funkce pro automatické spuštění a automatické připojení fungovat pouze, jsou-li data cestovních disků vytvořena na nezapisovatelném CD/DVD médiu. Toto není chyba v VeraCryptu (jde o omezení Windows).</string>
+ <string lang="cs" key="TRAVELER_DISK_CREATED">Cestovní disk VeraCrypt byl úspěšně vytvořen.\n\nPro spuštění VeraCryptu v přenosném režimu potřebujete administrátorská oprávnění. Měli byste také vědět, že prozkoumáním registrů se dá zjistit, že byl VeraCrypt spuštěn na systému Windows, i když běžel v přenosném režimu.</string>
<string lang="cs" key="TC_TRAVELER_DISK">Cestovní disk VeraCrypt</string>
- <string lang="cs" key="TWOFISH_HELP">Navrhnuta Brucem Schneierem, Johnem Kelseyem, Dougem Whitingem, Davidem Wagnerem, Chrisem Hallem a Nielsem Fergusonem. Zveřejněna v roce 1998. 256-bitový klíč, 128-bitové bloky. Operační mód je XTS. Twofish byla jedním z finalistů AES.</string>
+ <string lang="cs" key="TWOFISH_HELP">Navrhnuta Brucem Schneierem, Johnem Kelseyem, Dougem Whitingem, Davidem Wagnerem, Chrisem Hallem a Nielsem Fergusonem. Zveřejněna v roce 1998. 256-bitový klíč, 128-bitové bloky. Operační režim je XTS. Twofish byla jedním z finalistů AES.</string>
<string lang="cs" key="MORE_INFO_ABOUT">Více informací o %s</string>
<string lang="cs" key="UNKNOWN">Neznámý</string>
<string lang="cs" key="ERR_UNKNOWN">Nastala nespecifikovaná nebo neznámá chyba (%d).</string>
<string lang="cs" key="UNMOUNTALL_LOCK_FAILED">Některé svazky obsahují soubory nebo adresáře používané aplikacemi nebo systémem.\n\nVynutit odpojení?</string>
<string lang="cs" key="UNMOUNT_BUTTON">&amp;Odpojit</string>
- <string lang="cs" key="UNMOUNT_FAILED">Odpojení selhalo!</string>
+ <string lang="cs" key="UNMOUNT_FAILED">Odpojení nebylo úspěšné.</string>
<string lang="cs" key="UNMOUNT_LOCK_FAILED">Svazek obsahuje soubory nebo složky používané aplikacemi nebo systémem.\n\nVynutit odpojení?</string>
<string lang="cs" key="NO_VOLUME_MOUNTED_TO_DRIVE">K uvedenému písmenu disku není připojen žádný svazek.</string>
<string lang="cs" key="VOL_ALREADY_MOUNTED">Svazek, který se snažíte připojit, je již připojen.</string>
<string lang="cs" key="VOL_MOUNT_FAILED">Došlo k chybě při pokusu o připojení svazku.</string>
<string lang="cs" key="VOL_SEEKING">Chyba při hledání umístění uvnitř svazku.</string>
<string lang="cs" key="VOL_SIZE_WRONG">Chyba: Nesprávná velikost svazku.</string>
- <string lang="cs" key="WARN_QUICK_FORMAT">VAROVÁNÍ: Rychlé formátování byste měli použít jen v těchto případech:\n\n1) Zařízení obsahuje náhodná data (např. již bylo bezpečně a úplně zašifrováno).\n2) Chcete využít ihned veškeré volné místo.\n3) Nezajímá vás otázka bezpečnosti (testování).\n\nJste si jisti, že chcete použít Rychlé formátování?</string>
- <string lang="cs" key="CONFIRM_SPARSE_FILE">Dynamický souborový svazek je před-přidělený rozptýlený NTFS soubor, jehož fyzická velikost (platné místo na disku, které zabírá) se zvyšuje tak, jak se do něj přidávají data.\n\nVAROVÁNÍ: Výkonnost rozptýlených souborových svazků je podstatně horší než u běžných svazků. Rozptýlené souborové svazky jsou také méně bezpečné, protože je možné zjistit, které sektory svazku jsou nepoužívané. Navíc tyto svazky nemohou poskytnout hodnověrné popření (neobsahují skrytý svazek). Pokud jsou data zapsána do rozptýleného souborového svazku a na původním systému souborů není dostatek místa, zašifrovaný systém souborů se může poškodit.\n\nJste si jisti, že chcete vytvořit rozptýlený souborový svazek?</string>
+ <string lang="cs" key="WARN_QUICK_FORMAT">UPOZORNĚNÍ: Rychlé formátování byste měli použít jen v těchto případech:\n\n1) Zařízení obsahuje náhodná data (např. již bylo bezpečně a úplně zašifrováno).\n2) Chcete využít ihned veškeré volné místo.\n3) Nezajímá vás otázka bezpečnosti (testování).\n\nOpravdu chcete použít Rychlé formátování?</string>
+ <string lang="cs" key="CONFIRM_SPARSE_FILE">Dynamický souborový svazek je před-přidělený rozptýlený NTFS soubor, jehož fyzická velikost (platné místo na disku, které zabírá) se zvyšuje tak, jak se do něj přidávají data.\n\nUPOZORNĚNÍ: Výkonnost rozptýlených souborových svazků je podstatně horší než u běžných svazků. Rozptýlené souborové svazky jsou také méně bezpečné, protože je možné zjistit, které sektory svazku jsou nepoužívané. Navíc tyto svazky nemohou poskytnout hodnověrné popření (neobsahují skrytý svazek). Jsou-li data zapsána do rozptýleného souborového svazku a na původním systému souborů není dostatek místa, zašifrovaný systém souborů se může poškodit.\n\nOpravdu chcete vytvořit rozptýlený souborový svazek?</string>
<string lang="cs" key="SPARSE_FILE_SIZE_NOTE">Velikost dynamického svazku, vykazovaná systémem Windows a VeraCryptem, bude vždy rovna jeho maximální velikosti. Pro zjištění aktuální fyzické velikosti svazku (místo na disku, které zabírá), klikněte pravým tlačítkem myši na soubor svazku (v okně Průzkumníka Windows, ne v VeraCryptu), pak vyberte 'Vlastnosti' a prohlédněte si hodnotu 'Velikost na disku'.\n\nMějte na paměti, že pokud přesunete dynamický svazek na jiný svazek nebo jednotku, fyzická velikost souborového svazku se zvýší na maximum. (Tomu můžete zabránit tím, že vytvoříte nový dynamický svazek v cílové oblasti, připojíte ho a pak přesunete soubory ze starého svazku do nového.)</string>
<string lang="cs" key="PASSWORD_CACHE_WIPED_SHORT">Mezipaměť hesla vyčištěna</string>
<string lang="cs" key="PASSWORD_CACHE_WIPED">Hesla (a/nebo zpracovaný obsah souborového klíče) uložená v ovladači mezipaměti programu VeraCrypt byla pročištěna.</string>
@@ -715,8 +715,8 @@
<string lang="cs" key="SELECT_A_MOUNTED_VOLUME">Vyberte prosím nejdříve připojený svazek ze seznamu písmen jednotek.</string>
<string lang="cs" key="AMBIGUOUS_VOL_SELECTION">Momentálně jsou vybrány dva připojené svazky (jeden v písmenném seznamu jednotek a druhý ve vstupním políčku pod seznamem).\n\nVyberte, prosím, který svazek chcete zvolit.</string>
<string lang="cs" key="CANT_CREATE_AUTORUN">Chyba: Nelze vytvořit autorun.inf</string>
- <string lang="cs" key="ERR_PROCESS_KEYFILE">Chyba při zpracování souborového klíče!</string>
- <string lang="cs" key="ERR_PROCESS_KEYFILE_PATH">Chyba při zpracování cesty k souborovému klíči!</string>
+ <string lang="cs" key="ERR_PROCESS_KEYFILE">Chyba při zpracování souborového klíče.</string>
+ <string lang="cs" key="ERR_PROCESS_KEYFILE_PATH">Chyba při zpracování cesty k souborovému klíči.</string>
<string lang="cs" key="ERR_KEYFILE_PATH_EMPTY">Cesta k souborovému klíči neobsahuje žádný soubor.\n\nAdresáře (a soubory, které obsahují) nalezené v cestě k souborovému klíči jsou ignorovány.</string>
<string lang="cs" key="UNSUPPORTED_OS">VeraCrypt nepodporuje tento operační systém.</string>
<string lang="cs" key="UNSUPPORTED_BETA_OS">Chyba: VeraCrypt podporuje pouze stabilní verze tohoto operačního systému (beta/RC verze nejsou podporovány).</string>
@@ -734,7 +734,7 @@
<string lang="cs" key="CANT_DISMOUNT_VOLUME">Svazek nelze odpojit.</string>
<string lang="cs" key="FORMAT_NTFS_FAILED">Windows nemohl zformátovat svazek jako NTFS.\n\nVyberte prosím jiný systému souborů (je-li to možné) a zkuste to znovu. Popřípadě můžete nechat svazek nenaformátovaný (vyberte 'Žádný' systém souborů), ukončete tohoto průvodce, připojte svazek a pak použijte buď systémový nástroj, nebo nástroj třetí strany k zformátování připojeného svazku (svazek zůstane zašifrovaný).</string>
<string lang="cs" key="FORMAT_NTFS_FAILED_ASK_FAT">Windows nemohl naformátovat svazek jako NTFS.\n\nChcete místo toho svazek naformátovat jako FAT?</string>
- <string lang="cs" key="DEFAULT">Předvolený</string>
+ <string lang="cs" key="DEFAULT">Výchozí</string>
<string lang="cs" key="PARTITION_LOWER_CASE">oddíl</string>
<string lang="cs" key="PARTITION_UPPER_CASE">ODDÍL</string>
<string lang="cs" key="DEVICE">Zařízení</string>
@@ -745,12 +745,12 @@
<string lang="cs" key="VOLUME_UPPER_CASE">SVAZEK</string>
<string lang="cs" key="LABEL">Jmenovka</string>
<string lang="cs" key="CLUSTER_TOO_SMALL">Vybraná velikost clusteru je pro tento svazek příliš malá. Použije se větší velikost clusteru.</string>
- <string lang="cs" key="CANT_GET_VOLSIZE">Chyba: Nelze zjistit velikost svazku!\n\nUjistěte se, že vybraný svazek není používán systémem nebo aplikací.</string>
+ <string lang="cs" key="CANT_GET_VOLSIZE">Chyba: Nelze zjistit velikost svazku.\n\nUjistěte se, že vybraný svazek není používán systémem nebo aplikací.</string>
<string lang="cs" key="HIDDEN_VOL_HOST_SPARSE">Skryté svazky nesmí být vytvořeny uvnitř dynamických (rozptýlený soubor) svazků. Abyste dosáhli hodnověrného popření, skrytý svazek musí být vytvořit uvnitř ne-dynamického svazku.</string>
<string lang="cs" key="HIDDEN_VOL_HOST_UNSUPPORTED_FILESYS">Průvodce vytvořením svazku VeraCrypt může vytvořit skrytý svazek pouze uvnitř svazků typu FAT nebo NTFS.</string>
<string lang="cs" key="HIDDEN_VOL_HOST_UNSUPPORTED_FILESYS_WIN2000">V systému Windows 2000 může Průvodce vytvořením svazku VeraCrypt vytvořit skrytý svazek pouze uvnitř svazku typu FAT.</string>
<string lang="cs" key="HIDDEN_VOL_HOST_NTFS">Poznámka: Systém souborů FAT je vhodnější pro vnější svazky než NTFS (například maximální možná velikost skrytého svazku by byla s největší pravděpodobností mnohem větší, pokud by byl vnější svazek naformátován jako FAT).</string>
- <string lang="cs" key="HIDDEN_VOL_HOST_NTFS_ASK">Systém souborů FAT je mnohem vhodnější pro vnější svazky než NTFS. Například maximální možná velikost skrytého svazku by byla s největší pravděpodobností mnohem větší, pokud by byl vnější svazek naformátován jako FAT (důvodem je, že NTFS vždy ukládá vnitřní data do poloviny svazku, a proto může být skrytý svazek umístěn jen do druhé poloviny vnějšího svazku).\n\nJste si jisti, že chcete naformátovat vnější svazek jako NTFS?</string>
+ <string lang="cs" key="HIDDEN_VOL_HOST_NTFS_ASK">Systém souborů FAT je mnohem vhodnější pro vnější svazky než NTFS. Například maximální možná velikost skrytého svazku by byla s největší pravděpodobností mnohem větší, pokud by byl vnější svazek naformátován jako FAT (důvodem je, že NTFS vždy ukládá vnitřní data do poloviny svazku, a proto může být skrytý svazek umístěn jen do druhé poloviny vnějšího svazku).\n\nOpravdu chcete naformátovat vnější svazek jako NTFS?</string>
<string lang="cs" key="OFFER_FAT_FORMAT_ALTERNATIVE">Chcete místo toho naformátovat svazek jako FAT?</string>
<string lang="cs" key="FAT_NOT_AVAILABLE_FOR_SO_LARGE_VOLUME">Poznámka: Tento svazek nemůže být naformátován jako FAT, protože jeho velikost překračuje maximální povolenou velikost podporovanou systémem souborů FAT32 při zvolené velikosti sektorů (2 TB pro 512-bajtové sektory a 16 TB pro 4096-bajtové sektory).</string>
<string lang="cs" key="PARTITION_TOO_SMALL_FOR_HIDDEN_OS">Chyba: Oddíl pro skrytý operační systém (např. první oddíl hned za systémovým oddílem) musí být alespoň o 5% větší než systémový oddíl (systémový oddíl je ten, kde je nainstalován momentálně běžící operační systém).</string>
@@ -760,24 +760,24 @@
<string lang="cs" key="TWO_SYSTEMS_IN_ONE_PARTITION_REMARK">Poznámka: Není praktické (a proto ani podporované) instalovat operační systémy do dvou svazků VeraCrypt, které jsou umístěny uvnitř jednoho oddílu, protože používání vnějšího operačního systému by vyžadovalo zápis dat do oblasti skrytého operačního systému (a pokud by byly tyto zapisovací operace zamezeny použitím ochranného prvku skrytého svazku, došlo by k selhání systému, např. chyby s modrou obrazovkou).</string>
<string lang="cs" key="FOR_MORE_INFO_ON_PARTITIONS">Pro informace jak vytvořit a spravovat oddíly, viz dodaná dokumentace k vašemu operačnímu systému nebo kontaktujte technickou podporu prodejce vašeho počítače pro asistenci.</string>
<string lang="cs" key="SYSTEM_PARTITION_NOT_ACTIVE">Chyba: Momentálně běžící operační systém není nainstalován na bootovacím svazku (první aktivní oddíl). To není podporováno.</string>
- <string lang="cs" key="CONFIRM_FAT_FOR_FILES_OVER_4GB">Uvedli jste, že chcete v tomto svazku VeraCrypt ukládat soubory větší než 4 GB. Vybrali jste ale systém souborů FAT, kde soubory větší než 4 GB nemohou být uloženy.\n\nJste si jisti, že chcete svazek naformátovat na FAT?</string>
- <string lang="en" key="NONSYS_INPLACE_DECRYPTION_BAD_VOL_FORMAT">Error: VeraCrypt does not support in-place decryption of legacy non-system volumes created by VeraCrypt 1.0b or earlier.\n\nNote: You can still decrypt files stored on the volume by copying/moving them to any unencrypted volume.</string>
- <string lang="en" key="NONSYS_INPLACE_DECRYPTION_CANT_DECRYPT_HID_VOL">Error: VeraCrypt cannot in-place decrypt a hidden VeraCrypt volume.\n\nNote: You can still decrypt files stored on the volume by copying/moving them to any unencrypted volume.</string>
- <string lang="en" key="CONFIRM_VOL_CONTAINS_NO_HIDDEN_VOL">Warning: Note that VeraCrypt cannot in-place decrypt a volume that contains a hidden VeraCrypt volume (the hidden volume would be overwritten with pseudorandom data).\n\nPlease confirm that the volume you are about to decrypt contains no hidden volume.\n\nNote: If the volume contains a hidden volume but you do not mind losing the hidden volume, you can select Proceed (the outer volume will be safely decrypted).</string>
- <string lang="en" key="VOL_CONTAINS_NO_HIDDEN_VOL">The volume does not contain any hidden volume. Proceed.</string>
- <string lang="en" key="VOL_CONTAINS_A_HIDDEN_VOL">The volume contains a hidden volume. Cancel.</string>
- <string lang="cs" key="CANT_ACCESS_VOL">Chyba: Ke svazku nelze přistoupit!\n\nUjistěte se, že vybraný svazek existuje, že není připojený používaný systémem nebo aplikací, že máte práva pro čtení/zápis ke svazku a že svazek není chráněn proti zápisu.</string>
- <string lang="en" key="CANT_GET_VOL_INFO">Error: Cannot obtain volume properties.</string>
+ <string lang="cs" key="CONFIRM_FAT_FOR_FILES_OVER_4GB">Uvedli jste, že chcete v tomto svazku VeraCrypt ukládat soubory větší než 4 GB. Vybrali jste ale systém souborů FAT, kde soubory větší než 4 GB nemohou být uloženy.\n\nOpravdu chcete svazek naformátovat na FAT?</string>
+ <string lang="cs" key="NONSYS_INPLACE_DECRYPTION_BAD_VOL_FORMAT">Chyba: VeraCrypt nepodporuje dešifrování 'na-místě' starých nesystémových svazků vytvořených v VeraCrypt 1.0b nebo starších.\n\nPoznámka: můžete soubory uložené na svazku stále dešifrovat jejich zkopírováním/přesunutím na nezašifrovaný svazek.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DECRYPTION_CANT_DECRYPT_HID_VOL">Chyba: VeraCrypt nemůže 'na-místě' dešifrovat skrytá svazek VeraCrypt.\n\nPoznámka: můžete soubory uložené na svazku stále dešifrovat jejich zkopírováním/přesunutím na nezašifrovaný svazek.</string>
+ <string lang="cs" key="CONFIRM_VOL_CONTAINS_NO_HIDDEN_VOL">UPOZORNĚNÍ: Nezapomeňte, že VeraCrypt nemůže 'na-místě' dešifrovat svazek, který obsahuje skrytý svazek VeraCrypt (skrytý svazek může být přepsán náhodnými daty).\n\nPotvrďte prosím, že svazek, který chcete dešifrovat neobsahuje skrytý svazek.\n\nPoznámka: pokud svazek obsahuje skrytý svzek a nevadí vám, že o něj přijdete, vyberte možnost 'Pokračovat' (vnější svazek bude bezpečně dešifrován).</string>
+ <string lang="cs" key="VOL_CONTAINS_NO_HIDDEN_VOL">Svazek neobsahuje skrytý svazek. Pokračovat.</string>
+ <string lang="cs" key="VOL_CONTAINS_A_HIDDEN_VOL">Svazek obsahuje skrytý svazek. Přerušit.</string>
+ <string lang="cs" key="CANT_ACCESS_VOL">Chyba: Ke svazku není přístup.\n\nUjistěte se, že vybraný svazek existuje, že není připojený používaný systémem nebo aplikací, že máte práva pro čtení/zápis ke svazku a že svazek není chráněn proti zápisu.</string>
+ <string lang="cs" key="CANT_GET_VOL_INFO">Chyba: nní možné získt vlastnosti svazku.</string>
<string lang="cs" key="INPLACE_ENC_CANT_ACCESS_OR_GET_INFO_ON_VOL">Chyba: Ke svazku se nelze připojit a/nebo o něm nelze zjistit informace.\n\nUjistěte se, že vámi vybraný svazek existuje, že není používán systémem nebo aplikacemi a že máte práva pro čtení/zapisování ke svazku a že není chráněn proti zápisu.</string>
<string lang="cs" key="INPLACE_ENC_CANT_ACCESS_OR_GET_INFO_ON_VOL_ALT">Chyba: Ke svazku se nelze připojit a/nebo o něm nelze zjistit informace. Ujistěte se, že vámi vybraný svazek existuje, že není používán systémem nebo aplikacemi a že máte práva pro čtení/zapisování ke svazku a že není chráněn proti zápisu.\n\nPokud problém přetrvává, mohou vám pomoci kroky uvedené níže.</string>
<string lang="cs" key="INPLACE_ENC_GENERIC_ERR_ALT_STEPS">Svazek nemohl být VeraCryptem zašifrován, protože nastala nějaká chyba. Zkuste, prosím, nejdříve opravit všechny předešlé ohlášené chyby, a pak to zkuste znovu. Pokud problém přetrvává, mohou vám pomoci kroky uvedené níže.</string>
<string lang="cs" key="INPLACE_ENC_GENERIC_ERR_RESUME">VeraCrypt nemohl pokračovat v šifrování oddílu, protože nastala nějaká chyba.\n\nZkuste, prosím, nejdříve opravit všechny předešlé ohlášené chyby, a pak zkuste v procesu pokračovat. Svazek nelze připojit, dokud nebude úplně zašifrován.</string>
- <string lang="en" key="INPLACE_DEC_GENERIC_ERR">An error prevented VeraCrypt from decrypting the volume. Please try fixing any previously reported problems and then try again if possible.</string>
- <string lang="cs" key="CANT_DISMOUNT_OUTER_VOL">Chyba: Vnější svazek nelze odpojit!\n\nSvazek nemůže být odpojen, pokud obsahuje soubory nebo složky používané programem nebo systémem.\n\nZavřete prosím jakýkoliv program, který by mohl soubory nebo adresáře na svazku používat a klikněte Znovu.</string>
- <string lang="cs" key="CANT_GET_OUTER_VOL_INFO">Chyba: Nelze získat informace o vnějším svazku! Vytváření svazku nemůže pokračovat.</string>
- <string lang="cs" key="CANT_ACCESS_OUTER_VOL">Chyba: Nelze přistupovat na vnější svazek! Vytváření svazku nelze dokončit.</string>
- <string lang="cs" key="CANT_MOUNT_OUTER_VOL">Chyba: Nemohu připojit vnější svazek! Vytváření svazku nelze dokončit.</string>
- <string lang="cs" key="CANT_GET_CLUSTER_BITMAP">Chyba: Nelze získat bitmapu clusteru svazku! Vytváření svazku nelze dokončit.</string>
+ <string lang="cs" key="INPLACE_DEC_GENERIC_ERR">Chyba zabránila VeraCryptu dešifrovat svazek. Zkuste vyřešit dříve ohlášené problémy a pak to zkuste znovu.</string>
+ <string lang="cs" key="CANT_DISMOUNT_OUTER_VOL">Chyba: Vnější svazek nelze odpojit.\n\nSvazek nemůže být odpojen, pokud obsahuje soubory nebo složky používané programem nebo systémem.\n\nZavřete prosím jakýkoliv program, který by mohl soubory nebo adresáře na svazku používat a klikněte Znovu.</string>
+ <string lang="cs" key="CANT_GET_OUTER_VOL_INFO">Chyba: Nelze získat informace o vnějším svazku. Vytváření svazku nemůže pokračovat.</string>
+ <string lang="cs" key="CANT_ACCESS_OUTER_VOL">Chyba: Nelze přistupovat na vnější svazek. Vytváření svazku nelze dokončit.</string>
+ <string lang="cs" key="CANT_MOUNT_OUTER_VOL">Chyba: Nemohu připojit vnější svazek. Vytváření svazku nelze dokončit.</string>
+ <string lang="cs" key="CANT_GET_CLUSTER_BITMAP">Chyba: Nelze získat bitmapu clusteru svazku. Vytváření svazku nelze dokončit.</string>
<string lang="cs" key="ALPHABETICAL_CATEGORIZED">Abecedně/dle kategorií</string>
<string lang="cs" key="MEAN_SPEED">Průměrná rychlost (sestupně)</string>
<string lang="cs" key="ALGORITHM">Algoritmus</string>
@@ -792,7 +792,7 @@
<string lang="cs" key="VALUE">Hodnota</string>
<string lang="cs" key="PROPERTY">Vlastnost</string>
<string lang="cs" key="LOCATION">Oblast</string>
- <string lang="cs" key="BYTES">bytů</string>
+ <string lang="cs" key="BYTES">bajtů</string>
<string lang="cs" key="HIDDEN">Skrytý</string>
<string lang="cs" key="OUTER">Vnější</string>
<string lang="cs" key="NORMAL">Normální</string>
@@ -808,11 +808,11 @@
<string lang="cs" key="SYSTEM_PARTITION_ENCRYPTING">Systémový oddíl (šifruji - %.2f%% hotovo)</string>
<string lang="cs" key="SYSTEM_PARTITION_DECRYPTING">Systémový oddíl (dešifruji - %.2f%% hotovo)</string>
<string lang="cs" key="SYSTEM_PARTITION_PARTIALLY_ENCRYPTED">Systémový oddíl (%.2f%% zašifrováno)</string>
- <string lang="cs" key="HID_VOL_DAMAGE_PREVENTED">Ano (poškození zabráněno!)</string>
+ <string lang="cs" key="HID_VOL_DAMAGE_PREVENTED">Ano (poškození zabráněno.)</string>
<string lang="cs" key="NONE">Žádný</string>
<string lang="cs" key="KEY_SIZE">Velikost primárního klíče</string>
- <string lang="cs" key="SECONDARY_KEY_SIZE_XTS">Velikost sekundárního klíče (XTS Mód)</string>
- <string lang="cs" key="SECONDARY_KEY_SIZE_LRW">Velikost vylepšeného klíče (LRW Mód)</string>
+ <string lang="cs" key="SECONDARY_KEY_SIZE_XTS">Velikost sekundárního klíče (režim XTS)</string>
+ <string lang="cs" key="SECONDARY_KEY_SIZE_LRW">Velikost vylepšeného klíče (režim LRW)</string>
<string lang="cs" key="BITS">bitů</string>
<string lang="cs" key="BLOCK_SIZE">Velikost bloku</string>
<string lang="cs" key="PKCS5_PRF">PKCS-5 PRF</string>
@@ -827,21 +827,21 @@
<string lang="cs" key="REMOVABLE_DISK">Vyjímatelný disk</string>
<string lang="cs" key="HARDDISK">Hard disk</string>
<string lang="cs" key="UNCHANGED">Nezměněný</string>
- <string lang="en" key="AUTODETECTION">Autodetection</string>
- <string lang="cs" key="SETUP_MODE_TITLE">Průvodcovský mód</string>
- <string lang="cs" key="SETUP_MODE_INFO">Vyberte jeden z módů. Pokud nevíte, který zvolit, vyberte předvolený.</string>
+ <string lang="cs" key="AUTODETECTION">Automatická detekce</string>
+ <string lang="cs" key="SETUP_MODE_TITLE">Režim průvodce</string>
+ <string lang="cs" key="SETUP_MODE_INFO">Vyberte jeden z režimů. Pokud nevíte, který zvolit, vyberte výchozí.</string>
<string lang="cs" key="SETUP_MODE_HELP_INSTALL">Zvolte tuto možnost, pokud chcete VeraCrypt nainstalovat na tento systém.</string>
<string lang="cs" key="SETUP_MODE_HELP_UPGRADE">Poznámka: Aktualizaci můžete provést i bez dešifrování, i když je systémový oddíl/disk zašifrován nebo pokud používáte skrytý operační systém.</string>
- <string lang="cs" key="SETUP_MODE_HELP_EXTRACT">Zvolíte-li tuto možnost, budou rozbaleny všechny soubory z tohoto balíčku, ale nic nebude na systém nainstalováno. Nevybírejte tuto volbu, pokud chcete zašifrovat systémový oddíl nebo systémový disk. Výběr této možnosti může být užitečný, pokud například chcete spouštět VeraCrypt v takzvaném přenosném módu. VeraCrypt nemusí být nainstalovaný na operačním systému, pod kterým běží. Až budou všechny soubory rozbaleny, můžete rovnou spustit soubor 'VeraCrypt.exe' (pak VeraCrypt poběží v přenosném módu).</string>
- <string lang="cs" key="SETUP_OPTIONS_TITLE">Volby nastavení</string>
- <string lang="cs" key="SETUP_OPTIONS_INFO">Zde můžete zadat různé volby pro kontrolu instalačního procesu.</string>
+ <string lang="cs" key="SETUP_MODE_HELP_EXTRACT">Zvolíte-li tuto možnost, budou rozbaleny všechny soubory z tohoto balíčku, ale nic nebude na systém nainstalováno. Nevybírejte tuto možnost, pokud chcete zašifrovat systémový oddíl nebo systémový disk. Výběr této možnosti může být užitečný, pokud například chcete spouštět VeraCrypt v takzvaném přenosném režimu. VeraCrypt nemusí být nainstalovaný na operačním systému, pod kterým běží. Až budou všechny soubory rozbaleny, můžete rovnou spustit soubor 'VeraCrypt.exe' (pak VeraCrypt poběží v přenosném režimu).</string>
+ <string lang="cs" key="SETUP_OPTIONS_TITLE">Možnosti nastavení</string>
+ <string lang="cs" key="SETUP_OPTIONS_INFO">Zde můžete zadat různé možnosti pro kontrolu instalačního procesu.</string>
<string lang="cs" key="SETUP_PROGRESS_TITLE">Instaluji</string>
<string lang="cs" key="SETUP_PROGRESS_INFO">Čekejte prosím, program VeraCrypt se instaluje.</string>
<string lang="cs" key="SETUP_FINISHED_TITLE_DON">VeraCrypt byl úspěšně nainstalován</string>
<string lang="cs" key="SETUP_FINISHED_UPGRADE_TITLE_DON">VeraCrypt byl úspěšně aktualizován</string>
<string lang="cs" key="SETUP_FINISHED_INFO_DON">Zvažte, prosím, příspěvek na podporu VeraCryptu. Pro zavření instalátoru stačí kliknout na tlačítko Dokončit.</string>
- <string lang="cs" key="EXTRACTION_OPTIONS_TITLE">Volby rozbalení</string>
- <string lang="cs" key="EXTRACTION_OPTIONS_INFO">Zde si můžete vybrat různé volby pro kontrolu rozbalovacího procesu.</string>
+ <string lang="cs" key="EXTRACTION_OPTIONS_TITLE">Možnosti rozbalení</string>
+ <string lang="cs" key="EXTRACTION_OPTIONS_INFO">Zde si můžete vybrat různé možnosti pro kontrolu rozbalovacího procesu.</string>
<string lang="cs" key="EXTRACTION_PROGRESS_INFO">Čekejte prosím, soubory se rozbalují.</string>
<string lang="cs" key="EXTRACTION_FINISHED_TITLE_DON">Soubory úspěšně rozbaleny</string>
<string lang="cs" key="EXTRACTION_FINISHED_INFO">Všechny soubory byly úspěšně rozbaleny do cílového umístění.</string>
@@ -855,19 +855,19 @@
<string lang="cs" key="UNINSTALL">Odinstalovat</string>
<string lang="cs" key="SETUP_ADMIN">Pro úspěšnou instalaci/odinstalaci VeraCryptu potřebujete administrátorská práva. Chcete pokračovat?</string>
<string lang="cs" key="TC_INSTALLER_IS_RUNNING">Instalátor programu VeraCrypt momentálně běží na tomto systému a provádí nebo připravuje instalaci nebo update programu VeraCrypt. Než budete pokračovat, počkejte na dokončení nebo jej zavřete. Pokud ho nemůžete zavřít, restartujte prosím počítač, než budete pokračovat.</string>
- <string lang="cs" key="INSTALL_FAILED">Instalace selhala.</string>
- <string lang="cs" key="UNINSTALL_FAILED">Odinstalace selhala.</string>
+ <string lang="cs" key="INSTALL_FAILED">Instalace nebyla úspěšná.</string>
+ <string lang="cs" key="UNINSTALL_FAILED">Odinstalace nebyla úspěšná.</string>
<string lang="cs" key="DIST_PACKAGE_CORRUPTED">Distribuční balíček je poškozený. Stáhněte jej prosím znovu (nejlépe z oficiálních stránek programu VeraCrypt na adrese https://veracrypt.codeplex.com).</string>
<string lang="cs" key="CANNOT_WRITE_FILE_X">Nelze zapsat soubor %s</string>
<string lang="cs" key="EXTRACTING_VERB">Rozbalení</string>
<string lang="cs" key="CANNOT_READ_FROM_PACKAGE">Nelze přečíst data z balíčku.</string>
<string lang="cs" key="CANT_VERIFY_PACKAGE_INTEGRITY">Nelze ověřit integritu tohoto distribučního balíčku.</string>
- <string lang="cs" key="EXTRACTION_FAILED">Rozbalení selhalo.</string>
+ <string lang="cs" key="EXTRACTION_FAILED">Rozbalení nebylo úspěšná.</string>
<string lang="cs" key="ROLLBACK">Instalace byla vrácena zpět.</string>
<string lang="cs" key="INSTALL_OK">VeraCrypt byl úspěšně nainstalován.</string>
<string lang="cs" key="SETUP_UPDATE_OK">VeraCrypt byl úspěšně aktualizován.</string>
<string lang="cs" key="UPGRADE_OK_REBOOT_REQUIRED">VeraCrypt byl aktualizován na novější verzi. Před použitím musí být váš počítač restartován.\n\nChcete ho nyní restartovat?</string>
- <string lang="cs" key="SYS_ENC_UPGRADE_FAILED">Aktualizace VeraCryptu selhala!\n\nDŮLEŽITÉ: Před tím, než vypnete nebo restartujete systém, doporučujeme vám použít systémový bod obnovy (nabídka Start &gt; Všechny programy &gt; Příslušenství &gt; Systémové nástroje &gt; Obnovení systému) pro obnovení systému do bodu nazvaného 'VeraCrypt instalace'. Pokud není bod obnovení k dispozici, měli byste znovu zkusit instalaci originální nebo nové verze VeraCryptu ještě před tím, než vypnete nebo restartujete systém.</string>
+ <string lang="cs" key="SYS_ENC_UPGRADE_FAILED">Aktualizace VeraCryptu nebyla úspěšná.\n\nDŮLEŽITÉ: Před tím, než vypnete nebo restartujete systém, doporučujeme vám použít systémový bod obnovy (nabídka Start &gt; Všechny programy &gt; Příslušenství &gt; Systémové nástroje &gt; Obnovení systému) pro obnovení systému do bodu nazvaného 'VeraCrypt instalace'. Pokud není bod obnovení k dispozici, měli byste znovu zkusit instalaci originální nebo nové verze VeraCryptu ještě před tím, než vypnete nebo restartujete systém.</string>
<string lang="cs" key="UNINSTALL_OK">VeraCrypt byl úspěšně odinstalován.\n\nKlikněte 'Dokončit' pro odstranění instalátoru VeraCrypt a složky %s. Složka nebude odstraněna, pokud obsahuje jakékoliv soubory, které nebyly nainstalovány instalátorem nebo programem VeraCrypt.</string>
<string lang="cs" key="REMOVING_REG">Odstraňuji záznamy v registrech o programu VeraCrypt</string>
<string lang="cs" key="ADDING_REG">Přidávám záznamy do registru</string>
@@ -877,29 +877,29 @@
<string lang="cs" key="REMOVING">Odstraňuji</string>
<string lang="cs" key="ADDING_ICON">Přidávám ikonu</string>
<string lang="cs" key="CREATING_SYS_RESTORE">Vytvářím bod obnovení</string>
- <string lang="cs" key="FAILED_SYS_RESTORE">Bod obnovení se nepodařilo vytvořit!</string>
+ <string lang="cs" key="FAILED_SYS_RESTORE">Bod obnovení se nepodařilo vytvořit.</string>
<string lang="cs" key="INSTALLER_UPDATING_BOOT_LOADER">Aktualizuji bootovací zavaděč</string>
- <string lang="cs" key="INSTALL_OF_FAILED">Instalace '%s' selhala. %s Chcete pokračovat v instalaci?</string>
- <string lang="cs" key="UNINSTALL_OF_FAILED">Odinstalace '%s' selhala. %s Chcete pokračovat v odinstalaci?</string>
+ <string lang="cs" key="INSTALL_OF_FAILED">Instalace '%s' nebyla úspěšná. %s Chcete pokračovat v instalaci?</string>
+ <string lang="cs" key="UNINSTALL_OF_FAILED">Odinstalace '%s' nebyla úspěšná. %s Chcete pokračovat v odinstalaci?</string>
<string lang="cs" key="INSTALL_COMPLETED">Instalace dokončena.</string>
<string lang="cs" key="CANT_CREATE_FOLDER">Složka '%s' nemohla být vytvořena</string>
<string lang="cs" key="CLOSE_TC_FIRST">Ovladač zařízení VeraCrypt nemůže být odstraněn.\n\nZavřete prosím nejdříve všechny okna VeraCrypt. Pokud to nepomůže, restartujte prosím Windows a zkuste to znovu.</string>
<string lang="cs" key="DISMOUNT_ALL_FIRST">Všechny svazky VeraCrypt musí být odpojeny před instalací nebo odinstalací programu VeraCrypt.</string>
<string lang="cs" key="UNINSTALL_OLD_VERSION_FIRST">Na tomto systému je aktuálně nainstalována zastaralá verze VeraCryptu. Před instalací nové verze musí být nejprve odinstalována.\n\nJakmile zavřete tento dialog, spustí se odinstalátor staré verze. Při odinstalaci VeraCryptu nedojde k dešifrování žádného svazku. Po odinstalaci staré verze VeraCryptu spusťte znovu instalátor nové verze.</string>
- <string lang="cs" key="REG_INSTALL_FAILED">Instalace záznamů do registru selhala</string>
- <string lang="cs" key="DRIVER_INSTALL_FAILED">Instalace ovladače zařízení selhala. Restartujte prosím Windows a zkuste poté nainstalovat VeraCrypt znovu.</string>
+ <string lang="cs" key="REG_INSTALL_FAILED">Instalace záznamů do registru nebyla úspěšná</string>
+ <string lang="cs" key="DRIVER_INSTALL_FAILED">Instalace ovladače zařízení nebyla úspěšná. Restartujte prosím Windows a zkuste poté nainstalovat VeraCrypt znovu.</string>
<string lang="cs" key="STARTING_DRIVER">Startuji ovladač VeraCrypt zařízení</string>
- <string lang="cs" key="DRIVER_UINSTALL_FAILED">Odinstalace ovladače zařízení selhala. Pro odinstalaci (reinstalaci) ovladače zařízení se budete muset odhlásit nebo restartovat celý systém.</string>
+ <string lang="cs" key="DRIVER_UINSTALL_FAILED">Odinstalace ovladače zařízení nebyla úspěšná. Pro odinstalaci (reinstalaci) ovladače zařízení se budete muset odhlásit nebo restartovat celý systém.</string>
<string lang="cs" key="INSTALLING_DRIVER">Instaluji ovladač VeraCrypt zařízení</string>
<string lang="cs" key="STOPPING_DRIVER">Zastavuji ovladač VeraCrypt zařízení</string>
<string lang="cs" key="REMOVING_DRIVER">Odinstalovávám ovladač VeraCrypt zařízení</string>
- <string lang="cs" key="COM_REG_FAILED">Registrace podpůrné knihovny pro kontrolu uživatelského účtu selhala.</string>
- <string lang="cs" key="COM_DEREG_FAILED">Odregistrace podpůrné knihovny pro kontrolu uživatelského účtu selhala.</string>
- <string lang="cs" key="TRAVELER_LIMITATIONS_NOTE">Poznámka o přenosném módu:\n\nMějte na paměti, že operační systém vyžaduje, aby v něm před startem byly registrovány ovladače. Z toho plyne, že ovladač VeraCryptu není (a nemůže být) plně přenositelný (přičemž aplikace VeraCrypt jsou přenositelné úplně, např. nemusí být nainstalovány nebo registrovány v operačním systému). VeraCrypt také vyžaduje ovladač pro možnost šifrování/dešifrování za běhu.</string>
- <string lang="cs" key="TRAVELER_UAC_NOTE">Pokud se rozhodnete spouštět VeraCrypt v přenosném módu (oproti spouštění instalované verze VeraCryptu), systém se vás zeptá pokaždé, když se pokusíte VeraCrypt spustit (UAC prompt).\n\nDůvodem je, že pokud spouštíte VeraCrypt v přenosném módu, program si musí nahrát a spustit ovladač zařízení VeraCrypt. VeraCrypt tento ovladač potřebuje, aby poskytl jasné šifrování/dešifrování za běhu a aby uživatelé bez administrátorských oprávnění nemohli spouštět ovladače zařízení ve Windows. Proto se vás systém zeptá na oprávnění, aby mohl VeraCrypt běžet s administrátorskými oprávněními (UAC prompt).\n\nPokud VeraCrypt nainstalujete na systém (oproti spouštění VeraCryptu v přenosném módu), systém se vás NEBUDE ptát na povolení ke spuštění VeraCryptu (UAC prompt) pokaždé, když se ho pokusíte spustit.\n\nJste si jisti, že chcete soubory rozbalit?</string>
- <string lang="cs" key="CONTAINER_ADMIN_WARNING">Varování: Tato instance Průvodce vytvořením svazku má administrátorská oprávnění.\n\nVáš nový svazek může být vytvořen s takovými oprávněními, které vám nedovolí do něj zapisovat, pokud je připojen. Pokud se tomu chcete vyhnout, zavřete tuto instanci Průvodce vytvořením svazku a spusťte nový bez administrátorských oprávnění.\n\nChcete zavřít tuto instanci Průvodce vytvořením svazku?</string>
+ <string lang="cs" key="COM_REG_FAILED">Registrace podpůrné knihovny pro kontrolu uživatelského účtu nebyla úspěšná.</string>
+ <string lang="cs" key="COM_DEREG_FAILED">Odregistrace podpůrné knihovny pro kontrolu uživatelského účtu nebyla úspěšná.</string>
+ <string lang="cs" key="TRAVELER_LIMITATIONS_NOTE">Poznámka o přenosném režimu:\n\nMějte na paměti, že operační systém vyžaduje, aby v něm před startem byly registrovány ovladače. Z toho plyne, že ovladač VeraCryptu není (a nemůže být) plně přenositelný (přičemž aplikace VeraCrypt jsou přenositelné úplně, např. nemusí být nainstalovány nebo registrovány v operačním systému). VeraCrypt také vyžaduje ovladač pro možnost šifrování/dešifrování za běhu.</string>
+ <string lang="cs" key="TRAVELER_UAC_NOTE">Pokud se rozhodnete spouštět VeraCrypt v přenosném režimu (oproti spouštění instalované verze VeraCryptu), systém se vás zeptá pokaždé, když se pokusíte VeraCrypt spustit (UAC prompt).\n\nDůvodem je, že pokud spouštíte VeraCrypt v přenosném režimu, program si musí nahrát a spustit ovladač zařízení VeraCrypt. VeraCrypt tento ovladač potřebuje, aby poskytl jasné šifrování/dešifrování za běhu a aby uživatelé bez administrátorských oprávnění nemohli spouštět ovladače zařízení ve Windows. Proto se vás systém zeptá na oprávnění, aby mohl VeraCrypt běžet s administrátorskými oprávněními (UAC prompt).\n\nPokud VeraCrypt nainstalujete na systém (oproti spouštění VeraCryptu v přenosném režimu), systém se vás NEBUDE ptát na povolení ke spuštění VeraCryptu (UAC prompt) pokaždé, když se ho pokusíte spustit.\n\nOpravdu chcete soubory rozbalit?</string>
+ <string lang="cs" key="CONTAINER_ADMIN_WARNING">UPOZORNĚNÍ: Tato instance Průvodce vytvořením svazku má administrátorská oprávnění.\n\nVáš nový svazek může být vytvořen s takovými oprávněními, které vám nedovolí do něj zapisovat, pokud je připojen. Pokud se tomu chcete vyhnout, zavřete tuto instanci Průvodce vytvořením svazku a spusťte nový bez administrátorských oprávnění.\n\nChcete zavřít tuto instanci Průvodce vytvořením svazku?</string>
<string lang="cs" key="CANNOT_DISPLAY_LICENSE">Chyba: Nelze zobrazit licenci.</string>
- <string lang="cs" key="OUTER_VOL_WRITE_PREVENTED">Vnější(!)</string>
+ <string lang="cs" key="OUTER_VOL_WRITE_PREVENTED">Vnější(.)</string>
<string lang="cs" key="DAYS">dnů</string>
<string lang="cs" key="HOURS">hodin</string>
<string lang="cs" key="MINUTES">minut</string>
@@ -928,7 +928,7 @@
<string lang="cs" key="SYS_FAVORITE_VOLUMES_SAVED">Oblíbené systémové svazky byly uloženy.\n\nPro umožnění připojení systémových oblíbených svazků při startu systému vyberte 'Nastavení' &gt; 'Oblíbené systémové svazky' &gt; 'Připojit oblíbené systémové svazky při startu Windows'.</string>
<string lang="cs" key="FAVORITE_ADD_DRIVE_DEV_WARNING">Svazek, který se snažíte přidat do oblíbených, není ani oddíl, ani dynamický svazek. VeraCrypt ho proto nebude moci připojit jako oblíbený, pokud se změní číslo zařízení.</string>
<string lang="cs" key="FAVORITE_ADD_PARTITION_TYPE_WARNING">Svazek, který se snažíte přidat do oblíbených, je oddíl, který Windows nerozpoznaly.\n\nVeraCrypt ho nebude moci připojit jako oblíbený, pokud se změní číslo zařízení. Zadejte takový typ oddílu, který Windows rozpoznají (použijte příkaz SETID v nástroji 'diskpart' ve Windows). Pak přidejte oddíl od oblíbených znovu.</string>
- <string lang="cs" key="FAVORITE_ARRIVAL_MOUNT_BACKGROUND_TASK_ERR">VeraCrypt služba na pozadí je vypnuta nebo je nastavena tak, aby se vypnula, pokud neexistují žádné svazky k připojení (nebo VeraCrypt běží v přenosném módu). To může bránit vašim oblíbeným svazkům, aby byly automaticky připojeny při připojení hostujícího zařízení.\n\nPoznámka: Pro povolení VeraCrypt služby na pozadí, vyberte Nastavení &gt; Předvolby a zaškrtněte 'Povoleno' u 'VeraCrypt služba na pozadí'.</string>
+ <string lang="cs" key="FAVORITE_ARRIVAL_MOUNT_BACKGROUND_TASK_ERR">VeraCrypt služba na pozadí je vypnuta nebo je nastavena tak, aby se vypnula, pokud neexistují žádné svazky k připojení (nebo VeraCrypt běží v přenosném režimu). To může bránit vašim oblíbeným svazkům, aby byly automaticky připojeny při připojení hostujícího zařízení.\n\nPoznámka: Pro povolení VeraCrypt služby na pozadí, vyberte Nastavení &gt; Možnosti a zaškrtněte 'Povoleno' u 'VeraCrypt služba na pozadí'.</string>
<string lang="cs" key="FAVORITE_ARRIVAL_MOUNT_NETWORK_PATH_ERR">Souborový svazek uložený na vzdáleném systému souborů, který je sdílen přes síť, nemůže být automaticky připojen, i když se připojí jeho hostitelské zařízení.</string>
<string lang="cs" key="FAVORITE_ARRIVAL_MOUNT_DEVICE_PATH_ERR">Zařízení zobrazené níže není ani oddíl ani dynamický svazek. Svazek umístěný na tomto zařízení nemůže být automaticky připojen, i když se připojí zařízení samotné.</string>
<string lang="cs" key="FAVORITE_ARRIVAL_MOUNT_PARTITION_TYPE_ERR">Zadejte takový typ oddílu, který Windows rozpoznají (použijte příkaz SETID v nástroji 'diskpart' ve Windows). Pak odstraňte oddíl z oblíbených a přidejte jej znovu. To umožní, aby svazek umístěný na jiném zařízení, mohl být automaticky připojen při připojení zařízení.</string>
@@ -941,16 +941,16 @@
<string lang="cs" key="ENTER_HIDDEN_VOL_PASSWORD">Zadejte heslo pro skrytý svazek</string>
<string lang="cs" key="ENTER_HEADER_BACKUP_PASSWORD">Zadejte heslo pro hlavičku uloženou v záložním souboru</string>
<string lang="cs" key="KEYFILE_CREATED">Souborový klíč byl úspěšně vytvořen.</string>
- <string lang="en" key="KEYFILE_INCORRECT_NUMBER">The number of keyfiles you supplied is invalid.</string>
- <string lang="en" key="KEYFILE_INCORRECT_SIZE">The keyfile size must be comprized between 64 and 1048576 bytes.</string>
- <string lang="en" key="KEYFILE_EMPTY_BASE_NAME">Please enter a name for the keyfile(s) to be generated</string>
- <string lang="en" key="KEYFILE_INVALID_BASE_NAME">The base name of the keyfile(s) is invalid</string>
- <string lang="en" key="KEYFILE_ALREADY_EXISTS">The keyfile '%s' already exists.\nDo you want to overwrite it? The generation process will be stopped if you answer No.</string>
- <string lang="cs" key="HEADER_DAMAGED_AUTO_USED_HEADER_BAK">VAROVÁNÍ: Hlavička tohoto svazku je poškozena! VeraCrypt automaticky použil zálohu hlavičky svazku umístěnou uvnitř svazku.\n\nMěli byste opravit hlavičku pomocí 'Nástroje' &gt; 'Obnovit hlavičku svazku'.</string>
- <string lang="cs" key="VOL_HEADER_BACKED_UP">Záloha hlavičky svazku byla úspěšně vytvořena.\n\nDŮLEŽITÉ: Obnovením hlavičky svazku s použitím této zálohy se také obnoví aktuální heslo pro svazek. Navíc, pokud je/jsou potřeba souborový klíč(e) pro připojení svazku, ten samý souborový klíč/e bude potřeba pro připojení svazku znovu, až bude hlavička opět vytvořena.\n\nVAROVÁNÍ: Tato záloha hlavičky svazku může být použita k obnovení JEN tohoto svazku. Pokud použijete tuto zálohu hlavičky k obnovení hlavičky jiného svazku, budete moci svazek připojit, ale NEBUDETE schopni dešifrovat jakákoliv data uložená na svazku (protože změníte jeho hlavní klíč).</string>
+ <string lang="cs" key="KEYFILE_INCORRECT_NUMBER">Počet poskytnutých souborových klíčů je neplatný.</string>
+ <string lang="cs" key="KEYFILE_INCORRECT_SIZE">Velikost souborových klíčů musí mít hodnotu mezi 64 a 1048576 bajtů.</string>
+ <string lang="cs" key="KEYFILE_EMPTY_BASE_NAME">Prosím, zadejte název pro vygenerovaný souborový klíč</string>
+ <string lang="cs" key="KEYFILE_INVALID_BASE_NAME">Základní název souborového klíče je neplatný</string>
+ <string lang="cs" key="KEYFILE_ALREADY_EXISTS">Souborový klíč '%s' již existuje.\nPřejete si ho přepsat? Jeho vygenerování bude zastavebo, pokud odpovíte 'Ne'.</string>
+ <string lang="cs" key="HEADER_DAMAGED_AUTO_USED_HEADER_BAK">UPOZORNĚNÍ: Hlavička tohoto svazku je poškozena. VeraCrypt automaticky použil zálohu hlavičky svazku umístěnou uvnitř svazku.\n\nMěli byste opravit hlavičku pomocí 'Nástroje' &gt; 'Obnovit hlavičku svazku'.</string>
+ <string lang="cs" key="VOL_HEADER_BACKED_UP">Záloha hlavičky svazku byla úspěšně vytvořena.\n\nDŮLEŽITÉ: Obnovením hlavičky svazku s použitím této zálohy se také obnoví aktuální heslo pro svazek. Navíc, pokud je/jsou potřeba souborový klíč(e) pro připojení svazku, ten samý souborový klíč/e bude potřeba pro připojení svazku znovu, až bude hlavička opět vytvořena.\n\nUPOZORNĚNÍ: Tato záloha hlavičky svazku může být použita k obnovení JEN tohoto svazku. Pokud použijete tuto zálohu hlavičky k obnovení hlavičky jiného svazku, budete moci svazek připojit, ale NEBUDETE schopni dešifrovat jakákoliv data uložená na svazku (protože změníte jeho hlavní klíč).</string>
<string lang="cs" key="VOL_HEADER_RESTORED">Hlavička svazku byla úspěšně obnovena.\n\nDŮLEŽITÉ: Staré heslo mohlo být obnoveno také. Navíc, pokud byl v době zálohy potřeba k připojení svazku souborový klíč(e), stejný souborový klíč(e) bude nyní potřeba opětnému připojení svazku.</string>
<string lang="cs" key="EXTERNAL_VOL_HEADER_BAK_FIRST_INFO">Z bezpečnostních důvodů musíte zadat ke svazku správné heslo (a dodat správné souborové klíče).\n\nPoznámka: Pokud svazek obsahuje skrytý svazek, budete muset nejdříve zadat správné heslo (a dodat správné souborové klíče) k vnějšímu svazku. Pak, pokud zvolíte zazálohovat hlavičku skrytého svazku, budete muset zadat správné heslo (a dodat správné souborové klíče) ke skrytému svazku.</string>
- <string lang="cs" key="CONFIRM_VOL_HEADER_BAK">Jste si jisti, že chcete vytvořit zálohu hlavičky svazku pro %s?\n\nJakmile kliknete na Ano, zadejte jméno souboru pro zálohu hlavičky.\n\nPoznámka: Hlavičky jak standardních, tak skrytých svazků budou pře-šifrovány použitím nového řetězce a uloženy v záložním souboru. Pokud se uvnitř tohoto svazku nenachází žádný skrytý svazek, místo určené pro hlavičku skrytého svazku v záložním souboru bude vyplněno náhodnými daty (k zachování hodnověrnosti popření). Při obnově hlavičky svazku ze záložního souboru budete muset zadat správné heslo (a dodat správné souborové klíče), které bylo platné při vytvoření zálohy hlavičky svazku. Heslo (a souborové klíče) automaticky určí, jaký typ hlavičky svazku se má obnovit, např. standardní nebo skrytý (VeraCrypt zjistí typ pomocí metody pokusu a omylu).</string>
+ <string lang="cs" key="CONFIRM_VOL_HEADER_BAK">Opravdu chcete vytvořit zálohu hlavičky svazku pro %s?\n\nJakmile kliknete na Ano, zadejte jméno souboru pro zálohu hlavičky.\n\nPoznámka: Hlavičky jak standardních, tak skrytých svazků budou pře-šifrovány použitím nového řetězce a uloženy v záložním souboru. Pokud se uvnitř tohoto svazku nenachází žádný skrytý svazek, místo určené pro hlavičku skrytého svazku v záložním souboru bude vyplněno náhodnými daty (k zachování hodnověrnosti popření). Při obnově hlavičky svazku ze záložního souboru budete muset zadat správné heslo (a dodat správné souborové klíče), které bylo platné při vytvoření zálohy hlavičky svazku. Heslo (a souborové klíče) automaticky určí, jaký typ hlavičky svazku se má obnovit, např. standardní nebo skrytý (VeraCrypt zjistí typ pomocí metody pokusu a omylu).</string>
<string lang="cs" key="CONFIRM_VOL_HEADER_RESTORE">Opravdu chcete obnovit hlavičku svazku pro %s?\n\nUPOZORNĚNÍ: Obnovením hlavičky svazku obnovíte také jeho heslo, které bylo platné v době vytvoření zálohy. Pokud byl potřeba souborový klíč(e) k připojení svazku v době vytvoření zálohy, stejný souborový klíč(e) bude potřeba k opětovnému připojení svazku po obnovení hlavičky svazku.\n\nJakmile kliknete Ano, zvolte záložní soubor hlavičky.</string>
<string lang="cs" key="DOES_VOLUME_CONTAIN_HIDDEN">Obsahuje svazek skrytý svazek?</string>
<string lang="cs" key="VOLUME_CONTAINS_HIDDEN">Svazek obsahuje skrytý svazek</string>
@@ -965,11 +965,11 @@
<string lang="cs" key="RESCUE_DISK_NON_WIZARD_CREATION_SELECT_PATH">Po kliknutí na OK zvolíte soubor pro nový obraz Záchranného disku VeraCrypt a místo, kam ho chcete uložit.</string>
<string lang="cs" key="RESCUE_DISK_NON_WIZARD_CREATION_BURN">Obraz Záchranného disku byl vytvořen a uložen v tomto souboru:\n%s\n\nNyní musíte vypálit obraz Záchranného disku na CD nebo DVD.\n\nDŮLEŽÍTÉ: Soubor musí být na CD/DVD zapsán jako obraz disku (ne jako samostatný soubor). Pro více informací, viz dokumentace k vašemu CD/DVD vypalovacímu softwaru.\n\nAž Záchranný disk vypálíte, vyberte 'Systém' &gt; 'Ověřit záchranný disk', abyste zjistili, zda byl správně vypálen.</string>
<string lang="cs" key="RESCUE_DISK_NON_WIZARD_CREATION_WIN_ISOBURN">Obraz Záchranného disku byl vytvořen a uložen v tomto souboru:\n%s\n\nNyní musíte vypálit obraz Záchranného disku na CD nebo DVD.\n\nChcete nyní spustit program Microsoft Windows Disc Image Burner?\n\nPoznámka: Až Záchranný disk vypálíte, vyberte 'Systém' &gt; 'Ověřit záchranný disk', abyste zjistili, zda byl správně vypálen.</string>
- <string lang="cs" key="RESCUE_DISK_NON_WIZARD_CHECK_INSERT">Vložte, prosím, Záchranný disk VeraCrypt a klikněte OK pro jeho ověření.</string>
+ <string lang="cs" key="RESCUE_DISK_NON_WIZARD_CHECK_INSERT">Vložte, prosím, Záchranný disk VeraCrypt do vaší CD/DVD mechaniky a klikněte OK pro jeho ověření.</string>
<string lang="cs" key="RESCUE_DISK_NON_WIZARD_CHECK_PASSED">Záchranný disk VeraCrypt byl úspěšně ověřen.</string>
<string lang="cs" key="RESCUE_DISK_NON_WIZARD_CHECK_FAILED">Nelze ověřit, zda byl Záchranný disk správně vypálen.\n\nPokud jste Záchranný disk vypálili, vložte ho prosím znovu do CD/DVD mechaniky a zkuste to znovu. Pokud to nepomůže, zkuste jiný vypalovací software a/nebo médium.\n\nPokusíte-li se ověřit Záchranný disk VeraCrypt vytvořený pro jiný hlavní klíč, heslo apod., mějte na vědomí, že takovéto ověřování Záchranného disku selže vždy. Pro vytvoření nového Záchranného disku, který je plně kompatibilní s aktuální konfigurací, vyberte 'Systém' &gt; 'Vytvořit Záchranný disk'.</string>
- <string lang="en" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">The VeraCrypt Rescue Disk image has been successfully verified.</string>
- <string lang="en" key="RESCUE_DISK_ISO_IMAGE_CHECK_FAILED">The Rescue Disk image verification failed.\n\nIf you attempted to verify a VeraCrypt Rescue Disk image created for a different master key, password, salt, etc., please note that such Rescue Disk image will always fail this verification. To create a new Rescue Disk image fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
+ <string lang="cs" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">Obraz se záchranným diskem VeraCrypt byl úspěšně ověřen.</string>
+ <string lang="cs" key="RESCUE_DISK_ISO_IMAGE_CHECK_FAILED">Ověření obrazu se záchranným diskem VeraCrypt nebylo úspěšné.\n\nPokud se pokoušíte ověřit záchranný disk vytvořený pro jiný hlavní klíč, heslo, atd., uvědomte si, že takový záchranný disk vždy neprojde ověřením. Pro vytvoření nového záchraného disku plně kompatibilního se současnou konfigurací, vyberte možnost 'Systém' > 'Vytvořit záchranný disk'.</string>
<string lang="cs" key="ERROR_CREATING_RESCUE_DISK">Chyba při vytváření Záchranného disku VeraCrypt.</string>
<string lang="cs" key="CANNOT_CREATE_RESCUE_DISK_ON_HIDDEN_OS">Záchranný disk VeraCrypt nemůže být vytvořen, pokud běží skrytý operační systém.\n\nPro vytvoření Záchranného disku VeraCrypt nabootujte klamný operační systém a vyberte 'Systém' &gt; 'Vytvořit Záchranný disk'.</string>
<string lang="cs" key="RESCUE_DISK_CHECK_FAILED">Nelze ověřit, zda byl Záchranný disk správně vypálen.\n\nPokud jste Záchranný disk vypálili, vysuňte a znovu vložte CD/DVD; pak klikněte na Další a zkuste to znovu. Pokud to nepomůže, zkuste prosím jiné médium%s.\n\nPokud jste Záchranný disk ještě nevypálili, učiňte tak a klikněte na Další.\n\nPokud jste se pokusili ověřit VeraCrypt záchranný disk, který byl vytvořen ještě před tím, než jste spustili tohoto průvodce, vězte, že takový Záchranný disk nemůže být použit, protože byl vytvořen pro jiný hlavní klíč. Musíte vypálit nově vygenerovaný Záchranný disk.</string>
@@ -991,25 +991,25 @@
<string lang="cs" key="UISTR_DISABLED">Vypnuto</string>
<string lang="cs" key="DIGIT_ONE">1</string>
<string lang="cs" key="TWO_OR_MORE">2 a více</string>
- <string lang="cs" key="MODE_OF_OPERATION">Operační mód</string>
+ <string lang="cs" key="MODE_OF_OPERATION">Operační režim</string>
<string lang="cs" key="LABEL_ITEM">Jmenovka: </string>
<string lang="cs" key="SIZE_ITEM">Velikost: </string>
<string lang="cs" key="PATH_ITEM">Cesta: </string>
<string lang="cs" key="DRIVE_LETTER_ITEM">Písmeno jednotky: </string>
<string lang="cs" key="UNSUPPORTED_CHARS_IN_PWD">Chyba: Heslo musí obsahovat jen ASCII znaky.\n\nNe-ASCII znaky v hesle mohou způsobit nemožnost připojení svazku při změně vaší systémové konfigurace.\n\nPovoleny jsou následující znaky:\n\n ! " # $ % &amp; ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~</string>
<string lang="cs" key="UNSUPPORTED_CHARS_IN_PWD_RECOM">Upozornění: Heslo obsahuje ne-ASCII znaky. To může způsobit nemožnost připojení svazku při změně vaší systémové konfigurace.\n\nMěli byste zaměnit všechny ne-ASCII znaky v hesle za ASCII znaky. Klikněte 'Svazky' -&gt; 'Změnit heslo svazku'.\n\nToto jsou ASCII znaky:\n\n ! " # $ % &amp; ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~</string>
- <string lang="cs" key="EXE_FILE_EXTENSION_CONFIRM">VAROVÁNÍ: Důrazně doporučujeme, abyste se vyhnuli souborům s příponami spustitelných souborů (např. .exe, .sys, nebo .dll) a ostatním stejně problematickým příponám. Použití takovýchto přípon způsobuje, že Windows a antivirové programy ruší souborový svazek, což nepříznivě ovlivňuje výkonnost svazku a může také způsobit další závažné problémy.\n\nDůrazně doporučujeme, abyste příponu odstranili nebo ji změnili (například na '.hc').\n\nJste si jisti, že chcete použít problematickou příponu souboru?</string>
- <string lang="cs" key="EXE_FILE_EXTENSION_MOUNT_WARNING">VAROVÁNÍ: Tento souborový svazek má příponu souborů, které se používají jako spustitelné (např. .exe, .sys, or .dll) nebo má jinou problematickou příponu. Velmi pravděpodobně to způsobí, že Windows a antivirové programy budou rušit souborový svazek, což nepříznivě ovlivní výkonnost svazku a může také způsobit další závažné problémy.\n\nDůrazně doporučujeme, abyste příponu svazku po odpojení odstranili nebo ji změnili (např. na '.hc').</string>
+ <string lang="cs" key="EXE_FILE_EXTENSION_CONFIRM">UPOZORNĚNÍ: Důrazně doporučujeme, abyste se vyhnuli souborům s příponami spustitelných souborů (např. .exe, .sys, nebo .dll) a ostatním stejně problematickým příponám. Použití takovýchto přípon způsobuje, že Windows a antivirové programy ruší souborový svazek, což nepříznivě ovlivňuje výkonnost svazku a může také způsobit další závažné problémy.\n\nDůrazně doporučujeme, abyste příponu odstranili nebo ji změnili (například na '.hc').\n\nOpravdu chcete použít problematickou příponu souboru?</string>
+ <string lang="cs" key="EXE_FILE_EXTENSION_MOUNT_WARNING">UPOZORNĚNÍ: Tento souborový svazek má příponu souborů, které se používají jako spustitelné (např. .exe, .sys, or .dll) nebo má jinou problematickou příponu. Velmi pravděpodobně to způsobí, že Windows a antivirové programy budou rušit souborový svazek, což nepříznivě ovlivní výkonnost svazku a může také způsobit další závažné problémy.\n\nDůrazně doporučujeme, abyste příponu svazku po odpojení odstranili nebo ji změnili (např. na '.hc').</string>
<string lang="cs" key="HOMEPAGE">Domovská stránka</string>
- <string lang="cs" key="LARGE_IDE_WARNING_XP">UPOZORNĚNÍ: Zdá se, že jste nenainstalovali žádný Service Pack ve vaší instalaci Windows. Neměli byst zapisovat na IDE disky větší než 128 GB v systému Windows XP, ve kterém jste nenainstalovali Service Pack 1 nebo novější! Pokud tak učiníte, data na disku (bez ohledu na to, zda jde o svazek VeraCrypt nebo ne) se mohou poškodit. Jde o omezení Windows, ne chyba programu VeraCrypt.</string>
- <string lang="cs" key="LARGE_IDE_WARNING_2K">UPOZORNĚNÍ: Zdá se, že jste nenainstalovali Service Pack 3 nebo novější ve vaší instalaci Windows. Neměli byste zapisovat na disky větší než 128 GB v systému Windows 2000, ve kterém jste nenainstalovali Service Pack 3 nebo novější! Pokud tak učiníte, data na disku (bez ohledu na to, zda jde o svazek VeraCrypt nebo ne) se mohou poškodit. Jde o omezení Windows, ne chyba programu VeraCrypt.\n\nPoznámka: Možná také bude potřeba zapnout podporu 48-bit LBA v registrech; pro více informací viz http://support.microsoft.com/kb/305098/EN-US</string>
- <string lang="cs" key="LARGE_IDE_WARNING_2K_REGISTRY">VAROVÁNI: Podpora 48-bit LBA ATAPI je na vašem systému zakázána. Proto byste neměli zapisovat na IDE disky větší než 128 GB! Pokud tak učiníte, data na disku (ať už je to VeraCrypt svazek nebo ne) se mohou poškodit. Jde o omezení Windows, ne programu VeraCrypt.\n\nPro povolení podpory 48-bit LBA, přidejte hodnotu 'EnableBigLba' do registrů v registry klíči HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\atapi\\Parameters a udejte mu hodnotu 1.\n\nPro více informací viz http://support.microsoft.com/kb/305098</string>
+ <string lang="cs" key="LARGE_IDE_WARNING_XP">UPOZORNĚNÍ: Zdá se, že jste nenainstalovali žádný Service Pack ve vaší instalaci Windows. Neměli byst zapisovat na IDE disky větší než 128 GB v systému Windows XP, ve kterém jste nenainstalovali Service Pack 1 nebo novější. Pokud tak učiníte, data na disku (bez ohledu na to, zda jde o svazek VeraCrypt nebo ne) se mohou poškodit. Jde o omezení Windows, ne chyba programu VeraCrypt.</string>
+ <string lang="cs" key="LARGE_IDE_WARNING_2K">UPOZORNĚNÍ: Zdá se, že jste nenainstalovali Service Pack 3 nebo novější ve vaší instalaci Windows. Neměli byste zapisovat na disky větší než 128 GB v systému Windows 2000, ve kterém jste nenainstalovali Service Pack 3 nebo novější. Pokud tak učiníte, data na disku (bez ohledu na to, zda jde o svazek VeraCrypt nebo ne) se mohou poškodit. Jde o omezení Windows, ne chyba programu VeraCrypt.\n\nPoznámka: Možná také bude potřeba zapnout podporu 48-bit LBA v registrech; pro více informací viz http://support.microsoft.com/kb/305098/EN-US</string>
+ <string lang="cs" key="LARGE_IDE_WARNING_2K_REGISTRY">VAROVÁNI: Podpora 48-bit LBA ATAPI je na vašem systému zakázána. Proto byste neměli zapisovat na IDE disky větší než 128 GB. Pokud tak učiníte, data na disku (ať už je to VeraCrypt svazek nebo ne) se mohou poškodit. Jde o omezení Windows, ne programu VeraCrypt.\n\nPro povolení podpory 48-bit LBA, přidejte hodnotu 'EnableBigLba' do registrů v registry klíči HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\atapi\\Parameters a udejte mu hodnotu 1.\n\nPro více informací viz http://support.microsoft.com/kb/305098</string>
<string lang="cs" key="VOLUME_TOO_LARGE_FOR_FAT32">Chyba: Soubory větší než 4 GB nemohou být uloženy na systému souborů FAT32. Proto nemohou být souborové svazky VeraCrypt - uložené na systému souborů FAT32 - větší než 4 GB.\n\nPokud potřebujete větší svazek, vytvořte ho na systému souborů NTFS (nebo, používáte-li Windows Vista SP1 a pozdější, na exFAT souborovém systému) nebo místo vytváření souborového svazku zašifrujte celý oddíl nebo zařízení.</string>
- <string lang="cs" key="VOLUME_TOO_LARGE_FOR_WINXP">Varování: Windows XP nepodporují soubory větší než 2048 GB (ohlásí, že "Není dostatek volného místa"). Z tohoto důvodu nemůžete pod Windows XP vytvořit souborový svazek VeraCrypt větší než 2048 GB.\n\nStále ale můžete ve Windows XP zašifrovat celý disk nebo vytvořit VeraCrypt svazek umístěný na oddílu, který bude větší než 2048 GB.</string>
- <string lang="cs" key="FREE_SPACE_FOR_WRITING_TO_OUTER_VOLUME">UPOZORNĚNÍ: Pokud budete chtít v budoucnu přidávat více dat/souborů na vnější svazek, měli byste zvážit, zda nevybrat menší velikost skrytého svazku.\n\nJste si jisti, že chcete pokračovat se zadanou velikostí?</string>
+ <string lang="cs" key="VOLUME_TOO_LARGE_FOR_WINXP">UPOZORNĚNÍ: Windows XP nepodporují soubory větší než 2048 GB (ohlásí, že "Není dostatek volného místa"). Z tohoto důvodu nemůžete pod Windows XP vytvořit souborový svazek VeraCrypt větší než 2048 GB.\n\nStále ale můžete ve Windows XP zašifrovat celý disk nebo vytvořit VeraCrypt svazek umístěný na oddílu, který bude větší než 2048 GB.</string>
+ <string lang="cs" key="FREE_SPACE_FOR_WRITING_TO_OUTER_VOLUME">UPOZORNĚNÍ: Pokud budete chtít v budoucnu přidávat více dat/souborů na vnější svazek, měli byste zvážit, zda nevybrat menší velikost skrytého svazku.\n\nOpravdu chcete pokračovat se zadanou velikostí?</string>
<string lang="cs" key="NO_VOLUME_SELECTED">Není vybrán žádný svazek.\n\nKlikněte 'Vybrat zařízení' nebo 'Vybrat soubor' pro výběr svazku VeraCrypt.</string>
<string lang="cs" key="NO_SYSENC_PARTITION_SELECTED">Nebyl vybrán žádný oddíl.\n\nKlikněte 'Vybrat zařízení' pro výběr odpojeného oddílu, který běžně vyžaduje před-bootovací autentifikaci (např. oddíl umístěný na zašifrovaném systémovém disku jiného operačního systému, který neběží nebo zašifrovaný systémový oddíl jiného operačního systému).\n\nPoznámka: Vybraný oddíl bude připojen jako běžný svazek VeraCrypt bez před-bootovací autentifikace. To je vhodné např. pro zálohování nebo opravy.</string>
- <string lang="cs" key="CONFIRM_SAVE_DEFAULT_KEYFILES">VAROVÁNÍ: Jsou-li zadány a povoleny předvolené souborové klíče, svazky, které nebudou tyto souborové klíče používat, nebude možné připojit. Proto jakmile povolíte předvolené souborové klíče, pamatujte na zrušení volby 'Používat souborové klíče' (pod místem, kde se zadává heslo) kdykoliv budete používat takové svazky.\n\nJste si jisti, že chcete uložit vybrané souborové klíče/cesty jako předvolené?</string>
+ <string lang="cs" key="CONFIRM_SAVE_DEFAULT_KEYFILES">UPOZORNĚNÍ: Jsou-li zadány a povoleny výchozí souborové klíče, svazky, které nebudou tyto souborové klíče používat, nebude možné připojit. Proto jakmile povolíte výchozí souborové klíče, pamatujte na zrušení možnosti 'Používat souborové klíče' (pod místem, kde se zadává heslo) kdykoliv budete používat takové svazky.\n\nOpravdu chcete uložit vybrané souborové klíče/cesty jako výchozí?</string>
<string lang="cs" key="HK_AUTOMOUNT_DEVICES">Autom. připojit zařízení</string>
<string lang="cs" key="HK_DISMOUNT_ALL">Odpojit vše</string>
<string lang="cs" key="HK_WIPE_CACHE">Vyčistit mezipaměť</string>
@@ -1023,7 +1023,7 @@
<string lang="cs" key="SHORTCUT">Klávesová zkratka</string>
<string lang="cs" key="CANNOT_USE_RESERVED_KEY">Chyba: Tato klávesová zkratka je rezervována. Vyberte prosím jinou klávesovou zkratku.</string>
<string lang="cs" key="SHORTCUT_ALREADY_IN_USE">Chyba: Klávesová zkratka je již používána.</string>
- <string lang="cs" key="HOTKEY_REGISTRATION_ERROR">VAROVÁNÍ: Jedna nebo více VeraCrypt systémových klávesových zkratek nebude fungovat!\n\nUjistěte se, že další aplikace a operační systém nepoužívají stejné klávesové zkratky jako VeraCrypt.</string>
+ <string lang="cs" key="HOTKEY_REGISTRATION_ERROR">UPOZORNĚNÍ: Jedna nebo více VeraCrypt systémových klávesových zkratek nebude fungovat.\n\nUjistěte se, že další aplikace a operační systém nepoužívají stejné klávesové zkratky jako VeraCrypt.</string>
<string lang="cs" key="PAGING_FILE_CREATION_PREVENTED">Došlo k zabránění vytvoření stránkovacího souboru.\n\nKvůli problémům ve Windows nemohou být stránkovací soubory umístěny na nesystémových svazcích VeraCrypt (včetně oblíbených systémových svazků). VeraCrypt podporuje vytvoření stránkovacích souborů pouze na nezašifrovaných systémových oddílech/discích.</string>
<string lang="cs" key="SYS_ENC_HIBERNATION_PREVENTED">Chyba nebo nekompatibilita zabraňuje programu VeraCrypt zašifrovat hibernační soubor (slouží k uspání počítače). Uspávací režim byl proto zamezen.\n\nPoznámka: Když počítač přejde do režimu spánku (nebo se přepne do režimu úspory energie), obsah operační paměti je zapsán do hibernačního souboru uloženém na disku. VeraCrypt by nemohl zabránit uložení nezašifrovaných šifrovacích klíčů a obsahu citlivých souborů do souboru pro spací režim.</string>
<string lang="cs" key="HIDDEN_OS_HIBERNATION_PREVENTED">Hibernaci bylo zabráněno.\n\nVeraCrypt nepodporuje hibernaci na skrytých operačních systémech, které používají dodatečný oddíl pro bootování. Bootovací oddíl je sdílen jak klamným, tak skrytým systémem. Aby se předešlo úniku dat a problémům spojených s hibernací, VeraCrypt musí zabránit skrytému systému v zapisování do sdíleného bootovacího oddílu a v hibernování.</string>
@@ -1031,37 +1031,37 @@
<string lang="cs" key="MOUNTED_VOLUMES_DISMOUNTED">Svazky VeraCrypt byly odpojeny.</string>
<string lang="cs" key="VOLUMES_DISMOUNTED_CACHE_WIPED">Svazky VeraCrypt byly odpojeny a mezipaměť hesla byla pročištěna.</string>
<string lang="cs" key="SUCCESSFULLY_DISMOUNTED">Úspěšně odpojeno</string>
- <string lang="cs" key="CONFIRM_BACKGROUND_TASK_DISABLED">VAROVÁNÍ: Pokud je vypnuta VeraCrypt služba na pozadí, následující funkce budou vypnuty:\n\n1) Zkratkové klávesy\n2) Automatické odpojení (např. při odhlášení, nevratném odpojení zařízení, časové prodlevě apod)\n3) Automatické připojení oblíbených svazků\n4) Upozornění (např. při předejití poškození skrytého svazku)\n5) Ikona na hlavní liště\n\nPoznámka: Službu na pozadí můžete kdykoliv vypnout kliknutím pravým tlačítkem myši na ikonu VeraCryptu vpravo dole a vyberte 'Konec'.\n\nJste si jisti, že chcete natrvalo vypnout VeraCrypt službu na pozadí?</string>
- <string lang="cs" key="CONFIRM_NO_FORCED_AUTODISMOUNT">UPOZORNĚNÍ: Pokud je tato volba vypnuta, svazky obsahující otevřené soubory/adresáře nebude možné automaticky odpojit.\n\nJste si jisti, že chcete tuto volbu vypnout?</string>
- <string lang="cs" key="WARN_PREF_AUTO_DISMOUNT">UPOZORNĚNÍ: Svazky obsahující otevřené soubory/adresáře NEBUDOU automaticky odpojeny.\n\nAbyste tomu zabránili, povolte následující volbu v tomto dialogovém okně: 'Vynutit automatické odpojení, i když svazek obsahuje otevřené soubory nebo adresáře'</string>
- <string lang="cs" key="WARN_PREF_AUTO_DISMOUNT_ON_POWER">VAROVÁNÍ: Pokud je v notebooku slabá baterie, Windows mohou při přechodu do spořícího režimu zapomenout poslat vhodnou zprávu běžícím aplikacím. V takových případech se může stát, že selže automatické odpojení VeraCrypt svazků.</string>
+ <string lang="cs" key="CONFIRM_BACKGROUND_TASK_DISABLED">UPOZORNĚNÍ: Pokud je vypnuta VeraCrypt služba na pozadí, následující funkce budou vypnuty:\n\n1) Zkratkové klávesy\n2) Automatické odpojení (např. při odhlášení, nevratném odpojení zařízení, časové prodlevě apod)\n3) Automatické připojení oblíbených svazků\n4) Upozornění (např. při předejití poškození skrytého svazku)\n5) Ikona na hlavní liště\n\nPoznámka: Službu na pozadí můžete kdykoliv vypnout kliknutím pravým tlačítkem myši na ikonu VeraCryptu vpravo dole a vyberte 'Konec'.\n\nOpravdu chcete natrvalo vypnout VeraCrypt službu na pozadí?</string>
+ <string lang="cs" key="CONFIRM_NO_FORCED_AUTODISMOUNT">UPOZORNĚNÍ: Pokud je tato volba vypnuta, svazky obsahující otevřené soubory/adresáře nebude možné automaticky odpojit.\n\nOpravdu chcete tuto možnost vypnout?</string>
+ <string lang="cs" key="WARN_PREF_AUTO_DISMOUNT">UPOZORNĚNÍ: Svazky obsahující otevřené soubory/adresáře NEBUDOU automaticky odpojeny.\n\nAbyste tomu zabránili, povolte následující možnost v tomto dialogovém okně: 'Vynutit automatické odpojení, i když svazek obsahuje otevřené soubory nebo adresáře'</string>
+ <string lang="cs" key="WARN_PREF_AUTO_DISMOUNT_ON_POWER">UPOZORNĚNÍ: Pokud je v notebooku slabá baterie, Windows mohou při přechodu do spořícího režimu zapomenout poslat vhodnou zprávu běžícím aplikacím. V takových případech se může stát, že selže automatické odpojení VeraCrypt svazků.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_RESUME_PROMPT">Naplánovali jste proces zašifrování oddílu/svazku. Proces nebyl ještě dokončen.\n\nChcete nyní proces obnovit?</string>
<string lang="cs" key="SYSTEM_ENCRYPTION_RESUME_PROMPT">Naplánovali jste proces šifrování nebo dešifrování systémového oddílu/disku. Proces ještě nebyl dokončen.\n\nChcete začít (navázat) v procesu nyní?</string>
<string lang="cs" key="ASK_NONSYS_INPLACE_ENC_NOTIFICATION_REMOVAL">Chcete být upozorněn, zda chcete pokračovat v naplánovaném procesu, který má zašifrovat nesystémové oddíly/svazky?</string>
<string lang="cs" key="KEEP_PROMPTING_ME">Ano, i nadále mě upozorňuj</string>
<string lang="cs" key="DO_NOT_PROMPT_ME">Ne, již mě neupozorňuj</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_NOTIFICATION_REMOVAL_NOTE">DŮLEŽITÉ: Mějte na paměti, že proces šifrování na nesystémových oddílech/svazcích můžete obnovit z hlavní obrazovky VeraCryptu přes 'Svazky' &gt; 'Obnovit přerušený proces'.</string>
- <string lang="cs" key="SYSTEM_ENCRYPTION_SCHEDULED_BUT_PBA_FAILED">Naplánovali jste proces šifrování nebo dešifrování systémového oddílu/disku. Před-bootovací autentifikace ale selhala (nebo byla vynechána).\n\nPoznámka: Pokud jste dešifrovali systémový oddíl/disk v před-bootovacím prostředí, bude možná nutné dokončit tento proces přes 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk' z hlavního menu okna programu VeraCrypt.</string>
- <string lang="cs" key="CONFIRM_EXIT">VAROVÁNÍ: Pokud bude nyní VeraCrypt ukončen, následující funkce budou vypnuty:\n\n1) Zkratkové klávesy\n2) Automatické odpojení (např. při odhlášení, nevratném odpojení zařízení, časové prodlevě apod)\n3) Automatické připojení oblíbených svazků\n4) Upozornění (např. při předejití poškození skrytého svazku)\n\nPoznámka: Pokud si nepřejete, aby byl VeraCrypt spuštěn na pozadí, vypněte VeraCrypt službu na pozadí v Předvolbách (a pokud je to nutné, vypněte i automatický start VeraCryptu, také v Předvolbách).\n\nChcete nyní opravdu ukončit VeraCrypt?</string>
+ <string lang="cs" key="SYSTEM_ENCRYPTION_SCHEDULED_BUT_PBA_FAILED">Naplánovali jste proces šifrování nebo dešifrování systémového oddílu/disku. Před-bootovací autentifikace ale nebyla úspěšná (nebo byla vynechána).\n\nPoznámka: Pokud jste dešifrovali systémový oddíl/disk v před-bootovacím prostředí, bude možná nutné dokončit tento proces přes 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk' z hlavní nabídky okna programu VeraCrypt.</string>
+ <string lang="cs" key="CONFIRM_EXIT">UPOZORNĚNÍ: Pokud bude nyní VeraCrypt ukončen, následující funkce budou vypnuty:\n\n1) Zkratkové klávesy\n2) Automatické odpojení (např. při odhlášení, nevratném odpojení zařízení, časové prodlevě apod)\n3) Automatické připojení oblíbených svazků\n4) Upozornění (např. při předejití poškození skrytého svazku)\n\nPoznámka: Pokud si nepřejete, aby byl VeraCrypt spuštěn na pozadí, vypněte VeraCrypt službu na pozadí v možnostech (a pokud je to nutné, vypněte i automatické spuštění VeraCryptu).\n\nChcete nyní opravdu ukončit VeraCrypt?</string>
<string lang="cs" key="CONFIRM_EXIT_UNIVERSAL">Ukončit?</string>
<string lang="cs" key="CHOOSE_ENCRYPT_OR_DECRYPT">VeraCrypt nemá dostatek informací, aby určil, zda má šifrovat nebo dešifrovat.</string>
<string lang="cs" key="CHOOSE_ENCRYPT_OR_DECRYPT_FINALIZE_DECRYPT_NOTE">VeraCrypt nemá dostatečné informace pro stanovení, zda šifrovat nebo dešifrovat.\n\nPoznámka: Pokud jste dešifrovali systémový oddíl/disk v před-bootovacím prostředí, bude možná nutné dokončit proces kliknutím na Dešifrovat.</string>
- <string lang="en" key="NONSYS_INPLACE_ENC_REVERSE_INFO">Note: When you are encrypting a non-system partition/volume in place and an error persistently prevents you from finishing the process, you will not be able to mount the volume (and access data stored on it) until you entirely DECRYPT the volume (i.e. reverse the process).\n\nIf you need to do so, follow these steps:\n1) Exit this wizard.\n2) In the main VeraCrypt window, select 'Volumes' &gt; 'Resume Interrupted Process'.\n3) Select 'Decrypt'.</string>
+ <string lang="cs" key="NONSYS_INPLACE_ENC_REVERSE_INFO">Poznámka: pokud se pokoušíte dešifrovat 'na-místě' nesystémový oddíl/svazek a neustále vám chyba brání v dokončení procesu, nebude vám umožněno připojit svazek (a přistupovat k datům na něm uloženým), dokud úplně nedešifrujete svazek (tzn. obrátit požadovanou akci).\n\nChcete-li to tak udělat, následujte tyto kroky:\n1) Ukončete průvodce.\n2) V hlavním okně programu vyberte položku 'Svazky' > 'Obnovit přerušený proces'.\n3) Vyberte položku 'Dešifrovat'.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_DEFER_CONFIRM">Chcete přerušit a odložit proces šifrování oddílu/svazku?\n\nPoznámka: Vězte, že svazek nemůže být připojen, dokud nebude úplně zašifrován. Proces šifrování budete moci obnovit, naváže tam, kde naposledy skončil. Můžete tak učinit přes lištu v hlavním okně VeraCryptu - 'Svazky' &gt; 'Obnovit přerušený proces'.</string>
- <string lang="cs" key="SYSTEM_ENCRYPTION_DEFER_CONFIRM">Chcete přerušit a odložit proces šifrování systémového oddílu/disku?\n\nV procesu budete moci pokračovat z místa, kde byl zastaven. Můžete tak učinit kliknutím na 'Systém' &gt; 'Obnovit přerušený proces' z hlavního menu v okně programu VeraCrypt. Chcete-li trvale ukončit nebo vrátit proces šifrování, vyberte 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk'.</string>
- <string lang="cs" key="SYSTEM_DECRYPTION_DEFER_CONFIRM">Chcete přerušit a odložit proces dešifrování systémového oddílu/disku?\n\nV procesu budete moci pokračovat z místa, kde byl zastaven. Můžete tak učinit kliknutím na 'Systém' &gt; 'Obnovit přerušený proces' z hlavního menu v okně programu VeraCrypt. Chcete-li zvrátit proces dešifrování (a začít šifrovat) vyberte 'Systém' &gt; 'Zašifrovat systémový oddíl/disk'.</string>
+ <string lang="cs" key="SYSTEM_ENCRYPTION_DEFER_CONFIRM">Chcete přerušit a odložit proces šifrování systémového oddílu/disku?\n\nV procesu budete moci pokračovat z místa, kde byl zastaven. Můžete tak učinit kliknutím na 'Systém' &gt; 'Obnovit přerušený proces' z hlavní nabídky v okně programu VeraCrypt. Chcete-li trvale ukončit nebo vrátit proces šifrování, vyberte 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk'.</string>
+ <string lang="cs" key="SYSTEM_DECRYPTION_DEFER_CONFIRM">Chcete přerušit a odložit proces dešifrování systémového oddílu/disku?\n\nV procesu budete moci pokračovat z místa, kde byl zastaven. Můžete tak učinit kliknutím na 'Systém' &gt; 'Obnovit přerušený proces' z hlavní nabídky v okně programu VeraCrypt. Chcete-li zvrátit proces dešifrování (a začít šifrovat) vyberte 'Systém' &gt; 'Zašifrovat systémový oddíl/disk'.</string>
<string lang="cs" key="FAILED_TO_INTERRUPT_SYSTEM_ENCRYPTION">Chyba: Nepodařilo se přerušit proces šifrování/dešifrování systémového oddílu/disku.</string>
<string lang="cs" key="FAILED_TO_INTERRUPT_WIPING">Chyba: Proces čištění nemohl být přerušen.</string>
<string lang="cs" key="FAILED_TO_RESUME_SYSTEM_ENCRYPTION">Chyba: Nepodařilo se pokračovat v procesu šifrování/dešifrování systémového oddílu/disku.</string>
<string lang="cs" key="FAILED_TO_START_WIPING">Chyba: Nepodařilo se spustit proces čištění.</string>
<string lang="cs" key="INCONSISTENCY_RESOLVED">Nekonzistence vyřešena.\n\n\n(Pokud chcete ohlásit chybu ve spojitosti s touto událostí, přiložte prosím tuto technickou informaci do zprávy o chybě: %hs)</string>
<string lang="cs" key="UNEXPECTED_STATE">Chyba: Neočekávaný stav.\n\n\n(Pokud budete chtít nahlásit chybu spojenou s tímto problémem, nezapomeňte do zprávy přiložit následující technické informace:\n%hs)</string>
- <string lang="en" key="NO_SYS_ENC_PROCESS_TO_RESUME">There is no interrupted process of encryption/decryption of the system partition/drive to resume.\n\nNote: If you want to resume an interrupted process of encryption/decryption of a non-system partition/volume, select 'Volumes' &gt; 'Resume Interrupted Process'.</string>
+ <string lang="cs" key="NO_SYS_ENC_PROCESS_TO_RESUME">Nevyskytuje se zde žádná přerušená akce šifrování/dešifrování systémového odddílu/disku.\n\nPoznámka: chcete-li obnovit přerušený proces šifrování/dešifrování nesystémového oddílu/svazku, vyberte možnost 'Svazky' > 'Obnovit přerušený proces'.</string>
<string lang="cs" key="HIDVOL_PROT_BKG_TASK_WARNING">UPOZORNĚNÍ: VeraCrypt služba na pozadí je vypnuta. Po ukončení programu VeraCrypt nebudete upozorněni, zda bylo zabráněno poškození skrytého svazku.\n\nPoznámka: Službu na pozadí můžete kdykoliv zavřít kliknutím pravého tlačítka myši na ikonu programu VeraCrypt v pravém dolním rohu a vyberte 'Konec'.\n\nPovolit VeraCrypt službu na pozadí?</string>
<string lang="cs" key="LANG_PACK_VERSION">Verze jazykového balíčku: %s</string>
<string lang="cs" key="CHECKING_FS">Kontroluji systém souborů na svazku VeraCrypt připojeném jako %s…</string>
<string lang="cs" key="REPAIRING_FS">Pokouším se opravit souborový systém na svazku VeraCrypt připojeném jako %s…</string>
- <string lang="cs" key="WARN_64_BIT_BLOCK_CIPHER">Varování: Tento svazek je zašifrováno odkazovaným šifrovacím algoritmem.\n\nVšechny 64-bit-blokové šifrovací algoritmy (např. Blowfish, CAST-128 nebo Triple DES) jsou neschválené. Tento svazek bude možné připojit použitím budoucí verze programu VeraCrypt. Nicméně nebudou žádná další vylepšení těchto odkazovaných šifrovacích algoritmů. Doporučujeme vám vytvořit nový VeraCrypt svazek zašifrovaný 128-bit-blokovým šifrovacím algoritmem (např. AES, Serpent, Twofish, apod.) a přesuňte všechny souboru z tohoto svazku do nového.</string>
+ <string lang="cs" key="WARN_64_BIT_BLOCK_CIPHER">UPOZORNĚNÍ: Tento svazek je zašifrováno odkazovaným šifrovacím algoritmem.\n\nVšechny 64-bit-blokové šifrovací algoritmy (např. Blowfish, CAST-128 nebo Triple DES) jsou neschválené. Tento svazek bude možné připojit použitím budoucí verze programu VeraCrypt. Nicméně nebudou žádná další vylepšení těchto odkazovaných šifrovacích algoritmů. Doporučujeme vám vytvořit nový VeraCrypt svazek zašifrovaný 128-bit-blokovým šifrovacím algoritmem (např. AES, Serpent, Twofish, apod.) a přesuňte všechny souboru z tohoto svazku do nového.</string>
<string lang="cs" key="SYS_AUTOMOUNT_DISABLED">Váš systém není nakonfigurován k autom. připojení nových svazků. Může se stát, že svazky VeraCrypt umístěné na zařízeních nebude možné připojit. Autom. připojení může být povoleno spuštěním následujícího příkazu a restartování systému.\n\nmountvol.exe /E</string>
<string lang="cs" key="SYS_ASSIGN_DRIVE_LETTER">Přiřaďte prosím písmeno jednotky oddílu/zařízení než budete pokračovat ('Ovládací panely' &gt; 'Systém a údržba' &gt; 'Administrativní nástroje' - 'Vytvořit a formátovat oddíly pevného disku').\n\nJde o požadavek operačního systému.</string>
<string lang="cs" key="MOUNT_TC_VOLUME">Připojit svazek VeraCrypt</string>
@@ -1070,26 +1070,26 @@
<string lang="cs" key="ERR_ACCESS_DENIED">Přístup byl odepřen operačním systémem.\n\nMožná příčina: Operační systém vyžaduje, abyste měli práva pro čtení/zápis (nebo administrátorská oprávnění) pro určité složky, soubory a zařízení, abyste mohli číst a zapisovat data do/z nich. Uživatel bez administrátorských oprávnění může běžně vytvářet, číst a měnit soubory ve své složce s dokumenty.</string>
<string lang="cs" key="SECTOR_SIZE_UNSUPPORTED">Chyba: Disk používá nepodporovanou velikost sektorů.\n\nV současné době není možné vytvořit oddíl/svazky na discích, které používají sektory větší než 4096 bajtů. Na těchto discích ale můžete vytvořit souborové svazky.</string>
<string lang="cs" key="SYSENC_UNSUPPORTED_SECTOR_SIZE_BIOS">V současné době není možné zašifrovat systém, který je nainstalovaný na disku, který má jinou velikost sektorů než 512 bajtů.</string>
- <string lang="cs" key="NO_SPACE_FOR_BOOT_LOADER">Bootovací zavaděč VeraCryptu potřebuje alespoň 32 Kbytů neobsazeného místa na začátku systémového disku.</string>
+ <string lang="cs" key="NO_SPACE_FOR_BOOT_LOADER">Bootovací zavaděč VeraCryptu potřebuje alespoň 32 Kbajtů neobsazeného místa na začátku systémového disku.</string>
<string lang="cs" key="FEATURE_UNSUPPORTED_ON_CURRENT_OS">Tato volba není podporována ve verzi operačního systému, který právě používáte.</string>
<string lang="cs" key="SYS_ENCRYPTION_UNSUPPORTED_ON_CURRENT_OS">VeraCrypt nepodporuje šifrování systémového oddílu/disku ve verzi operačního systému, který právě používáte.</string>
<string lang="cs" key="SYS_ENCRYPTION_UNSUPPORTED_ON_VISTA_SP0">Než budete moci zašifrovat systémový oddíl/disk na Windows Vista, musíte nainstalovat Service Pack 1 nebo vyšší (žádný takovýto Service Pack nebyl na tomto systému zatím nainstalován).\n\nPoznámka: Service Pack 1 pro Windows Vista řeší problém se zmenšením volné paměti při nabíhání systému.</string>
<string lang="cs" key="SYS_ENCRYPTION_UPGRADE_UNSUPPORTED_ON_VISTA_SP0">VeraCrypt na Windows Vista, kde není nainstalován žádný Service Pack, již nepodporuje šifrování systémových oddílů/disků. Před aktualizací VeraCryptu si prosím nainstalujte Service Pack 1 nebo vyšší.</string>
- <string lang="cs" key="FEATURE_REQUIRES_INSTALLATION">Chyba: Tato vlastnost vyžaduje, aby byl VeraCrypt nainstalován na vašem systému (aktuálně běží VeraCrypt v přenosném módu).\n\nNainstalujte, prosím, VeraCrypt, a pak to zkuste znovu.</string>
- <string lang="cs" key="WINDOWS_NOT_ON_BOOT_DRIVE_ERROR">VAROVÁNÍ: Zdá se, že Windows nejsou nainstalovány na stejném disku, jako odkud se spouští. To není podporováno.\n\nMěli byste pokračovat pouze tehdy, pokud jste si jisti, že Windows jsou nainstalovány na disku, odkud bootují.\n\nChcete pokračovat?</string>
- <string lang="en" key="GPT_BOOT_DRIVE_UNSUPPORTED">You are running a 32-bit Windows and your system drive has a GUID partition table (GPT). Currently, only Windows 64-bit is supported for GPT system encryption.</string>
- <string lang="cs" key="TC_BOOT_LOADER_ALREADY_INSTALLED">VAROVÁNÍ: Bootovací zavaděč VeraCryptu je již na vašem systémovém disku nainstalován!\n\nJe možné, že jiný systém na vašem počítači je již zašifrován.\n\nVAROVÁNÍ: BUDETE-LI POKRAČOVAT V ŠIFROVÁNÍ NYNÍ BĚŽÍCÍHO SYTÉMU, OSTATNÍ SYSTÉM NEMUSÍ POTÉ NABĚHNOUT A JEJICH DATA MOHOU BÝT NEPŘÍSTUPNÁ.\n\nJste si jisti, že chcete pokračovat?</string>
- <string lang="cs" key="SYS_LOADER_RESTORE_FAILED">Obnovení původního systémového zavaděče selhalo.\n\nPoužijte prosím váš Záchranný disk VeraCrypt ('Volby opravy' &gt; 'Obnovit původní systémový zavaděč') nebo instalační médium Windows a nahraďte bootovací zavaděč VeraCryptu systémovým zavaděčem Windows.</string>
+ <string lang="cs" key="FEATURE_REQUIRES_INSTALLATION">Chyba: Tato vlastnost vyžaduje, aby byl VeraCrypt nainstalován na vašem systému (aktuálně běží VeraCrypt v přenosném režimu).\n\nNainstalujte VeraCrypt, a pak to zkuste znovu.</string>
+ <string lang="cs" key="WINDOWS_NOT_ON_BOOT_DRIVE_ERROR">UPOZORNĚNÍ: Zdá se, že Windows nejsou nainstalovány na stejném disku, jako odkud se spouští. To není podporováno.\n\nMěli byste pokračovat pouze tehdy, pokud jste si jisti, že Windows jsou nainstalovány na disku, odkud bootují.\n\nChcete pokračovat?</string>
+ <string lang="cs" key="GPT_BOOT_DRIVE_UNSUPPORTED">Váš systémový disk obsahuje GUID tabulku oddílů (GPT). Momentálně jsou podporovány jen disky s MBR tabulkou oddílů.</string>
+ <string lang="cs" key="TC_BOOT_LOADER_ALREADY_INSTALLED">UPOZORNĚNÍ: Bootovací zavaděč VeraCryptu je již na vašem systémovém disku nainstalován.\n\nJe možné, že jiný systém na vašem počítači je již zašifrován.\n\nUPOZORNĚNÍ: BUDETE-LI POKRAČOVAT V ŠIFROVÁNÍ NYNÍ BĚŽÍCÍHO SYTÉMU, OSTATNÍ SYSTÉM NEMUSÍ POTÉ NABĚHNOUT A JEJICH DATA MOHOU BÝT NEPŘÍSTUPNÁ.\n\nOpravdu chcete pokračovat?</string>
+ <string lang="cs" key="SYS_LOADER_RESTORE_FAILED">Obnovení původního systémového zavaděče nebylo úspěšné.\n\nPoužijte prosím váš Záchranný disk VeraCrypt ('Možnosti opravy' > 'Obnovit původní systémový zavaděč') nebo instalační médium Windows a nahraďte bootovací zavaděč VeraCryptu systémovým zavaděčem Windows.</string>
<string lang="cs" key="SYS_LOADER_UNAVAILABLE_FOR_RESCUE_DISK">Původní systémový zavaděč nebude uložen na Záchranném disku (pravděpodobná příčina: chybějící záložní soubor).</string>
- <string lang="cs" key="ERROR_MBR_PROTECTED">Zápis do MBR sektoru selhal.\n\nVáš BIOS může mít nastavenu ochranu zápisu MBR sektoru. Zkontrolujte nastavení vašeho BIOSu (zmáčkněte klávesu F2, Delete nebo Esc po zapnutí vašeho počítače) ohledně MBR/antivirové ochrany.</string>
- <string lang="en" key="BOOT_LOADER_FINGERPRINT_CHECK_FAILED">WARNING: The verification of VeraCrypt bootloader fingerprint failed!\nYour disk may have been tampered with by an attacker ("Evil Maid" attack).\n\nThis warning can also be triggered if you restored VeraCrypt boot loader using an Rescue Disk generated using a different VeraCrypt version.\n\nYou are advised to change your password immediately which will also restore the correct VeraCrypt bootloader. It is recommended to reinstall VeraCrypt and to take measures to avoid access to this machine by untrusted entities.</string>
+ <string lang="cs" key="ERROR_MBR_PROTECTED">Zápis do MBR sektoru nebyl úspěšný.\n\nVáš BIOS může mít nastavenu ochranu zápisu MBR sektoru. Zkontrolujte nastavení vašeho BIOSu (stiskněte klávesu F2, Delete nebo Esc po zapnutí vašeho počítače) ohledně MBR/antivirové ochrany.</string>
+ <string lang="cs" key="BOOT_LOADER_FINGERPRINT_CHECK_FAILED">UPOZORNĚNÍ: Ověření otisku bootloaderu Veracrypt nebylo úspěšné.\nVáš disk mohl být poškozen nějakým útočníkem (útok "Evil Maid").\n\nToto upozornění se může také zobrazit, pokud proběhla obnova VeraCrypt boot loader za použití záchraného disku vytvořeného v jiné verzi VeraCryptu.\n\nDoporučujeme si ihned změnit heslo, což bude mít za následek správné obnovení bootloaderu. Je doporučeno přeinstalovat VeraCrypt a provést opatření, aby k tomuto počítači neměli přístup nevhodné osoby.</string>
<string lang="cs" key="BOOT_LOADER_VERSION_INCORRECT_PREFERENCES">Požadovaná verze bootovacího zavaděče VeraCryptu není nainstalována. To může způsobit, že některé změny nebudou zapsány.</string>
- <string lang="cs" key="CUSTOM_BOOT_LOADER_MESSAGE_HELP">Poznámka: V některých případech se můžete snažit skrýt před nějakou osobou (protivník) fakt, že při startu počítače používáte VeraCrypt. Volba uvedená výše vám povolí upravit bootovací obrazovku VeraCryptu. Vyberete-li první možnost, nebudou při bootování zobrazeny žádné texty (ani když zadáte špatné heslo). Počítač bude při zadávání hesla vypadat jako by zamrznul. Navíc lze zobrazit libovolný text pro zmatení protivníka. Například falešná chybová hláška jako například "Chybějící operační systém" (která se normálně zobrazuje bootovacím zavaděčem Windows, pokud nenalezne žádný oddíl s Windows). Je potřeba ale zdůraznit, že pokud dokáže protivník analyzovat obsah disku, stále může zjistit, že obsahuje bootovací zavaděč VeraCryptu.</string>
- <string lang="cs" key="CUSTOM_BOOT_LOADER_MESSAGE_PROMPT">VAROVÁNÍ: Mějte prosím na paměti, že pokud zapnete tuto volbu, bootovací zavaděč VeraCryptu nezobrazí žádné texty (ani když zadáte špatné heslo). Počítač bude vypadat jako kdyby "zamrzl" (nereaguje) zatímco budete psát heslo (kurzor se NEBUDE hýbat a při stisku kláves se nezobrazí žádné hvězdičky).\n\nJste si jisti, že chcete zapnout tuto volbu?</string>
+ <string lang="cs" key="CUSTOM_BOOT_LOADER_MESSAGE_HELP">Poznámka: V některých případech se můžete snažit skrýt před nějakou osobou (protivník) fakt, že při startu počítače používáte VeraCrypt. Možnost uvedená výše vám povolí upravit bootovací obrazovku VeraCryptu. Vyberete-li první možnost, nebudou při bootování zobrazeny žádné texty (ani když zadáte špatné heslo). Počítač bude při zadávání hesla vypadat jako by zamrznul. Navíc lze zobrazit libovolný text pro zmatení protivníka. Například falešná chybová hláška jako například "Chybějící operační systém" (která se normálně zobrazuje bootovacím zavaděčem Windows, pokud nenalezne žádný oddíl s Windows). Je potřeba ale zdůraznit, že pokud dokáže protivník analyzovat obsah disku, stále může zjistit, že obsahuje bootovací zavaděč VeraCryptu.</string>
+ <string lang="cs" key="CUSTOM_BOOT_LOADER_MESSAGE_PROMPT">UPOZORNĚNÍ: Mějte prosím na paměti, že pokud zapnete tuto možnost, bootovací zavaděč VeraCryptu nezobrazí žádné texty (ani když zadáte špatné heslo). Počítač bude vypadat jako kdyby "zamrzl" (nereaguje) zatímco budete psát heslo (kurzor se NEBUDE hýbat a při stisku kláves se nezobrazí žádné hvězdičky).\n\nOpravdu chcete zapnout tuto možnost?</string>
<string lang="cs" key="SYS_PARTITION_OR_DRIVE_APPEARS_FULLY_ENCRYPTED">Váš systémový oddíl/disk je již celý zašifrován.</string>
<string lang="cs" key="SYSENC_UNSUPPORTED_FOR_DYNAMIC_DISK">VeraCrypt nepodporuje šifrování systémového disku, který byl převeden na dynamický disk.</string>
<string lang="cs" key="WDE_UNSUPPORTED_FOR_EXTENDED_PARTITIONS">Systémový disk obsahuje rozšířené (logické) oddíly.\n\nZašifrovat celý systémový disk, který obsahuje rozšířené (logické) oddíly, můžete pouze na Windows Vista a novějších verzích Windows. Ve Windows XP můžete zašifrovat celý systém pouze za předpokladu, že obsahuje pouze primární oddíly.\n\nPoznámka: Stále můžete zašifrovat systémový oddíl místo celého systémového disku (a navíc můžete vytvořit svazky VeraCryptu umístěné na celých ne-systémových oddílech na disku).</string>
- <string lang="cs" key="WDE_EXTENDED_PARTITIONS_WARNING">VAROVÁNÍ: Protože máte spuštěny Windows XP/2003, po spuštění šifrování disk, NESMÍTE na něm vytvořit žádný rozšířený (logický) oddíl (můžete vytvářet pouze primární oddíly). Jakýkoliv rozšířený (logický) oddíl na disku by byl po spuštění šifrování nepřístupný (disk teď žádné takové oddíly neobsahuje).\n\nPoznámka: Není-li toto omezení akceptovatelné, můžete se vrátit zpět a vybrat, že chcete zašifrovat pouze systémový oddíl místo celého disku (a navíc můžete vytvořit svazky VeraCryptu umístěné na celých ne-systémových oddílech na disku).\n\nPřípadně, pokud je toto omezení neakceptovatelné, zvažte upgrade na Windows Vista nebo novější verzi Windows (zašifrovat celý systémový disk, který obsahuje rozšířené/logické oddíly, můžete pouze na Windows Vista nebo novějším operačním systému).</string>
+ <string lang="cs" key="WDE_EXTENDED_PARTITIONS_WARNING">UPOZORNĚNÍ: Protože máte spuštěny Windows XP/2003, po spuštění šifrování disk, NESMÍTE na něm vytvořit žádný rozšířený (logický) oddíl (můžete vytvářet pouze primární oddíly). Jakýkoliv rozšířený (logický) oddíl na disku by byl po spuštění šifrování nepřístupný (disk teď žádné takové oddíly neobsahuje).\n\nPoznámka: Není-li toto omezení akceptovatelné, můžete se vrátit zpět a vybrat, že chcete zašifrovat pouze systémový oddíl místo celého disku (a navíc můžete vytvořit svazky VeraCryptu umístěné na celých ne-systémových oddílech na disku).\n\nPřípadně, pokud je toto omezení neakceptovatelné, zvažte upgrade na Windows Vista nebo novější verzi Windows (zašifrovat celý systémový disk, který obsahuje rozšířené/logické oddíly, můžete pouze na Windows Vista nebo novějším operačním systému).</string>
<string lang="cs" key="SYSDRIVE_NON_STANDARD_PARTITIONS">Váš systémový disk obsahuje nestandardní oddíl.\n\nPokud používáte notebook, váš systémový disk pravděpodobně obsahuje speciální oddíl pro obnovu. Po zašifrování celého systémového disku (včetně oddílu pro obnovu) by se mohlo stát, že váš systém nenaběhne - pokud používá nesprávně navržený BIOS. Také by bylo nemožné používat jakýkoliv oddíl pro obnovu, dokud systém nebude dešifrován. Proto doporučujeme zašifrovat pouze tento systémový oddíl.</string>
<string lang="cs" key="ASK_ENCRYPT_PARTITION_INSTEAD_OF_DRIVE">Chcete zašifrovat systémový oddíl místo celého disku?\n\nMůžete také vytvářet svazky VeraCrypt umístěné na discích v oddílech uvnitř nesystémových oddílů (jako doplněk šifrování celého systémového oddílu).</string>
<string lang="cs" key="WHOLE_SYC_DEVICE_RECOM">Protože váš systémový disk obsahuje pouze jeden oddíl, který zabírá celý disk, je vhodné (bezpečnější) zašifrovat celý disk včetně volného "odpadlého" místa, které běžně obklopuje takový oddíl.\n\nChcete zašifrovat celý systémový disk?</string>
@@ -1098,18 +1098,18 @@
<string lang="cs" key="PAGING_FILE_NOT_ON_SYS_PARTITION">Jeden nebo více stránkovacích souborů se nacházejí na nesystémových oddílech.\n\nStránkovací soubory mohou být uloženy pouze na systémovém oddílu.</string>
<string lang="cs" key="RESTRICT_PAGING_FILES_TO_SYS_PARTITION">Chcete nastavit Windows, aby byly stránkovací soubory vytvořeny pouze na oddílech s Windows?\n\nPokud zvolíte 'Ano', počítač bude restartován. Pak spusťte VeraCrypt a zkuste znovu vytvořit skrytý operační systém.</string>
<string lang="cs" key="LEAKS_OUTSIDE_SYSPART_UNIVERSAL_EXPLANATION"> V opačném případě může být nepříznivě ovlivněna hodnověrnost popírání skrytého operačního systému.\n\nPoznámka: Pokud by nepřítel zanalyzoval obsah takových souborů (které jsou umístěny na nesystémových oddílech), mohl by zjistit, že jste použili tohoto průvodce pro vytvoření skrytého systému (což může naznačit přítomnost skrytého operačního systému na vašem počítači). Jakýkoliv takovýto soubor, uložený na systémovém oddílu, bude VeraCryptem bezpečně vymazán během procesu vytvoření skrytého operačního systému.</string>
- <string lang="cs" key="DECOY_OS_REINSTALL_WARNING">VAROVÁNÍ: Během procesu vytvoření skrytého operačního systému budete muset úplně přeinstalovat systém, který momentálně běží (abyste mohli bezpečně vytvořit klamný systém).\n\nPoznámka: Systém, který momentálně běží a celý obsah systémového oddílu bude zkopírován do skrytého svazku (aby byl vytvořen skrytý systém).\n\n\nJste si jisti, že budete moci nainstalovat Windows s použitím instalačního média Windows (nebo pomocí servisního oddílu)?</string>
+ <string lang="cs" key="DECOY_OS_REINSTALL_WARNING">UPOZORNĚNÍ: Během procesu vytvoření skrytého operačního systému budete muset úplně přeinstalovat systém, který momentálně běží (abyste mohli bezpečně vytvořit klamný systém).\n\nPoznámka: Systém, který momentálně běží a celý obsah systémového oddílu bude zkopírován do skrytého svazku (aby byl vytvořen skrytý systém).\n\n\nJste si jisti, že budete moci nainstalovat Windows s použitím instalačního média Windows (nebo pomocí servisního oddílu)?</string>
<string lang="cs" key="DECOY_OS_REQUIREMENTS">Pokud je nutné aktuální operační systém aktivovat, pak je potřeba jej z bezpečnostních důvodů aktivovat nyní, než budete pokračovat. Skrytý operační systém bude vytvořen zkopírováním obsahu systémového oddílu do skrytého svazku (pokud tedy tento operační systém není aktivovaný, skrytý operační systém také nebude aktivovaný). Pro více informací viz sekce "Bezpečnostní požadavky a opatření týkající se skrytých svazků" v uživatelské příručce VeraCryptu.\n\nDůležité: Před tím, než budete pokračovat, ujistěte se, že jste si přečetli sekci "Bezpečnostní požadavky a opatření týkající se skrytých svazků" v uživatelské příručce VeraCryptu.\n\n\nSplňuje systém, který momentálně běží, výše uvedené podmínky?</string>
<string lang="cs" key="CONFIRM_HIDDEN_OS_EXTRA_BOOT_PARTITION">Váš systém používá další bootovací oddíl. VeraCrypt nepodporuje hibernaci na skrytých operačních systémech, které používají další bootovací oddíl (klamné systémy mohou být zhibernovány bez problémů).\n\nBootovací oddíl by byl sdílen jak klamným, tak skrytým operačním systémem. Aby nedošlo k úniku dat a problémům s obnovením hibernace, VeraCrypt musí zabránit skrytému systému, aby zapisoval do sdíleného bootovacího oddílu, a musí také zabránit hibernaci.\n\n\nChcete pokračovat? Pokud vyberete 'Ne', zobrazí se vám pokyny pro odstranění dodatečného bootovacího oddílu.</string>
- <string lang="cs" key="EXTRA_BOOT_PARTITION_REMOVAL_INSTRUCTIONS">\nDodatečný bootovací oddíl může být před instalací Windows odstraněn. Abyste to mohli udělat, řiďte se následujícími kroky:\n\n1) Nabootujte váš instalační disk Windows.\n\n2) Na instalační obrazovce Windows klikněte na 'Nyní nainstalovat' &gt; 'Volitelné (pokročilé)'.\n\n3) Klikněte na 'Volby disku'.\n\n4) Vyberte hlavní systémový oddíl a smažte ho kliknutím na 'Smazat' a 'OK'.\n\n5) Vyberte 'Rezervovaný systémový' oddíl, klikněte 'Rozšířit', a zvyšte jeho velikost, aby do něj mohl být nainstalován operační systém.\n\n6) Klikněte na 'Použít' a 'OK'.\n\n7) Nainstalujte Windows na 'Rezervovaný systémový' oddíl.\n\n\nPokud by se útočník ptal, proč jste odstranili dodatečný bootovací oddíl, můžete odpovědět, že jste chtěli předejít jakémukoliv možnému úniku dat do nezašifrovaného bootovacího oddílu.\n\nPoznámka: Tento text si můžete vytisknout kliknutím na tlačítko 'Tisknout' níže. Pokud si uschováte kopii tohoto textu nebo jej vytisknete (důrazně doporučujeme, pokud vaše tiskárna neukládá vytištěné dokumenty na svůj pevný disk ), měli byste zničit jakékoliv jeho kopie po odstranění dodatečného bootovacího svazku (pokud by se nalezla takováto kopie, mohla by naznačovat přítomnost skrytého svazku s operačním systémem).</string>
- <string lang="cs" key="GAP_BETWEEN_SYS_AND_HIDDEN_OS_PARTITION">Varování: Mezi systémovým oddílem a prvním oddílem za ním je nealokované místo. Po vytvoření skrytého operačního systému nesmíte vytvořit žádné nové oddíly v tomto nealokovaném prostoru. Jinak nebude možné spustit skrytý operační systém (dokud nesmažete takto nově vytvořené oddíly).</string>
+ <string lang="cs" key="EXTRA_BOOT_PARTITION_REMOVAL_INSTRUCTIONS">\nDodatečný bootovací oddíl může být před instalací Windows odstraněn. Abyste to mohli udělat, řiďte se následujícími kroky:\n\n1) Nabootujte váš instalační disk Windows.\n\n2) Na instalační obrazovce Windows klikněte na 'Nyní nainstalovat' &gt; 'Volitelné (pokročilé)'.\n\n3) Klikněte na 'Možnosti disku'.\n\n4) Vyberte hlavní systémový oddíl a smažte ho kliknutím na 'Smazat' a 'OK'.\n\n5) Vyberte 'Rezervovaný systémový' oddíl, klikněte 'Rozšířit', a zvyšte jeho velikost, aby do něj mohl být nainstalován operační systém.\n\n6) Klikněte na 'Použít' a 'OK'.\n\n7) Nainstalujte Windows na 'Rezervovaný systémový' oddíl.\n\n\nPokud by se útočník ptal, proč jste odstranili dodatečný bootovací oddíl, můžete odpovědět, že jste chtěli předejít jakémukoliv možnému úniku dat do nezašifrovaného bootovacího oddílu.\n\nPoznámka: Tento text si můžete vytisknout kliknutím na tlačítko 'Tisknout' níže. Pokud si uschováte kopii tohoto textu nebo jej vytisknete (důrazně doporučujeme, pokud vaše tiskárna neukládá vytištěné dokumenty na svůj pevný disk ), měli byste zničit jakékoliv jeho kopie po odstranění dodatečného bootovacího svazku (pokud by se nalezla takováto kopie, mohla by naznačovat přítomnost skrytého svazku s operačním systémem).</string>
+ <string lang="cs" key="GAP_BETWEEN_SYS_AND_HIDDEN_OS_PARTITION">UPOZORNĚNÍ: Mezi systémovým oddílem a prvním oddílem za ním je nealokované místo. Po vytvoření skrytého operačního systému nesmíte vytvořit žádné nové oddíly v tomto nealokovaném prostoru. Jinak nebude možné spustit skrytý operační systém (dokud nesmažete takto nově vytvořené oddíly).</string>
<string lang="cs" key="ALGO_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">Systémové šifrování momentálně nepodporuje tento algoritmus.</string>
- <string lang="en" key="ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">This algorithm is not supported for TrueCrypt mode.</string>
- <string lang="en" key="PIM_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">PIM (Personal Iterations Multiplier) not supported for TrueCrypt mode.</string>
- <string lang="en" key="PIM_REQUIRE_LONG_PASSWORD">Password must contain 20 or more characters in order to use the specified PIM.\nShorter passwords can only be used if the PIM is 485 or greater.</string>
- <string lang="en" key="BOOT_PIM_REQUIRE_LONG_PASSWORD">Pre-boot authentication Password must contain 20 or more characters in order to use the specified PIM.\nShorter passwords can only be used if the PIM is 98 or greater.</string>
+ <string lang="cs" key="ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">Tento algoritmus není podporován v režimu TrueCrypt.</string>
+ <string lang="cs" key="PIM_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">PIM není podporován v režimu TrueCrypt.</string>
+ <string lang="cs" key="PIM_REQUIRE_LONG_PASSWORD">Za účelem použití zadaného PIM musí heslo obsahovat minimálně 20 znaků.\nKratší hesla mohou být použita jen pokud je PIM minimálně 485.</string>
+ <string lang="cs" key="BOOT_PIM_REQUIRE_LONG_PASSWORD">Za účelem použití zadaného PIM musí heslo před-bootovací autentifikace obsahovat minimálně 20 znaků.\nKratší hesla mohou být použita jen pokud je PIM minimálně 98.</string>
<string lang="cs" key="KEYFILES_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">Souborové klíče aktuálně nejsou podporovány pro šifrování systémů.</string>
- <string lang="cs" key="CANNOT_RESTORE_KEYBOARD_LAYOUT">Varování: VeraCrypt nemohl obnovit původní nastavení klávesnice. To může způsobit, že heslo bude zadáno nesprávně.</string>
+ <string lang="cs" key="CANNOT_RESTORE_KEYBOARD_LAYOUT">UPOZORNĚNÍ: VeraCrypt nemohl obnovit původní nastavení klávesnice. To může způsobit, že heslo bude zadáno nesprávně.</string>
<string lang="cs" key="CANT_CHANGE_KEYB_LAYOUT_FOR_SYS_ENCRYPTION">Chyba: Nelze nastavit rozvržení klávesnice na typickou americkou klávesnici.\n\nHeslo musí být nastaveno v před-bootovacím prostředí (před startem Windows), kde nejsou ne-americké klávesnice k dispozici. Proto musí být heslo vždy nastaveno s použitím rozvržení kláves jako na americké klávesnici.</string>
<string lang="cs" key="ALT_KEY_CHARS_NOT_FOR_SYS_ENCRYPTION">Protože VeraCrypt dočasně změnil nastavení klávesnice na standardní US rozmístění kláves, není možné psát znaky při stisknuté pravé klávese Alt. Většinu takových znaků ale můžete napsat stisknutím vhodných kláves při podržené klávese Shift.</string>
<string lang="cs" key="KEYB_LAYOUT_CHANGE_PREVENTED">VeraCrypt zabránil změně nastavení klávesnice.</string>
@@ -1120,20 +1120,20 @@
<string lang="cs" key="RESCUE_DISK_BURN_INFO_NO_CHECK">Obraz záchranného disku byl vytvořen a uložen do tohoto souboru:\n%s\n\nNyní byste měli obraz disku buď vypálit na CD/DVD nebo jej přesunout do bezpečného umístění pro pozdější použití.\n\n%lsKlikněte na Další pro pokračování.</string>
<string lang="cs" key="RESCUE_DISK_BURN_INFO_NONWIN_ISO_BURNER">DŮLEŽITÉ: Soubor musí být na CD/DVD zapsán jako obraz disku (ne jako jeden soubor). Pro více informací viz dokumentace k vašemu softwaru pro vypalování CD/DVD. Pokud nevlastníte žádný CD/DVD vypalovací software, který umí zapisovat ISO obrazy disku na CD/DVD, klikněte níže na odkaz pro stažení softwaru zadarmo.\n\n</string>
<string lang="cs" key="LAUNCH_WIN_ISOBURN">Spustit Microsoft Windows Disc Image Burner</string>
- <string lang="cs" key="RESCUE_DISK_BURN_NO_CHECK_WARN">VAROVÁNÍ: Pokud jste Záchranný disk VeraCrypt vytvořili již v minulosti, nemůže být znovu použit pro tento systémový oddíl/disk, protože byl vytvořen pro odlišný hlavní klíč! Pokaždé když zašifrujete systémový oddíl/disk, musíte pro něj vytvořit nový Záchranný disk VeraCrypt, i když použijete stejné heslo.</string>
+ <string lang="cs" key="RESCUE_DISK_BURN_NO_CHECK_WARN">UPOZORNĚNÍ: Pokud jste Záchranný disk VeraCrypt vytvořili již v minulosti, nemůže být znovu použit pro tento systémový oddíl/disk, protože byl vytvořen pro odlišný hlavní klíč. Pokaždé když zašifrujete systémový oddíl/disk, musíte pro něj vytvořit nový Záchranný disk VeraCrypt, i když použijete stejné heslo.</string>
<string lang="cs" key="CANNOT_SAVE_SYS_ENCRYPTION_SETTINGS">Chyba: Nelze uložit nastavení systémového šifrování.</string>
<string lang="cs" key="CANNOT_INITIATE_SYS_ENCRYPTION_PRETEST">Nelze načíst předtest systémového šifrování.</string>
<string lang="cs" key="CANNOT_INITIATE_HIDDEN_OS_CREATION">Nelze spustit proces vytváření skrytého operačního systému.</string>
- <string lang="cs" key="WIPE_MODE_TITLE">Čistící mód</string>
- <string lang="cs" key="INPLACE_ENC_WIPE_MODE_INFO">Na některých úložných médiích mohou být data, která jsou přepsána jinými daty (např. když jsou data smazána), obnovena - s použitím technik jako např. magnetická mikroskopie. To se týká také dat, která jsou přepsána jejich zašifrovanou formou (což se děje, když VeraCrypt zašifrovává původně nezašifrovaný oddíl nebo disk). Podle některých studií a vládních publikací, obnovení dat se dá předejít (nebo to lze alespoň ztížit) přepsáním dat pseudonáhodnými a určitými ne-náhodnými daty, a to vícekrát. Pokud věříte, že by mohl váš protivník použít takovéto techniky k obnovení dat, která mají být smazána, zvažte použití jednoho z čistících módů (existující data NEBUDOU ztracena). Čištění NEBUDE provedeno po zašifrování oddílu/jednotky. Až bude oddíl/jednotka plně zašifrována, žádná další nezašifrovaná data na ní nebudou zapsána. Jakákoliv data na něj zapsaná, jsou nejprve zašifrována za běhu v paměti, a teprve potom jsou zašifrovaná data zapsána na disk.</string>
- <string lang="cs" key="WIPE_MODE_INFO">Na některých úložných médiích mohou být data, která jsou přepsána jinými daty (např. když jsou data smazána), obnovena - s použitím technik jako např. magnetická mikroskopie. Podle některých studií a vládních publikací, obnovení dat se dá předejít (nebo to lze alespoň ztížit) přepsáním dat pseudonáhodnými a určitými ne-náhodnými daty, a to vícekrát. Pokud věříte, že by mohl váš protivník použít takovéto techniky k obnovení dat, která mají být smazána, zvažte použití jednoduchého nebo více-stopého módu mazání.\n\nPoznámka: Čím více stop použijete, tím déle bude vymazání dat trvat.</string>
+ <string lang="cs" key="WIPE_MODE_TITLE">Čistící režim</string>
+ <string lang="cs" key="INPLACE_ENC_WIPE_MODE_INFO">Na některých úložných médiích mohou být data, která jsou přepsána jinými daty (např. když jsou data smazána), obnovena - s použitím technik jako např. magnetická mikroskopie. To se týká také dat, která jsou přepsána jejich zašifrovanou formou (což se děje, když VeraCrypt zašifrovává původně nezašifrovaný oddíl nebo disk). Podle některých studií a vládních publikací, obnovení dat se dá předejít (nebo to lze alespoň ztížit) přepsáním dat pseudonáhodnými a určitými ne-náhodnými daty, a to vícekrát. Pokud věříte, že by mohl váš protivník použít takovéto techniky k obnovení dat, která mají být smazána, zvažte použití jednoho z čistících režimů (existující data NEBUDOU ztracena). Čištění NEBUDE provedeno po zašifrování oddílu/jednotky. Až bude oddíl/jednotka plně zašifrována, žádná další nezašifrovaná data na ní nebudou zapsána. Jakákoliv data na něj zapsaná, jsou nejprve zašifrována za běhu v paměti, a teprve potom jsou zašifrovaná data zapsána na disk.</string>
+ <string lang="cs" key="WIPE_MODE_INFO">Na některých úložných médiích mohou být data, která jsou přepsána jinými daty (např. když jsou data smazána), obnovena - s použitím technik jako např. magnetická mikroskopie. Podle některých studií a vládních publikací, obnovení dat se dá předejít (nebo to lze alespoň ztížit) přepsáním dat pseudonáhodnými a určitými ne-náhodnými daty, a to vícekrát. Pokud věříte, že by mohl váš protivník použít takovéto techniky k obnovení dat, která mají být smazána, zvažte použití jednoduchého nebo více-stopého režimu mazání.\n\nPoznámka: Čím více stop použijete, tím déle bude vymazání dat trvat.</string>
<string lang="cs" key="DEVICE_WIPE_PAGE_TITLE">Čistím</string>
<string lang="cs" key="DEVICE_WIPE_PAGE_INFO_HIDDEN_OS">\nPoznámka: Proces čištění můžete přerušit, vypnout počítač, spustit skrytý systém znovu a pak proces obnovit (tento průvodce se spustí automaticky). Pokud ho ale přerušíte, celý proces čištění bude muset začít od začátku.</string>
<string lang="cs" key="DEVICE_WIPE_PAGE_INFO">\n\nPoznámka: Pokud proces čištění přerušte a pak se pokusíte o jeho obnovu, celý proces začne opět od začátku.</string>
<string lang="cs" key="CONFIRM_WIPE_ABORT">Chcete přerušit proces čištění?</string>
- <string lang="cs" key="CONFIRM_WIPE_START">Varování: Obsah celého oddílu/zařízení bude vymazán a ztracen.</string>
+ <string lang="cs" key="CONFIRM_WIPE_START">UPOZORNĚNÍ: Obsah celého oddílu/zařízení bude vymazán a ztracen.</string>
<string lang="cs" key="CONFIRM_WIPE_START_DECOY_SYS_PARTITION">Obsah celého oddílu, kde je umístěn původní systém, bude vymazán.\n\nPoznámka: Obsah celého oddílu, který má být vymazán, byl zkopírován do tohoto skrytého systémového svazku.</string>
- <string lang="cs" key="WIPE_MODE_WARN">VAROVÁNÍ: Pokud zvolíte například 3-stopý mód čištění, čas potřebný k zašifrování oddílu/disku bude 4x delší. Velmi podobně, pokud zvolíte 35-stopý mód čištění, bude 36x delší (to může trvat i několik týdnů).\n\nČištění ale NEBUDE provedeno po plném zašifrování oddílu/disku. Když je oddíl/disk úplně zašifrován, nejsou do něj zapsána žádná nezašifrovaná data. Jakákoliv data na něj zapsaná jsou nejdříve za běhu zašifrována v paměti a teprve pak jsou data (zašifrovaná) zapsána na disk (výkonnost NEBUDE ovlivněna).\n\nJste si jisti, že chcete použít mód čištění?</string>
+ <string lang="cs" key="WIPE_MODE_WARN">UPOZORNĚNÍ: Pokud zvolíte například 3-stopý režim čištění, čas potřebný k zašifrování oddílu/disku bude 4x delší. Velmi podobně, pokud zvolíte 35-stopý režim čištění, bude 36x delší (to může trvat i několik týdnů).\n\nČištění ale NEBUDE provedeno po plném zašifrování oddílu/disku. Když je oddíl/disk úplně zašifrován, nejsou do něj zapsána žádná nezašifrovaná data. Jakákoliv data na něj zapsaná jsou nejdříve za běhu zašifrována v paměti a teprve pak jsou data (zašifrovaná) zapsána na disk (výkonnost NEBUDE ovlivněna).\n\nOpravdu chcete použít režim čištění?</string>
<string lang="cs" key="WIPE_MODE_NONE">Žádný (nejrychlejší)</string>
<string lang="cs" key="WIPE_MODE_1_RAND">1-stopý (náhodná data)</string>
<string lang="cs" key="WIPE_MODE_3_DOD_5220">3-stopý (US DoD 5220.22-M)</string>
@@ -1141,7 +1141,7 @@
<string lang="cs" key="WIPE_MODE_35_GUTMANN">35-stopý ("Gutmann")</string>
<string lang="cs" key="WIPE_MODE_256">256-stopý</string>
<string lang="cs" key="SYS_MULTI_BOOT_MODE_TITLE">Počet operačních systémů</string>
- <string lang="cs" key="MULTI_BOOT_FOR_ADVANCED_ONLY">VAROVÁNÍ: Nezkušení uživatelé by se nikdy neměli pokoušet zašifrovat Windows ve vícesystémové bootovací konfiguraci.\n\nPokračovat?</string>
+ <string lang="cs" key="MULTI_BOOT_FOR_ADVANCED_ONLY">UPOZORNĚNÍ: Nezkušení uživatelé by se nikdy neměli pokoušet zašifrovat Windows ve vícesystémové bootovací konfiguraci.\n\nPokračovat?</string>
<string lang="cs" key="HIDDEN_OS_MULTI_BOOT">VeraCrypt podporuje vícesystémové bootování při vytvoření/použití skrytého operačního systému pouze za následujících podmínek:\n\n- Operační systém, který aktuálně běží, musí být nainstalován na bootovacím disku, který nesmí obsahovat žádné další operační systémy.\n\n- Operační systémy nainstalované na ostatních discích nesmí používat žádný bootovací zavaděč, který by byl umístěn na disku, kde je nainstalován systém, který nyní běží.\n\nJsou výše uvedené podmínky splněny?</string>
<string lang="cs" key="UNSUPPORTED_HIDDEN_OS_MULTI_BOOT_CFG">VeraCrypt nepodporuje tuto více-bootovací konfiguraci, pokud vytváříte/používáte skryt operační systém.</string>
<string lang="cs" key="SYSENC_MULTI_BOOT_SYS_EQ_BOOT_TITLE">Bootovací disk</string>
@@ -1158,9 +1158,9 @@
<string lang="cs" key="CUSTOM_BOOT_MANAGERS_IN_MBR_UNSUPPORTED">VeraCrypt momentálně nepodporuje konfiguraci vícesystémového bootování, kde je non-Windows bootovací zavaděč nainstalován v hlavním spouštěcím záznamu.\n\nMožná řešení:\n\n- Použijete-li bootovacího manažera pro spuštění Windows a Linux, přesuňte bootovacího manažera (většinou GRUB) z hlavního spouštěcího záznamu do oddílu. Pak spusťte tohoto průvodce znovu a zašifrujte systémový oddíl/disk. Bootovací zavaděč VeraCryptu se stane vaším hlavním bootovacím manažerem a dovolí vám spustit původního bootovacího manažera hned poté (stisknutím klávesy Esc na obrazovce Bootovacího manažera VeraCrypt) a díky tomu budete moci nabootovat z operačního systému Linux.</string>
<string lang="cs" key="WINDOWS_BOOT_LOADER_HINTS">Je-li momentálně běžící systém nainstalován na bootovacím oddílu, po jeho zašifrování budete muset zadat správné heslo, i když budete chtít spustit jakýkoliv nezašifrovaný systém(y) Windows (budou sdílet stejný Bootovací zavaděč/manažer pro Windows).\n\nNaopak, pokud momentálně běžící operační systém není nainstalován na bootovacím oddíle (nebo pokud Bootovací zavaděč/manažer Windows není používán žádným jiným systémem), pak po zašifrování systému nebudete muset zadat správné heslo pro spuštění jiných nezašifrovaných systémů -- budete muset jen zmáčknout klávesu Esc pro spuštění nezašifrovaného systému (pokud je nezašifrovaných systémů více, budete muset také zadat, který se má spustit - v Bootovacím manažerovi VeraCrypt ).\n\nPoznámka: Běžně je na bootovacím oddíle nainstalován takový systém Windows, který byl nainstalován nejdříve.</string>
<string lang="cs" key="SYSENC_PRE_DRIVE_ANALYSIS_TITLE">Šifrování skryté chráněné oblasti</string>
- <string lang="cs" key="SYSENC_PRE_DRIVE_ANALYSIS_HELP">Na konci mnoha disků je oblast, která je běžně skryta operačnímu systému (takovéto oblasti se také říká skrytá chráněná oblast). Některé programy ale umí číst a zapisovat do/z těchto oblastí.\n\nVAROVÁNÍ: Někteří výrobci počítačů mohou tyto oblasti využívat k ukládání nástrojů a dat pro RAID, obnovu systému, nastavení systému, diagnostiku pro jiné účely. Pokud musí být takovéto nástroje nebo data přístupná před bootováním, skrytá oblast by NEMĚLA být zašifrována (výše vyberte 'NE').\n\nChcete, aby VeraCrypt detekoval a zašifroval takovouto skrytou oblast (pokud existuje) na konci systémového disku?</string>
+ <string lang="cs" key="SYSENC_PRE_DRIVE_ANALYSIS_HELP">Na konci mnoha disků je oblast, která je běžně skryta operačnímu systému (takovéto oblasti se také říká skrytá chráněná oblast). Některé programy ale umí číst a zapisovat do/z těchto oblastí.\n\nUPOZORNĚNÍ: Někteří výrobci počítačů mohou tyto oblasti využívat k ukládání nástrojů a dat pro RAID, obnovu systému, nastavení systému, diagnostiku pro jiné účely. Pokud musí být takovéto nástroje nebo data přístupná před bootováním, skrytá oblast by NEMĚLA být zašifrována (výše vyberte 'NE').\n\nChcete, aby VeraCrypt detekoval a zašifroval takovouto skrytou oblast (pokud existuje) na konci systémového disku?</string>
<string lang="cs" key="SYSENC_TYPE_PAGE_TITLE">Typ systémového šifrování</string>
- <string lang="cs" key="SYSENC_NORMAL_TYPE_HELP">Vyberte tuto volbu, pokud chcete pouze zašifrovat systémový oddíl nebo celý systémový disk.</string>
+ <string lang="cs" key="SYSENC_NORMAL_TYPE_HELP">Vyberte tuto možnost, pokud chcete pouze zašifrovat systémový oddíl nebo celý systémový disk.</string>
<string lang="cs" key="SYSENC_HIDDEN_TYPE_HELP">Může se stát, že budete někým přinuceni dešifrovat operační systém. Je mnoho situací, kdy to nemůžete odmítnout (například vydírání). Pokud vyberete tuto možnost, vytvoříte skrytý operační systém, jehož existenci nebude možné prokázat (za předpokladu, že se budete řídit konkrétními pokyny). Tím pádem nebudete muset heslo prozradit nebo skrytý operační systém dešifrovat. Pro detailnější vysvětlení klikněte na odkaz níže.</string>
<string lang="cs" key="HIDDEN_OS_PREINFO">Může se stát, že budete někým přinuceni dešifrovat operační systém. Je mnoho situací, kdy to nemůžete odmítnout (například vydírání).\n\nS použitím průvodce můžete vytvořit skrytý operační systém, jehož existenci nebude možné prokázat (za předpokladu, že se budete řídit konkrétními pokyny). Tím pádem nebudete muset heslo prozradit nebo skrytý operační systém dešifrovat.</string>
<string lang="cs" key="SYSENC_HIDDEN_OS_REQ_CHECK_PAGE_TITLE">Skrytý operační systém</string>
@@ -1181,18 +1181,18 @@
<string lang="cs" key="SYS_ENCRYPTION_PRETEST_TITLE">Otestování systémového šifrování</string>
<string lang="cs" key="RESCUE_DISK_DISK_VERIFIED_TITLE">Záchranný disk ověřen</string>
<string lang="cs" key="RESCUE_DISK_VERIFIED_INFO">\nZáchranný disk VeraCrypt byl úspěšně ověřen. Vyjměte jej nyní, prosím, z mechaniky a uložte na bezpečném místě.\n\nKlikněte Další pro pokračování.</string>
- <string lang="cs" key="REMOVE_RESCUE_DISK_FROM_DRIVE">VAROVÁNÍ: Během následujících kroků nesmí být Záchranný disk VeraCrypt v CD/DVD jednotce. Jinak nebude možné dokončit kroky v pořádku.\n\nVyjměte ho prosím z jednotky a umístěte ho na bezpečné místo. Pak potvrďte OK.</string>
- <string lang="cs" key="PREBOOT_NOT_LOCALIZED">Varování: Vzhledem k technickým omezením před-bootovacího prostředí, text zobrazený programem VeraCrypt v před-bootovacím prostředí (např. před startem Windows) nemůže být přeložen. Uživatelské prostředí bootovacího zavaděče VeraCryptu je celé v angličtině.\n\nPokračovat?</string>
+ <string lang="cs" key="REMOVE_RESCUE_DISK_FROM_DRIVE">UPOZORNĚNÍ: Během následujících kroků nesmí být Záchranný disk VeraCrypt v CD/DVD jednotce. Jinak nebude možné dokončit kroky v pořádku.\n\nVyjměte ho prosím z jednotky a umístěte ho na bezpečné místo. Pak potvrďte OK.</string>
+ <string lang="cs" key="PREBOOT_NOT_LOCALIZED">UPOZORNĚNÍ: Vzhledem k technickým omezením před-bootovacího prostředí, text zobrazený programem VeraCrypt v před-bootovacím prostředí (např. před startem Windows) nemůže být přeložen. Uživatelské prostředí bootovacího zavaděče VeraCryptu je celé v angličtině.\n\nPokračovat?</string>
<string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO">Před zašifrováním vašeho systémového oddílu nebo disku potřebuje VeraCrypt ověřit, že vše pracuje správně.\n\nJakmile kliknete Testovat, všechny potřebné komponenty (např. před-bootovací autentifikační část, bootovací zavaděč VeraCryptu) budou nainstalovány a váš počítač restartován. Poté musíte zadat heslo bootovacího zavaděče VeraCryptu na stránce, která se objeví před startem Windows. Po startu Windows budete automaticky informováni o výsledku tohoto předtestu.\n\nNásledující zařízení bude pozměněno: Disk #%d\n\n\nVyberete-li nyní Zrušit, nic nebude nainstalováno a před-test nebude proveden.</string>
<string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_1">DŮLEŽITÉ POZNÁMKY -- PŘEČTĚTE SI JE NEBO VYTISKNĚTE (klikněte na 'Tisknout'):\n\nŽádný ze souborů nebude zašifrován, dokud nerestartujete počítač a nenaběhnou Windows. Pokud tedy cokoliv selže, vaše data NEBUDOU ztracena. Pokud ale nastanou komplikace, můžete zaznamenat komplikace při startu Windows. Proto si pozorně přečtěte (a pokud možno vytiskněte) následující pokyny, které vám řeknou, co dělat v případě, když po restartu počítače Windows nemohou naběhnout.\n\n</string>
- <string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_2">Co dělat, když Windows nenaběhnou\n------------------------------------------------\n\nPoznámka: Tyto instrukce jsou platné pouze tehdy, pokud jste ještě nezačali s šifrováním.\n\n- Pokud Windows nenaběhnou poté, co jste zadali správné heslo (nebo pokud jste opakovaně zadali správné heslo, ale VeraCrypt vám říká, že heslo je neplatné), nepanikařte. Restartujte počítač (vypněte a zapněte jej) a na obrazovce bootovacího zavaděče VeraCryptu zmáčkněte klávesu Esc (a pokud máte více operačních systémů, zvolte, který má naběhnout). Potom by měly Windows naběhnout (za předpokladu, že nejsou již zašifrovány) a VeraCrypt se vás automaticky zeptá, zda chcete odinstalovat před-bootovací autentifikační komponentu. Předchozí kroky NEBUDOU fungovat, pokud je systémový oddíl/disk již zašifrovaný (nikdo nemůže bez správného hesla Windows spustit nebo přistupovat k zašifrovaným datům na disku, i když se budou řídit předešlými pokyny).\n\n</string>
- <string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_3">- Pokud předchozí kroky nepomohou nebo pokud se nezobrazí obrazovka bootovacího zavaděče VeraCryptu (před startem Windows), vložte do vaší CD/DVD mechaniky Záchranný disk TruCrypt a restartujte počítač. Pokud se neobjeví obrazovka Záchranného disku VeraCrypt (nebo pokud nevidíte na obrazovce Záchranného disku VeraCrypt položku 'Volby oprav' v sekci 'Ovládání klávesnice'), je možné, že váš BIOS je nakonfigurován tak, aby nejdříve bootoval z pevného disku. Pokud jde o tento případ, restartujte počítač, zmáčkněte klávesu F2 nebo Delete (jakmile uvidíte startovací obrazovku BIOSu), a počkejte, až se objeví obrazovka konfigurace BIOSu. Neobjeví-li se žádná obrazovka BIOSu, restartujte (resetujte) počítač znovu a opakovaně mačkejte klávesu F2 nebo Delete ihned po restartu počítače. Až se konfigurační obrazovka BIOSu objeví, nastavte ve vašem BIOSu, aby nejdříve bootoval z CD/DVD mechaniky (pro více informací viz dokumentace k vašemu BIOSu/základní desce nebo kontaktujte podporu svého dodavatele počítač). Pak restartujte váš počítač. Nyní byste již měli vidět obrazovku Záchranného disku VeraCrypt. Na této obrazovce vyberte 'Volby oprav' stisknutím klávesy F8. Z volby 'Volby oprav' v menu vyberte 'Obnovit původní systémový zavaděč'. Pak vyjměte CD/DVD disk z mechaniky a restartujte váš počítač. Windows by měly naběhnout normálně (za předpokladu, že nejsou zašifrovány).\n\n</string>
+ <string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_2">Co dělat, když Windows nenaběhnou\n------------------------------------------------\n\nPoznámka: Tyto instrukce jsou platné pouze tehdy, pokud jste ještě nezačali s šifrováním.\n\n- Pokud Windows nenaběhnou poté, co jste zadali správné heslo (nebo pokud jste opakovaně zadali správné heslo, ale VeraCrypt vám říká, že heslo je neplatné), nepanikařte. Restartujte počítač (vypněte a zapněte jej) a na obrazovce bootovacího zavaděče VeraCryptu stiskněte klávesu Esc (a pokud máte více operačních systémů, zvolte, který má naběhnout). Potom by měly Windows naběhnout (za předpokladu, že nejsou již zašifrovány) a VeraCrypt se vás automaticky zeptá, zda chcete odinstalovat před-bootovací autentifikační komponentu. Předchozí kroky NEBUDOU fungovat, pokud je systémový oddíl/disk již zašifrovaný (nikdo nemůže bez správného hesla Windows spustit nebo přistupovat k zašifrovaným datům na disku, i když se budou řídit předešlými pokyny).\n\n</string>
+ <string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_3">- Pokud předchozí kroky nepomohou nebo pokud se nezobrazí obrazovka bootovacího zavaděče VeraCryptu (před startem Windows), vložte do vaší CD/DVD mechaniky Záchranný disk TruCrypt a restartujte počítač. Pokud se neobjeví obrazovka Záchranného disku VeraCrypt (nebo pokud nevidíte na obrazovce Záchranného disku VeraCrypt položku 'Možnosti oprav' v sekci 'Ovládání klávesnice'), je možné, že váš BIOS je nakonfigurován tak, aby nejdříve bootoval z pevného disku. Pokud jde o tento případ, restartujte počítač, stiskněte klávesu F2 nebo Delete (jakmile uvidíte startovací obrazovku BIOSu), a počkejte, až se objeví obrazovka konfigurace BIOSu. Neobjeví-li se žádná obrazovka BIOSu, restartujte (resetujte) počítač znovu a opakovaně mačkejte klávesu F2 nebo Delete ihned po restartu počítače. Až se konfigurační obrazovka BIOSu objeví, nastavte ve vašem BIOSu, aby nejdříve bootoval z CD/DVD mechaniky (pro více informací viz dokumentace k vašemu BIOSu/základní desce nebo kontaktujte podporu svého dodavatele počítač). Pak restartujte váš počítač. Nyní byste již měli vidět obrazovku Záchranného disku VeraCrypt. Na této obrazovce vyberte 'Možnosti oprav' stisknutím klávesy F8. V nabídce 'možnosti oprav' vyberte 'Obnovit původní systémový zavaděč'. Pak vyjměte CD/DVD disk z mechaniky a restartujte váš počítač. Windows by měly naběhnout normálně (za předpokladu, že nejsou zašifrovány).\n\n</string>
<string lang="cs" key="SYS_ENCRYPTION_PRETEST_INFO2_PORTION_4">Předchozí kroky NEBUDOU fungovat, pokud je již systémový oddíl/disk zašifrován (nikdo nemůže bez správného hesla Windows spustit nebo se dostat k datům na této jednotce, i když se držel předchozích kroků).\n\n\nI v případě, že ztratíte Záchranný disk VeraCrypt a útočník ho najde, on nebo ona NEBUDE moci dešifrovat systémový oddíl nebo disk bez správného hesla.</string>
<string lang="cs" key="SYS_ENCRYPTION_PRETEST_RESULT_TITLE">Před-testování dokončeno</string>
- <string lang="cs" key="SYS_ENCRYPTION_PRETEST_RESULT_INFO">Předtest byl úspěšně dokončen.\n\nVAROVÁNÍ: Vězte, že pokud dojde během šifrování dat za běhu k výpadku proudu, nebo pokud operační systém selže kvůli softwarové chybě nebo hardwarovému selhání, část dat bude poškozena nebo ztracena. Proto než začnete zašifrovávat, ujistěte se, že máte záložní kopie souborů, které chcete zašifrovat. Pokud je nemáte, zazálohujte je nyní (můžete kliknout na Odložit, zazálohovat soubory a pak znovu kdykoliv spustit VeraCrypt. Vyberte 'Systém' &gt; 'Obnovit přerušený proces' pro spuštění šifrování).\n\nAž budete připraveni, klikněte na Zašifrovat.</string>
+ <string lang="cs" key="SYS_ENCRYPTION_PRETEST_RESULT_INFO">Předtest byl úspěšně dokončen.\n\nUPOZORNĚNÍ: Vězte, že pokud dojde během šifrování dat za běhu k výpadku proudu, nebo pokud operační systém selže kvůli softwarové chybě nebo hardwarovému selhání, část dat bude poškozena nebo ztracena. Proto než začnete zašifrovávat, ujistěte se, že máte záložní kopie souborů, které chcete zašifrovat. Pokud je nemáte, zazálohujte je nyní (můžete kliknout na Odložit, zazálohovat soubory a pak znovu kdykoliv spustit VeraCrypt. Vyberte 'Systém' &gt; 'Obnovit přerušený proces' pro spuštění šifrování).\n\nAž budete připraveni, klikněte na Zašifrovat.</string>
<string lang="cs" key="SYSENC_ENCRYPTION_PAGE_INFO">Kdykoliv můžete kliknout na Pauzu nebo Odložit pro přerušení procesu šifrování nebo dešifrování. Můžete také opustit tohoto průvodce, restartovat nebo vypnout váš počítač a pak proces obnovit. Bude pokračovat z bodu, kde naposledy skončil. Aby nedošlo ke zpomalení, když systém nebo aplikace čtou nebo zapisují z/do systémového oddílu, VeraCrypt automaticky čeká, dokud nejsou data zapsána nebo přečtena (viz Status dole) a pak automaticky pokračuje v šifrování nebo dešifrování.</string>
<string lang="cs" key="NONSYS_INPLACE_ENC_ENCRYPTION_PAGE_INFO">\n\nKdykoliv můžete kliknout na Pauzu nebo Odložit pro přerušení procesu šifrování nebo dešifrování. Můžete také opustit tohoto průvodce, restartovat nebo vypnout váš počítač a pak proces obnovit. Bude pokračovat z bodu, kde naposledy skončil. Svazek nemůže být připojen, dokud nebude úplně zašifrován.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_DECRYPTION_PAGE_INFO">\n\nYou can click Pause or Defer anytime to interrupt the process of decryption, exit this wizard, restart or shut down the computer, and then resume the process, which will continue from the point where it was stopped. Note that the volume cannot be mounted until it has been fully decrypted.</string>
+ <string lang="cs" key="NONSYS_INPLACE_DEC_DECRYPTION_PAGE_INFO">\n\nPro přerušení procesu dešifrování můžete kliknout na tlačítko 'Pozastavit' nebo 'Odložit' a ukončit průvodce. Proces můžete kdykoliv obnovit, bude pokračovat, tam kde skončil. Nezapomeňte ale, že svazek nemůže být připojen, dokud nebude plně dešifrován.</string>
<string lang="cs" key="SYSENC_HIDDEN_OS_INITIAL_INFO_TITLE">Skrytý systém byl spuštěn</string>
<string lang="cs" key="SYSENC_HIDDEN_OS_WIPE_INFO_TITLE">Původní systém</string>
<string lang="cs" key="SYSENC_HIDDEN_OS_WIPE_INFO">Windows vytváří na systémovém oddílu (většinou bez toho, aniž byste to věděli nebo odsouhlasili) různé soubory s logy, dočasné soubory apod. Také ukládá aktuální obsah RAM paměti do hibernačního a stránkovacího souboru, který je uložen na systémovém oddílu. Pokud by protivník analyzoval soubory uložené na oddílu, kde je původní systém (kde je skrytý systém klonem) uložen, mohl by například zjistit, že jste použili průvodce VeraCryptu pro vytvoření skrytého systémého svazku (což může naznačit existenci skrytého operačního systému na vašem počítači).\n\nAbyste předešli těmto problémům, VeraCrypt v příštích krocích bezpečně vymaže celý obsah oddílu, kde je uložen původní systém. A poté, aby bylo dosaženo hodnověrného popření, budete muset nainstalovat na tento oddíl nový systém a zašifrovat ho. Takto vytvoříte klamný systém a celý proces vytvoření skrytého operačního systému bude dokončen.</string>
@@ -1202,13 +1202,13 @@
<string lang="cs" key="HIDDEN_OS_CREATION_NOT_FINISHED_CHOICE_TERMINATE">Natrvalo přerušit proces vytváření skrytého operačního systému</string>
<string lang="cs" key="HIDDEN_OS_CREATION_NOT_FINISHED_CHOICE_ASK_LATER">Nic nedělej a zeptej se znovu později</string>
<string lang="cs" key="RESCUE_DISK_HELP_PORTION_1">\nPOKUD MOŽNO SI VYTISKNĚTE TENTO TEXT (klikněte na 'Tisknout' níže).\n\n\nJak a kdy použít Záchranný disk VeraCrypt (Po zašifrování)\n-----------------------------------------------------------------------------------\n\n</string>
- <string lang="cs" key="RESCUE_DISK_HELP_PORTION_2">I. Jak nabootovat ze Záchranného disku VeraCryptu\n\nPro spuštění Záchranného disku VeraCryptu jej vložte do CD/DVD mechaniky a restartujte počítač. Pokud se neobjeví obrazovka Záchranného disku VeraCrypt (nebo pokud nevidíte na obrazovce Záchranného disku VeraCrypt položku 'Volby oprav' v sekci 'Ovládání klávesnice'), je možné, že váš BIOS je nakonfigurován tak, aby nejdříve bootoval z pevného disku. Pokud jde o tento případ, restartujte počítač, zmáčkněte klávesu F2 nebo Delete (jakmile uvidíte startovací obrazovku BIOSu), a počkejte, až se objeví obrazovka konfigurace BIOSu. Neobjeví-li se žádná obrazovka BIOSu, restartujte (resetujte) počítač znovu a opakovaně mačkejte klávesu F2 nebo Delete ihned po restartu počítače. Až se konfigurační obrazovka BIOSu objeví, nastavte ve vašem BIOSu, aby nejdříve bootoval z CD/DVD mechaniky (pro více informací viz dokumentace k vašemu BIOSu/základní desce nebo kontaktujte podporu svého dodavatele počítač). Pak restartujte váš počítač. Nyní byste již měli vidět obrazovku Záchranného disku VeraCrypt. Poznámka: Na obrazovce Záchranného disku VeraCryptu můžete vybrat 'Volby oprav' stisknutím klávesy F8.\n\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_HELP_PORTION_2">I. Jak nabootovat ze Záchranného disku VeraCryptu\n\nPro spuštění Záchranného disku VeraCryptu jej vložte do CD/DVD mechaniky a restartujte počítač. Pokud se neobjeví obrazovka Záchranného disku VeraCrypt (nebo pokud nevidíte na obrazovce Záchranného disku VeraCrypt položku 'Možnosti oprav' v sekci 'Ovládání klávesnice'), je možné, že váš BIOS je nakonfigurován tak, aby nejdříve bootoval z pevného disku. Pokud jde o tento případ, restartujte počítač, stiskněte klávesu F2 nebo Delete (jakmile uvidíte startovací obrazovku BIOSu), a počkejte, až se objeví obrazovka konfigurace BIOSu. Neobjeví-li se žádná obrazovka BIOSu, restartujte (resetujte) počítač znovu a opakovaně mačkejte klávesu F2 nebo Delete ihned po restartu počítače. Až se konfigurační obrazovka BIOSu objeví, nastavte ve vašem BIOSu, aby nejdříve bootoval z CD/DVD mechaniky (pro více informací viz dokumentace k vašemu BIOSu/základní desce nebo kontaktujte podporu svého dodavatele počítač). Pak restartujte váš počítač. Nyní byste již měli vidět obrazovku Záchranného disku VeraCrypt. Poznámka: Na obrazovce Záchranného disku VeraCryptu můžete vybrat 'Možnosti oprav' stisknutím klávesy F8.\n\n\n</string>
<string lang="cs" key="RESCUE_DISK_HELP_PORTION_3">II. Jak a kdy použít Záchranný disk VeraCrypt (Po zašifrování)\n\n</string>
- <string lang="cs" key="RESCUE_DISK_HELP_PORTION_4">1) Pokud se po startu počítače neobjeví obrazovka bootovacího zavaděče VeraCrypt (nebo pokud nenaběhnou Windows), bootovací zavaděč VeraCryptu může být poškozený. S pomocí Záchranného disku VeraCrypt ho můžete obnovit a tím získat opět přístup k zašifrovanému systému a datům (stále ale budete muset zadat správné heslo). Na obrazovce Záchranného disku VeraCrypt vyberte 'Volby oprav' &gt; 'Obnovit bootovací zavaděč VeraCryptu'. Pak stiskněte 'Y' pro potvrzení volby, vyjměte Záchranný disk z CD/DVD jednotky a restartujte váš počítač.\n\n</string>
- <string lang="cs" key="RESCUE_DISK_HELP_PORTION_5">2) Pokud opakovaně zadáte správné heslo, ale VeraCrypt říká, že je heslo neplatné, hlavní klíč nebo jiná kritická data mohou být poškozena. Se Záchranným diskem VeraCrypt je můžete opravit a tím získat opět přístup k zašifrovaným datům a systému (stále ale budete muset zadat správné heslo). Na obrazovce Záchranného disku vyberte 'Volby oprav' &gt; 'Obnovit klíčová data'. Pak zadejte vaše heslo a stiskněte 'Y' pro potvrzení volby, vyjměte Záchranný disk z CD/DVD jednotky a restartujte váš počítač.\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_HELP_PORTION_4">1) Pokud se po startu počítače neobjeví obrazovka bootovacího zavaděče VeraCrypt (nebo pokud nenaběhnou Windows), bootovací zavaděč VeraCryptu může být poškozený. S pomocí Záchranného disku VeraCrypt ho můžete obnovit a tím získat opět přístup k zašifrovanému systému a datům (stále ale budete muset zadat správné heslo). Na obrazovce Záchranného disku VeraCrypt vyberte 'Možnosti oprav' &gt; 'Obnovit bootovací zavaděč VeraCryptu'. Pak stiskněte 'Y' pro potvrzení, vyjměte Záchranný disk z CD/DVD jednotky a restartujte váš počítač.\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_HELP_PORTION_5">2) Pokud opakovaně zadáte správné heslo, ale VeraCrypt říká, že je heslo neplatné, hlavní klíč nebo jiná kritická data mohou být poškozena. Se Záchranným diskem VeraCrypt je můžete opravit a tím získat opět přístup k zašifrovaným datům a systému (stále ale budete muset zadat správné heslo). Na obrazovce Záchranného disku vyberte 'Možnosti oprav' &gt; 'Obnovit klíčová data'. Pak zadejte vaše heslo a stiskněte 'Y' pro potvrzení, vyjměte Záchranný disk z CD/DVD jednotky a restartujte váš počítač.\n\n</string>
<string lang="cs" key="RESCUE_DISK_HELP_PORTION_6">3) Pokud je bootovací zavaděč VeraCryptu poškozený, můžete se vyhnout jeho spuštění bootovaním přímo ze Záchranného disku VeraCrypt. Vložte váš Záchranný disk do CD/DVD mechaniky a pak na jeho obrazovce zadejte heslo.\n\n</string>
- <string lang="cs" key="RESCUE_DISK_HELP_PORTION_7">4) Pokud jsou Windows poškozeny a nenabíhají, s pomocí Záchranného disku VeraCrypt můžete před spuštěním Windows dešifrovat oddíl/disk. Na obrazovce Záchranného disku vyberte 'Volby oprav' &gt; 'Natrvalo dešifrovat systémový oddíl/disk'. Zadejte správné heslo, a počkejte na dokončení dešifrování. Pak můžete například nabootovat vaše instalační CD/DVD pro MS Windows a instalaci Windows opravit.\n\n</string>
- <string lang="cs" key="RESCUE_DISK_HELP_PORTION_8">Poznámka: Popřípadě, pokud jsou Windows poškozené (nenabíhají) a vy je potřebujete opravit (nebo se dostat k nějakému souboru), můžete se vyhnout dešifrování systémového oddílu/disku pomocí následujících kroků: Pokud máte na počítači nainstalovaných více operačních systémů, spusťte ten, který nevyžaduje před-bootovací autentifikaci. Pokud nemáte na vašem počítači nainstalovaných více operačních systémů, můžete nabootovat WinPE nebo BartPE CD/DVD nebo můžete připojti váš systémový disk jako sekundární nebo externí disk k jinému počítači a pak spustit operační systém instalovaný na daném počítači. Až systém spustíte, spusťte VeraCrypt a klikněte na 'Vybrat zařízení', vyberte zmíněný systémový oddíl, klikněte na 'OK', vyberte 'Systém' &gt; 'Připojit bez před-bootovací autentifikace', zadejte před-bootovací autentifikační heslo a klikněte na 'OK'. Oddíl bude připojen jako běžný svazek VeraCrypt (data budou za běhu dešifrována/zašifrována v paměti RAM, jako obvykle).\n\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_HELP_PORTION_7">4) Jsou-li Windows poškozeny a nenabíhají, s pomocí Záchranného disku VeraCrypt můžete před spuštěním Windows dešifrovat oddíl/disk. Na obrazovce Záchranného disku vyberte 'Možnosti oprav' &gt; 'Natrvalo dešifrovat systémový oddíl/disk'. Zadejte správné heslo, a počkejte na dokončení dešifrování. Pak můžete například nabootovat vaše instalační CD/DVD pro MS Windows a instalaci Windows opravit.\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_HELP_PORTION_8">Poznámka: Popřípadě, jsou-li Windows poškozené (nenabíhají) a vy je potřebujete opravit (nebo se dostat k nějakému souboru), můžete se vyhnout dešifrování systémového oddílu/disku pomocí následujících kroků: Pokud máte na počítači nainstalovaných více operačních systémů, spusťte ten, který nevyžaduje před-bootovací autentifikaci. Pokud nemáte na vašem počítači nainstalovaných více operačních systémů, můžete nabootovat WinPE nebo BartPE CD/DVD nebo můžete připojti váš systémový disk jako sekundární nebo externí disk k jinému počítači a pak spustit operační systém instalovaný na daném počítači. Až systém spustíte, spusťte VeraCrypt a klikněte na 'Vybrat zařízení', vyberte zmíněný systémový oddíl, klikněte na 'OK', vyberte 'Systém' &gt; 'Připojit bez před-bootovací autentifikace', zadejte před-bootovací autentifikační heslo a klikněte na 'OK'. Oddíl bude připojen jako běžný svazek VeraCrypt (data budou za běhu dešifrována/zašifrována v paměti RAM, jako obvykle).\n\n\n</string>
<string lang="cs" key="RESCUE_DISK_HELP_PORTION_9">I když ztratíte váš Záchranný disk VeraCrypt a útočník ho najde, on nebo ona NEBUDE moci systémový oddíl nebo disk bez správného hesla dešifrovat.</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_1">\n\nD Ů L E Ž I T É -- VYTISKNĚTE SI TENTO TEXT (klikněte na 'Tisk' níže).\n\n\nPoznámka: Tento text bude automaticky zobrazen pokaždé, když spustíte skrytý systém, dokud nespustíte klamný systém.\n\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_2">Jak vytvořit klamný systém bezpečně a spolehlivě\n----------------------------------------------------------------------------\n\nAby bylo možné dosáhnout hodnověrného popření, musíte teď vytvořit klamný operační systém. Pokračujte dle následujících kroků:\n\n</string>
@@ -1216,10 +1216,10 @@
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_4">2) Nainstalujte Windows do oddílu, jehož obsah byl smazán (např. do oddílu, kde byl nainstalován původního systému a jehož klonem je skrytý systém).\n\nDŮLEŽITÉ: KDYŽ SPUSTÍTE INSTALACI NA KLAMNÉM SYSTÉMU, SKRYTÝ SYSTÉM *NEBUDE* MOŽNÉ SPUSTIT (protože bootovací zavaděč VeraCryptu bude smazán zavaděčem systému Windows). TOTO CHOVÁNÍ JE V POŘÁDKU. NEPANIKAŘTE, PROSÍM. SKRYTÝ SYSTÉM BUDETE MOCI SPUSTIT ZNOVU, JAKMILE ZAČNETE ZAŠIFROVÁVAT KLAMNÝ OPERAČNÍ SYSTÉM (protože VeraCrypt pak hned nainstaluje na systémový disk bootovací zavaděč VeraCryptu).\n\nDůležité: Velikost systémového svazku klamného systému musí být stejná jako velikost skrytého svazku (tato podmínka je nyní splněna). Navíc nemusíte vytvářet žádné další oddíly mezi oddílem klamného systému a oddílem, kde je umístěn skrytý systém.\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_5">3) Spusťte klamný systém (který jste nainstalovali v kroku 2 a do nějž jste nainstalovali Veracrypt).\n\nMějte na paměti, že klamný operační systém nesmí nikdy obsahovat citlivá data.\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_6">4) Spusťte VeraCrypt na klamném systému a vyberte 'Systém' &gt; 'Zašifrovat systémový oddíl/disk'. Měl by se objevit Průvodce vytvořením svazku VeraCrypt.\n\nNásledující kroky se týkají Průvodce vytvořením svazku VeraCrypt.\n\n</string>
- <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_7">5) V Průvodci vytvořením svazku VeraCrypt NEVYBÍREJTE 'Skrytou' volbu. Ponechte volbu na 'Normální' a klikněte na 'Další'.\n\n</string>
- <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_8">6) Vyberte volbu 'Zašifrovat systémový oddíl Windows' a klikněte na 'Další'.\n\n</string>
+ <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_7">5) V Průvodci vytvořením svazku VeraCrypt NEVYBÍREJTE 'Skrytou' možnost. Ponechte možnost na 'Normální' a klikněte na 'Další'.\n\n</string>
+ <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_8">6) Vyberte možnost 'Zašifrovat systémový oddíl Windows' a klikněte na 'Další'.\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_9">7) Pokud je na vašem počítač nainstalován pouze skrytý a klamný systém, vyberte variantu 'Jednoduché bootování' (pokud máte na počítači více systémů, vyberte 'Více systémů při bootování'). Pak klikněte na 'Další'.\n\n</string>
- <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_10">8) DŮLEŽITÉ: V tomto kroku MUSÍTE VYBRAT PRO KLAMNÝ SYSTÉM STEJNÝ ŠIFROVACÍ ALGORITMUS A HASHOVACÍ ALGORITMUS, KTERÝ JSTE VYBRALI PRO SKRYTÝ SYSTÉM! JINAK BUDE SKRYTÝ SYSTÉM NEPŘÍSTUPNÝ! Jinými slovy, klamný systém musí být zašifrován stejným šifrovacím algoritmem jako skrytý systém. Poznámka: Důvodem je fakt, že klamný systém a skrytý systém sdílí stejný bootovací zavaděč, což je podporováno pouze jedním algoritmem, který vybere uživatel (pro každý algoritmus existuje speciální verze bootovacího zavaděče VeraCryptur).\n\n</string>
+ <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_10">8) DŮLEŽITÉ: V tomto kroku MUSÍTE VYBRAT PRO KLAMNÝ SYSTÉM STEJNÝ ŠIFROVACÍ ALGORITMUS A HASHOVACÍ ALGORITMUS, KTERÝ JSTE VYBRALI PRO SKRYTÝ SYSTÉM. JINAK BUDE SKRYTÝ SYSTÉM NEPŘÍSTUPNÝ. Jinými slovy, klamný systém musí být zašifrován stejným šifrovacím algoritmem jako skrytý systém. Poznámka: Důvodem je fakt, že klamný systém a skrytý systém sdílí stejný bootovací zavaděč, což je podporováno pouze jedním algoritmem, který vybere uživatel (pro každý algoritmus existuje speciální verze bootovacího zavaděče VeraCryptur).\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_11">9) V tomto kroku vyberte heslo pro klamný operační systém. Půjde o heslo, které budete moci odhalit případnému protivníkovi, pokud se vás bude snažit přinutit vyzradit před-bootovací autentifikační heslo (druhé heslo, které můžete prozradit je to, které patří k vnějšímu svazku). Existence třetího hesla (např. před-bootovací autentifikační heslo) zůstane utajena.\n\nDůležité: Heslo, pro klamný systém musí být naprosto odlišné od toho, které si zvolíte ke skrytému svazku (např. pro skrytý operační systém).\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_12">10) Postupujte podle zbylých instrukcí v průvodci k dokončení zašifrování klamného operačního systému.\n\n\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_13">Po vytvoření klamného systému\n------------------------------------------------\n\nJakmile klamný systém zašifrujete, celý proces vytvoření skrytého operačního systému bude dokončen a vy budete již moci používat tyto tři hesla:\n\n1) Před-bootovací autentifikační heslo pro skrytý operační systém.\n\n2) Před-bootovací autentifikační heslo pro klamný operační systém.\n\n3) Heslo pro vnější svazek.\n\n</string>
@@ -1227,51 +1227,51 @@
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_15">Třetí heslo (pro vnější svazek) může být prozrazeno komukoliv, kdo by se snažil získat heslo k prvnímu oddílu za systémovým oddílem, kde jsou umístěny jak vnější svazek, tak i svazek skrytý (ten obsahuje skrytý operační systém). Existence skrytého svazku (a skrytého operačního systému) zůstane utajena.\n\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_16">Pokud jste odhalili protivníkovi heslo ke klamnému systému, a on se vás zeptá, proč je volné místo na oddílu klamného systému zaplněno náhodnými daty, můžete odpovědět např.: "Oddíl původně obsahoval zašifrovaný systémový svazek zašifrovaný VeraCryptem, ale já jsem zapomněl před-bootovací autentifikační heslo (nebo byl systém poškozen a přestal nabíhat), takže jsem musel celý systém Windows přeinstalovat a zašifrovat oddíl znovu."\n\n\n</string>
<string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_17">Pokud jste se řídili všemi instrukcemi, požadavky a opatřeními uvedenými v sekci "Bezpečnostní požadavky a opatření týkající se skrytých svazků" v uživatelské příručce VeraCryptu, mělo by být nemožné prokázat, že existuje skrytý svazek a skrytý operační systém, i když bude připojen vnější svazek nebo když by byl klamný operační systémem dešifrován nebo spuštěn.\n\nPokud si uložíte kopii tohoto textu nebo si ji uložíte (důrazně doporučujeme, pokud náhodou vaše tiskárna neukládá vytištěné dokumenty do své paměti), měli byste jakékoliv takové kopie zničit poté, co klamný systém vytvoříte a pochopíte všechny informace, které jsou v textu uvedené (v opačném případě, pokud by někdo takovou kopii nalezl, mohl by to být náznak toho, že se na vašem počítači nachází skrytý operační systém).\n\n</string>
- <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_18">VAROVÁNÍ: POKUD NEOCHRÁNÍTE SKRYTÝ SVAZEK (pro více informací, viz sekce "Ochrana skrytých svazků proti poškození" v uživatelské příručce VeraCrypt), NEZAPISUJTE DO VNĚJŠÍHO SVAZKU (klamný operační systém NENÍ nainstalován ve vnějším svazku). JINAK SI MŮŽETE PŘEPSAT A POŠKODIT SKRYTÝ SVAZEK (A SKRYTÝ OPERAČNÍ SYSTÉM UVNITŘ)!</string>
+ <string lang="cs" key="DECOY_OS_INSTRUCTIONS_PORTION_18">UPOZORNĚNÍ: POKUD NEOCHRÁNÍTE SKRYTÝ SVAZEK (pro více informací, viz sekce "Ochrana skrytých svazků proti poškození" v uživatelské příručce VeraCrypt), NEZAPISUJTE DO VNĚJŠÍHO SVAZKU (klamný operační systém NENÍ nainstalován ve vnějším svazku). JINAK SI MŮŽETE PŘEPSAT A POŠKODIT SKRYTÝ SVAZEK (A SKRYTÝ OPERAČNÍ SYSTÉM UVNITŘ).</string>
<string lang="cs" key="HIDDEN_OS_CREATION_PREINFO_TITLE">Klonování operačního systému</string>
<string lang="cs" key="HIDDEN_OS_CREATION_PREINFO_HELP">V následujícím kroku vytvoří VeraCrypt skrytý operační systém tak, že zkopíruje obsah systémového oddílu do skrytého svazku (kopírovaná data budou zašifrována za běhu jiným šifrovacím klíčem, než je ten, co se používá pro klamný operační systém).\n\nProces bude proveden v před-bootovacím prostředí (než se Windows spustí) a může to trvat delší dobu; několik hodin nebo dokonce několik dní (záleží na velikosti systémového oddílu a na výkonu vašeho počítače).\n\nBudete moci proces přerušit, vypnout počítač a pak spustit operační systém a pokračovat v procesu. Pokud ho ale přerušíte, celý proces kopírování systému bude spuštěn úplně od začátku (protože obsah systémového oddílu se nesmí během klonování změnit).</string>
<string lang="cs" key="CONFIRM_CANCEL_HIDDEN_OS_CREATION">Chcete zrušit celý proces vytváření skrytého operačního systému?\n\nPoznámka: NEBUDETE moci pokračovat, pokud ho nyní zrušíte.</string>
<string lang="cs" key="CONFIRM_CANCEL_SYS_ENC_PRETEST">Chcete zrušit před-testování šifrování systému?</string>
- <string lang="cs" key="BOOT_PRETEST_FAILED_RETRY">Předběžná zkouška zašifrování systému selhala. Chcete to zkusit znovu?\n\nVyberete-li 'Ne', před-bootovací autentifikační komponenta bude odinstalována.\n\nPoznámka:\n\n- Pokud vás bootovací zavaděč VeraCryptu nevyzval k zadání hesla před startem Windows, je možné, že vás operační systém nebootuje z disku, na kterém je nainstalován. To není podporováno.\n\n- Pokud jste použili jiný šifrovací algoritmus než AES a předběžná zkouška selhala (a vy jste zadali heslo), může to být způsobeno nevhodně navrženým ovladačem. Vyberte 'Ne' a zkuste systémový oddíl/jednotku znovu zašifrovat, ale použijte šifrovací algoritmus AES (který má nejmenší nároky na paměť).\n\n- Pro zjištění, jaké jsou další možné příčiny a řešení, viz: https://veracrypt.codeplex.com/wikipage?title=Troubleshooting</string>
+ <string lang="cs" key="BOOT_PRETEST_FAILED_RETRY">Předběžná zkouška zašifrování systému nebyla úspěšná. Chcete to zkusit znovu?\n\nVyberete-li 'Ne', před-bootovací autentifikační komponenta bude odinstalována.\n\nPoznámka:\n\n- Pokud vás bootovací zavaděč VeraCryptu nevyzval k zadání hesla před startem Windows, je možné, že vás operační systém nebootuje z disku, na kterém je nainstalován. To není podporováno.\n\n- Pokud jste použili jiný šifrovací algoritmus než AES a předběžná zkouška nebyla úspěšná (a vy jste zadali heslo), může to být způsobeno nevhodně navrženým ovladačem. Vyberte 'Ne' a zkuste systémový oddíl/jednotku znovu zašifrovat, ale použijte šifrovací algoritmus AES (který má nejmenší nároky na paměť).\n\n- Pro zjištění, jaké jsou další možné příčiny a řešení, viz: https://veracrypt.codeplex.com/wikipage?title=Troubleshooting</string>
<string lang="cs" key="SYS_DRIVE_NOT_ENCRYPTED">Systémový oddíl/disk pravděpodobně není zašifrován (ani částečně ani plně).</string>
- <string lang="cs" key="SETUP_FAILED_BOOT_DRIVE_ENCRYPTED">Váš systémový oddíl/disk je zašifrován (částečně nebo plně).\n\nPřed pokračováním celý systémový oddíl/disk nejdříve dešifrujte. Pokud tak chcete učinit, zvolte 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk' z menu hlavního okna programu VeraCrypt.</string>
+ <string lang="cs" key="SETUP_FAILED_BOOT_DRIVE_ENCRYPTED">Váš systémový oddíl/disk je zašifrován (částečně nebo plně).\n\nPřed pokračováním celý systémový oddíl/disk nejdříve dešifrujte. Pokud tak chcete učinit, zvolte 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk' z nabídky hlavního okna programu VeraCrypt.</string>
<string lang="cs" key="SETUP_FAILED_BOOT_DRIVE_ENCRYPTED_DOWNGRADE">Je-li systémový oddíl/disk zašifrován (částečně nebo úplně), nemůžete snížit verzi VeraCryptu (ale můžete jej aktualizovat nebo přeinstalovat stejnou verzi).</string>
<string lang="cs" key="SYS_ENCRYPTION_OR_DECRYPTION_IN_PROGRESS">Váš systémový oddíl/disk je momentálně zašifrováván/dešifrováván nebo jinak pozměňován. Před pokračováním zrušte proces šifrování/dešifrování/pozměňování (nebo počkejte na jeho dokončení).</string>
<string lang="cs" key="SYSTEM_ENCRYPTION_IN_PROGRESS_ELSEWHERE">Na tomto systému již běží jiná instance Průvodce vytvořením svazku VeraCrypt a provádí nebo připravuje šifrování/dešifrování systémového oddílu/disku. Než budete pokračovat, počkejte, prosím, až skončí nebo jej zavřete. Pokud jej nemůžete zavřít, restartujte nejdříve váš počítač a pak pokračujte.</string>
<string lang="cs" key="SYSTEM_ENCRYPTION_NOT_COMPLETED">Proces šifrování nebo dešifrování systémového oddílu-disku nebyl dokončen. Počkejte, prosím, než bude dokončen.</string>
<string lang="cs" key="ERR_ENCRYPTION_NOT_COMPLETED">Chyba: Proces šifrování oddílu/disku nebyl dokončen. Nejdříve je nutné jej dokončit.</string>
- <string lang="cs" key="ERR_NONSYS_INPLACE_ENC_INCOMPLETE">Chyba: Proces šifrování oddílu/svazku nebyl dokončen. Nejdříve musí skončit. \n\nPoznámka: Pro pokračování procesu vyberte 'Svazky' &gt; 'Obnovit přerušený proces' z menu nabídky hlavního okna VeraCryptu.</string>
+ <string lang="cs" key="ERR_NONSYS_INPLACE_ENC_INCOMPLETE">Chyba: Proces šifrování oddílu/svazku nebyl dokončen. Nejdříve musí skončit. \n\nPoznámka: Pro pokračování procesu vyberte 'Svazky' &gt; 'Obnovit přerušený proces' z nabídky hlavního okna VeraCryptu.</string>
<string lang="cs" key="ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG">Heslo je správné, VeraCrypt úspěšně dešifrovat hlavičku svazku a zjistil, že tento svazek je skrytý operační systém. Avšak hlavička skrytého systémového svazku nemůže být takto změněna.\n\nPro změnu hesla skrytého systémového svazku nabootujte operační systém, který je umístěn ve skrytém svazku a pak vyberte 'Systém' &gt; 'Změnit heslo' z lišty hlavního okna programu VeraCrypt.\n\nPro zadání hlavičkového klíče derivačního algoritmu nabootujte skrytý operační systém a pak vyberte 'Systém' &gt; 'Zadat hlavičku klíče derivačního algoritmu'.</string>
<string lang="cs" key="CANNOT_DECRYPT_HIDDEN_OS">VeraCrypt nepodporuje okamžité dešifrování skrytého systémového oddílu.\n\nPoznámka: Chcete-li dešifrovat oddíl klamného operačního systému, nabootujte klamný operační systém a vyberte 'Systém' &gt; 'Trvale dešifrovat systémový oddíl/disk' z lišty hlavního okna programu VeraCrypt.</string>
<string lang="cs" key="ERR_PARAMETER_INCORRECT">Chyba: Nesprávný/neplatný parametr.</string>
- <string lang="cs" key="DEVICE_SELECTED_IN_NON_DEVICE_MODE">Vybrali jste oddíl nebo zařízení, ale zvolený průvodce je vhodný pouze pro souborové svazky.\n\nChcete změnit mód průvodce?</string>
+ <string lang="cs" key="DEVICE_SELECTED_IN_NON_DEVICE_MODE">Vybrali jste oddíl nebo zařízení, ale zvolený průvodce je vhodný pouze pro souborové svazky.\n\nChcete změnit režim průvodce?</string>
<string lang="cs" key="CONFIRM_CHANGE_WIZARD_MODE_TO_FILE_CONTAINER">Chcete místo toho vytvořit souborový svazek VeraCrypt?</string>
<string lang="cs" key="CONFIRM_SYSTEM_ENCRYPTION_MODE">Vybrali jste systémový oddíl/jednotku (nebo bootovací oddíl), ale průvodce, kterého jste vybrali, je vhodný pouze pro nesystémové oddíly/jednotky.\n\nChcete nastavit před-bootovací autentifikaci (což znamená, že budete muset zadávat heslo při každém startu Windows) a zašifrovat systémový oddíl/jednotku?</string>
- <string lang="cs" key="CONFIRM_DECRYPT_SYS_DEVICE">Jste si jisti, že chcete trvale dešifrovat systémový oddíl/disk?</string>
- <string lang="cs" key="CONFIRM_DECRYPT_SYS_DEVICE_CAUTION">VAROVÁNÍ: Pokud trvale dešifrujete systémový oddíl/disk, budou na něj zapsána nezašifrovaná data.\n\nJste si opravdu jisti, že chcete trvale dešifrovat systémový oddíl/disk?</string>
- <string lang="en" key="CONFIRM_DECRYPT_NON_SYS_DEVICE">Are you sure you want to permanently decrypt the following volume?</string>
- <string lang="en" key="CONFIRM_DECRYPT_NON_SYS_DEVICE_CAUTION">CAUTION: If you permanently decrypt the VeraCrypt volume, unencrypted data will be written to the disk.\n\nAre you really sure you want to permanently decrypt the selected volume?</string>
- <string lang="cs" key="CONFIRM_CASCADE_FOR_SYS_ENCRYPTION">Varování: Použijete-li k zašifrování systému kaskádu šifer, můžete zaznamenat následující problémy:\n\n1) Bootovací zavaděč VeraCryptu je větší než obvykle, a proto není v prvním stopě disku dostatek místa pro zálohu bootovacího zavaděče VeraCryptu. Proto, pokud dojde k jeho poškození, (což se stává často, například při nevhodně navržené aktivaci protipirátské ochrany určitých programů), budete muset použít Záchranný disk VeraCrypt pro nabootování a opravě bootovacího zavaděče VeraCryptu.\n\n2) Na některých počítačích trvá obnovení z hibernace delší dobu.\n\nTěmto případným problémům můžete předejít, pokud vyberete nekaskádový šifrovací algoritmus (např. AES).\n\nJste si jisti, že chcete použít kaskádu šifer?</string>
+ <string lang="cs" key="CONFIRM_DECRYPT_SYS_DEVICE">Opravdu chcete trvale dešifrovat systémový oddíl/disk?</string>
+ <string lang="cs" key="CONFIRM_DECRYPT_SYS_DEVICE_CAUTION">UPOZORNĚNÍ: Pokud trvale dešifrujete systémový oddíl/disk, budou na něj zapsána nezašifrovaná data.\n\nJste si opravdu jisti, že chcete trvale dešifrovat systémový oddíl/disk?</string>
+ <string lang="cs" key="CONFIRM_DECRYPT_NON_SYS_DEVICE">Jste si jist(a), že chcete trvale dešifrovat následující svazek?</string>
+ <string lang="cs" key="CONFIRM_DECRYPT_NON_SYS_DEVICE_CAUTION">UPOZORNĚNÍ: Pokud trvale dešifrujete svazek VeraCrypt, budou na disk zapsána nezašifrovaná data.\n\nUrčitě chcete natrvalo dešifrovat vybraný svazek?</string>
+ <string lang="cs" key="CONFIRM_CASCADE_FOR_SYS_ENCRYPTION">UPOZORNĚNÍ: Použijete-li k zašifrování systému kaskádu šifer, můžete zaznamenat následující problémy:\n\n1) Bootovací zavaděč VeraCryptu je větší než obvykle, a proto není v prvním stopě disku dostatek místa pro zálohu bootovacího zavaděče VeraCryptu. Proto, pokud dojde k jeho poškození, (což se stává často, například při nevhodně navržené aktivaci protipirátské ochrany určitých programů), budete muset použít Záchranný disk VeraCrypt pro nabootování a opravě bootovacího zavaděče VeraCryptu.\n\n2) Na některých počítačích trvá obnovení z hibernace delší dobu.\n\nTěmto případným problémům můžete předejít, pokud vyberete nekaskádový šifrovací algoritmus (např. AES).\n\nOpravdu chcete použít kaskádu šifer?</string>
<string lang="cs" key="NOTE_CASCADE_FOR_SYS_ENCRYPTION">Zaznamenáte-li některé z popisovaných problémů, dešifrujte oddíl/disk (pokud je zašifrovaný) a pak jej zkuste zašifrovat znovu použitím ne-kaskádového šifrovacího algoritmu (např. AES).</string>
- <string lang="cs" key="UPDATE_TC_IN_DECOY_OS_FIRST">VAROVÁNÍ: Z bezpečnostních důvodů byste měli aktualizovat VeraCrypt na klamném operačním systému před jeho aktualizací na skrytém operačním systému.\n\nAbyste tak učinili, nastartujte klamný operační systém a spusťte z něj instalátor programu VeraCrypt. Poté nastartujte skrytý systém a z něj také spusťte instalátor.\n\nPoznámka: Klamný operační systém a skrytý systém sdílejí jednotný bootovací zavaděč. Pokud jste aktualizovali VeraCrypt jen na skrytém systému (ale ne na klamném systému), klamný systém bude obsahovat ovladač programu VeraCrypt a VeraCrypt aplikace, jejichž verze budou rozdílné od Bootovacího zavaděče VeraCryptu. Takovýto rozpor by mohl být signálem, že je na vašem počítači skrytý operační systém.\n\n\nChcete pokračovat? (Nedoporučeno.)</string>
+ <string lang="cs" key="UPDATE_TC_IN_DECOY_OS_FIRST">UPOZORNĚNÍ: Z bezpečnostních důvodů byste měli aktualizovat VeraCrypt na klamném operačním systému před jeho aktualizací na skrytém operačním systému.\n\nAbyste tak učinili, nastartujte klamný operační systém a spusťte z něj instalátor programu VeraCrypt. Poté nastartujte skrytý systém a z něj také spusťte instalátor.\n\nPoznámka: Klamný operační systém a skrytý systém sdílejí jednotný bootovací zavaděč. Pokud jste aktualizovali VeraCrypt jen na skrytém systému (ale ne na klamném systému), klamný systém bude obsahovat ovladač programu VeraCrypt a VeraCrypt aplikace, jejichž verze budou rozdílné od Bootovacího zavaděče VeraCryptu. Takovýto rozpor by mohl být signálem, že je na vašem počítači skrytý operační systém.\n\n\nChcete pokračovat? (Nedoporučeno.)</string>
<string lang="cs" key="UPDATE_TC_IN_HIDDEN_OS_TOO">Verze Bootovacího zavaděče VeraCryptu, který startoval tento operační systém, je jiná než ovladače VeraCrypt (a aplikace VeraCrypt) instalované na tomto systému.\n\nMěli byste spustit instalátor VeraCrypt (jehož verze je ta samá jako ta, která je v Bootovacím zavaděči VeraCryptu) pro aktualizaci programu VeraCrypt na tomto operačním systému.</string>
<string lang="cs" key="BOOT_LOADER_VERSION_DIFFERENT_FROM_DRIVER_VERSION">Verze bootovacího zavaděče VeraCryptu, který spustil tento operační systém, je jiná, než verze ovladače VeraCryptu (a VeraCrypt aplikací) instalovaného na tomto systému. Starší verze mohou obsahovat chyby, které jsou opraveny v novějších verzích.\n\nPokud jste nebootovali ze Záchranného disku VeraCrypt, měli byste přeinstalovat VeraCrypt nebo jej aktualizovat na nejnovější stabilní verzi (bootovací zavaděč bude aktualizován také).\n\nPokud jste bootovali ze Záchranného disku VeraCrypt, měli byste jej aktualizovat ('Systém' &gt; 'Vytvořit záchranný disk').</string>
<string lang="cs" key="BOOT_LOADER_UPGRADE_OK">Bootovací zavaděč VeraCryptu byl aktualizován.\n\nDůrazně doporučujeme vytvořit nový Záchranný disk VeraCrypt (který bude obsahovat novou verzi Bootovacího zavaděče VeraCryptu) přes 'Systém' &gt; 'Vytvořit záchranný disk' po restartu počítače.</string>
<string lang="cs" key="BOOT_LOADER_UPGRADE_OK_HIDDEN_OS">Bootovací zavaděč VeraCryptu byl aktualizován.\n\nDůrazně doporučujeme nabootovat klamný operační systém a vytvořit nový Záchranný disk VeraCrypt (který bude obsahovat novou verzi Bootovacího zavaděče VeraCryptu) vybráním 'Systém' &gt; 'Vytvořit záchranný disk'.</string>
- <string lang="cs" key="BOOT_LOADER_UPGRADE_FAILED">Aktualizace bootovacího zavaděče VeraCryptu selhala.</string>
+ <string lang="cs" key="BOOT_LOADER_UPGRADE_FAILED">Aktualizace bootovacího zavaděče VeraCryptu nebyla úspěšná.</string>
<string lang="cs" key="SYS_DRIVE_SIZE_PROBE_TIMEOUT">VeraCrypt nemohl zjistit opravdovou velikost systémového disku, a proto použije velikost zjištěnou operačním systémem (což může být méně než opravdová velikost). Nejde o chybu v programu VeraCrypt.</string>
- <string lang="cs" key="HIDDEN_SECTOR_DETECTION_FAILED_PREVIOUSLY">VAROVÁNÍ: Zdá se, že VeraCrypt se již pokusil detekovat skryté sektory na tomto systémovém disku. Pokud jste zaznamenali jakékoliv problémy během předchozího detekčního procesu, můžete se nyní vyhnout těmto problémům přeskočením detekčního procesu skrytých sektorů. Pokud tak učiníte, VeraCrypt použije velikost určenou operačním systémem (která může být menší než opravdová velikost disku).\n\nToto chování není způsobenou chybou v programu VeraCrypt.</string>
+ <string lang="cs" key="HIDDEN_SECTOR_DETECTION_FAILED_PREVIOUSLY">UPOZORNĚNÍ: Zdá se, že VeraCrypt se již pokusil detekovat skryté sektory na tomto systémovém disku. Pokud jste zaznamenali jakékoliv problémy během předchozího detekčního procesu, můžete se nyní vyhnout těmto problémům přeskočením detekčního procesu skrytých sektorů. Pokud tak učiníte, VeraCrypt použije velikost určenou operačním systémem (která může být menší než opravdová velikost disku).\n\nToto chování není způsobenou chybou v programu VeraCrypt.</string>
<string lang="cs" key="SKIP_HIDDEN_SECTOR_DETECTION">Přeskočit vyhledávání skrytých sektorů (použít velikost určenou systémem)</string>
<string lang="cs" key="RETRY_HIDDEN_SECTOR_DETECTION">Zkusit znovu vyhledat skryté sektory</string>
<string lang="cs" key="ENABLE_BAD_SECTOR_ZEROING">Chyba: Obsah jednoho nebo více sektorů na disku nemůže být přečten (pravděpodobně kvůli fyzickému poškození).\n\nProces okamžitého zašifrování může pokračovat pouze tehdy, když budou sektory opět čitelné. VeraCrypt se může pokusit změnit jejich čitelnost tím, že do nich zapíše nuly (následně všechny nulové bloky budou zašifrovány). Všechna data uložená v nečitelných sektorech tím ale budou ztracena. Pokud se tomu chcete vyhnout, můžete se pokusit opravit části poškozených dat použitím nástroje někoho jiného.\n\nPoznámka: V případě fyzického poškození sektorů (oproti obyčejnému poškození dat a chybě kontrolních součtů) se většina zařízení snaží interně přemístit tyto sektory, pokud je učiněn pokus o zápis do nich (aby existující data v poškozených sektorech zůstala nezašifrována).\n\nChcete, aby VeraCrypt zapsal nuly do nečitelných sektorů?</string>
<string lang="cs" key="DISCARD_UNREADABLE_ENCRYPTED_SECTORS">Chyba: Obsah jednoho nebo více sektorů na disku nemůže být přečten (pravděpodobně kvůli fyzickému poškození).\n\nAbyste mohli pokračovat s dešifrováním, VeraCrypt bude muset zničit obsah nečitelných sektorů (obsah bude vyplněn náhodnými daty). Mějte prosím na paměti, že před pokračováním se můžete ještě pokusit opravit části poškozených dat pomocí nějakého nástroje třetí strany.\n\nChcete, aby VeraCrypt nyní zničil data v nečitelných sektorech?</string>
<string lang="cs" key="ZEROED_BAD_SECTOR_COUNT">Poznámka: VeraCrypt nahradil obsah %I64d nečitelných sektorů (%s) šifrovanými nulovými bloky s nešifrovaným textem.</string>
- <string lang="en" key="SKIPPED_BAD_SECTOR_COUNT">Note: VeraCrypt has replaced the content of %I64d unreadable sectors (%s) with pseudorandom data.</string>
+ <string lang="cs" key="SKIPPED_BAD_SECTOR_COUNT">Poznámka: VeraCrypt nahradil obsah %I64d nečitelných sektorů (%s) náhodnými daty.</string>
<string lang="cs" key="ENTER_TOKEN_PASSWORD">Zadejte heslo/PIN pro token '%s':</string>
<string lang="cs" key="PKCS11_LIB_LOCATION_HELP">Aby mohl VeraCrypt přistupovat k bezpečnostnímu tokenu nebo smart kartě, potřebujete nejdříve pro token/smart kartu vybrat softwarovou knihovnu PKCS #11. Tato knihovna může být dodávána se zařízením nebo může být k dispozici ke stažení na stránkách výrobce nebo třetí strany.\n\nJakmile knihovnu nainstalujete, můžete ji vybrat buď manuálně přes 'Vybrat knihovnu' nebo nechte VeraCrypt, ať ji nalezne sám, a to s pomocí 'Autodetekce knihovny' (bude prohledán pouze systémový adresář Windows).</string>
<string lang="cs" key="SELECT_PKCS11_MODULE_HELP">Poznámka: Název souboru a umístění vaší nainstalované knihovny PKCS #11 k bezpečnostnímu tokenu/smart kartě naleznete v dokumentaci dodané k tokenu/smart kartě.\n\nKlikněte na 'OK' a vyberte cestu a jméno souboru.</string>
<string lang="cs" key="NO_PKCS11_MODULE_SPECIFIED">Aby mohl VeraCrypt přistupovat k bezpečnostnímu tokenu nebo smart kartě, potřebujete nejdříve pro token/smart kartu vybrat softwarovou knihovnu PKCS #11. Vyberte 'Nastavení' &gt; 'Bezpečnostní tokeny'.</string>
- <string lang="cs" key="PKCS11_MODULE_INIT_FAILED">Inicializace knihovny PKCS #11 pro bezpečnostní token selhala.\n\nUjistěte se, prosím, že uvedená cesta a jméno souboru je platná pro knihovnu PKCS #11. Pro zadání názvu a cesty ke knihovně PKCS #11, vyberte 'Nastavení' &gt; 'Bezpečnostní tokeny'.</string>
+ <string lang="cs" key="PKCS11_MODULE_INIT_FAILED">Inicializace knihovny PKCS #11 pro bezpečnostní token nebyla úspěšná.\n\nUjistěte se, prosím, že uvedená cesta a jméno souboru je platná pro knihovnu PKCS #11. Pro zadání názvu a cesty ke knihovně PKCS #11, vyberte 'Nastavení' &gt; 'Bezpečnostní tokeny'.</string>
<string lang="cs" key="PKCS11_MODULE_AUTO_DETECTION_FAILED">V systémovém adresáři Windows nebyla nalezena žádná knihovna PKCS #11.\n\nUjistěte se, prosím, že knihovna PKCS #11 pro váš bezpečnostní token (nebo pro smart kartu) je nainstalována (např. knihovna, která je dodávána přímo s tokenem/kartou nebo může být ke stažení na stránce výrobce nebo třetích stran). Pokud je nainstalována do jiného než systémového adresáře Windows, zvolte 'Vybrat knihovnu' a najděte ji (např. složka, kde je nainstalován software k tokenu/kartě).</string>
<string lang="cs" key="NO_TOKENS_FOUND">Nebyl nalezen žádný bezpečnostní token.\n\nUjistěte se, prosím, že je váš bezpečnostní token připojen k počítači a že máte nainstalován správný ovladač tohoto zařízení.</string>
<string lang="cs" key="TOKEN_KEYFILE_NOT_FOUND">Souborový klíč bezpečnostního tokenu nebyl nalezen.</string>
@@ -1286,10 +1286,10 @@
<string lang="cs" key="TOKEN_SLOT_ID">Slot</string>
<string lang="cs" key="TOKEN_NAME">Název tokenu</string>
<string lang="cs" key="TOKEN_DATA_OBJECT_LABEL">Název souboru</string>
- <string lang="cs" key="BOOT_PASSWORD_CACHE_KEYBOARD_WARNING">DŮLEŽITÉ: Před-bootovací autentifikační hesla jsou vždy zadávána na klasické US klávesnici. Svazek, který používá heslo napsané na jiném rozložení klávesnice, se vám nemusí tím pádem podařit připojit (nejde o chybu VeraCryptu). Aby mohl být takovýto svazek s před-bootovacím autentifikačním heslem připojen, následujte tyto kroky:\n\n1) Klikněte na 'Vybrat soubor' nebo 'Vybrat zařízení' a vyberte svazek.\n2) Vyberte 'Svazky' &gt; 'Změnit heslo svazku'.\n3) Zadejte současné heslo pro svazek.\n4) Změňte rozložení klávesnice na anglickou (US) kliknutím na jazykovou ikonu dole vpravo na hlavní liště Windows a vyberte 'EN Anglická (United States)'.\n5) V VeraCryptu, do políčka nové heslo, napište před-bootovací autentifikační heslo.\n6) Heslo potvrďte ještě jednou do druhého políčka a klikněte na 'OK'.\nVAROVÁNÍ: Mějte na paměti, že pokud budete pokračovat podle těchto kroků, heslo ke svazku musíte vždy napsat na americkém rozložení klávesnice (což bude automaticky nastaveno pouze v před-bootovacím prostředí).</string>
+ <string lang="cs" key="BOOT_PASSWORD_CACHE_KEYBOARD_WARNING">DŮLEŽITÉ: Před-bootovací autentifikační hesla jsou vždy zadávána na klasické US klávesnici. Svazek, který používá heslo napsané na jiném rozložení klávesnice, se vám nemusí tím pádem podařit připojit (nejde o chybu VeraCryptu). Aby mohl být takovýto svazek s před-bootovacím autentifikačním heslem připojen, následujte tyto kroky:\n\n1) Klikněte na 'Vybrat soubor' nebo 'Vybrat zařízení' a vyberte svazek.\n2) Vyberte 'Svazky' &gt; 'Změnit heslo svazku'.\n3) Zadejte současné heslo pro svazek.\n4) Změňte rozložení klávesnice na anglickou (US) kliknutím na jazykovou ikonu dole vpravo na hlavní liště Windows a vyberte 'EN Anglická (United States)'.\n5) V VeraCryptu, do políčka nové heslo, napište před-bootovací autentifikační heslo.\n6) Heslo potvrďte ještě jednou do druhého políčka a klikněte na 'OK'.\nUPOZORNĚNÍ: Mějte na paměti, že pokud budete pokračovat podle těchto kroků, heslo ke svazku musíte vždy napsat na americkém rozložení klávesnice (což bude automaticky nastaveno pouze v před-bootovacím prostředí).</string>
<string lang="cs" key="SYS_FAVORITES_KEYBOARD_WARNING">Systémový oblíbený svazek bude připojen s použitím před-autentifikačního hesla. Pokud nějaký ze systémových oblíbených svazků používá jiné heslo, nebude připojen.</string>
- <string lang="cs" key="SYS_FAVORITES_ADMIN_ONLY_INFO">Pokud nechcete, aby běžné akce svazků VeraCrypt (např. 'Odpojit vše', automaticky-odpojit, atd.) ovlivnily oblíbené systémové svazky, měli byste zapnout volby 'Zobrazení a odpojení systémových oblíbených svazků v VeraCryptu povolit pouze administrátorům '. Navíc, pokud VeraCrypt běží bez administrátorských práv (výchozí pro Windows Vista a novější), oblíbené systémové svazky nebudou zobrazeny v písmenném seznamu disků v hlavním okně aplikace VeraCrypt.</string>
- <string lang="cs" key="SYS_FAVORITES_ADMIN_ONLY_WARNING">DŮLEŽITÉ: Mějte na paměti, že pokud je tato volba zapnuta a VeraCrypt nemá administrátorská oprávnění, připojené oblíbené systémové svazky NEJSOU zobrazeny v okně aplikace VeraCrypt a nemohou být odpojeny. Proto, pokud potřebujete např. odpojit systémový oblíbený svazek, klikněte pravým tlačítkem myši na ikonu VeraCryptu (v menu Start) a vyberte 'Spustit jako správce. Stejné omezení platí pro funkce 'Odpojit vše', 'Autom.-odpojit', klávesové zkratky 'Odpojit vše' atd.</string>
+ <string lang="cs" key="SYS_FAVORITES_ADMIN_ONLY_INFO">Pokud nechcete, aby běžné akce svazků VeraCrypt (např. 'Odpojit vše', automaticky-odpojit, atd.) ovlivnily oblíbené systémové svazky, měli byste zapnout možnosti 'Zobrazení a odpojení systémových oblíbených svazků v VeraCryptu povolit pouze administrátorům '. Navíc, pokud VeraCrypt běží bez administrátorských práv (výchozí pro Windows Vista a novější), oblíbené systémové svazky nebudou zobrazeny v písmenném seznamu disků v hlavním okně aplikace VeraCrypt.</string>
+ <string lang="cs" key="SYS_FAVORITES_ADMIN_ONLY_WARNING">DŮLEŽITÉ: Mějte na paměti, že pokud je tato volba zapnuta a VeraCrypt nemá administrátorská oprávnění, připojené oblíbené systémové svazky NEJSOU zobrazeny v okně aplikace VeraCrypt a nemohou být odpojeny. Proto, pokud potřebujete např. odpojit systémový oblíbený svazek, klikněte pravým tlačítkem myši na ikonu VeraCryptu (v nabídce Start) a vyberte 'Spustit jako správce. Stejné omezení platí pro funkce 'Odpojit vše', 'Autom.-odpojit', klávesové zkratky 'Odpojit vše' atd.</string>
<string lang="cs" key="SETTING_REQUIRES_REBOOT">Toto nastavení se projeví až po restartu operačního systému.</string>
<string lang="cs" key="COMMAND_LINE_ERROR">Chyba při překladu příkazového řádku.</string>
<string lang="cs" key="RESCUE_DISK">Záchranný disk</string>
@@ -1297,21 +1297,21 @@
<string lang="cs" key="SELECT_DEVICE_AND_MOUNT">Vybrat &amp;zařízení a připojit...</string>
<string lang="cs" key="DISABLE_NONADMIN_SYS_FAVORITES_ACCESS">Povolit zobrazení a odpojení systémových oblíbených svazků v VeraCryptu pouze administrátorům</string>
<string lang="cs" key="MOUNT_SYSTEM_FAVORITES_ON_BOOT">Připojit oblíbené systémové svazky při startu Windows (v úvodní fázi startovací procedury)</string>
- <string lang="cs" key="MOUNTED_VOLUME_DIRTY">Varování: Systém souborů na jednotce připojené jako '%s' nebyl čistě odpojen a může tak obsahovat chyby. Použití poškozeného systému souborů může způsobit ztrátu dat nebo jejich poškození.\n\nPoznámka: Před tím, než fyzicky odpojíte nebo vypnete zařízení (např. USB flash disk nebo externí disk), kde je uložen připojený svazek VeraCrypt, měli byste tento svazek nejdříve odpojit v VeraCryptu.\n\n\nChcete, aby se systém Windows pokusil najít a opravit chyby (pokud nějaké jsou) na souborovém systému?</string>
- <string lang="cs" key="SYS_FAVORITE_VOLUME_DIRTY">Varování: Jeden nebo více oblíbených systémových svazků nebyl čistě odpojen a může tím pádem obsahovat chyby systému souborů. Pro více informací zkontrolujte log systémových událostí.\n\nPoužití poškozeného systému souborů může způsobit ztrátu dat nebo jejich poškození. Měli byste příslušný systémový oblíbený svazek zkontrolovat na chyby (pravým tlačítkem myši na něj v VeraCryptu klikněte a vyberte 'Opravit systém souborů').</string>
- <string lang="cs" key="FILESYS_REPAIR_CONFIRM_BACKUP">Varování: Oprava poškozeného systému souborů nástrojem Microsoft 'chkdsk' může způsobit ztrátu souborů v poškozených oblastech. Proto se doporučuje nejdříve zálohovat soubory uložené ve svazku VeraCrypt do jiného, zdravého svazku VeraCrypt.\n\nChcete nyní opravit systém souborů?</string>
+ <string lang="cs" key="MOUNTED_VOLUME_DIRTY">UPOZORNĚNÍ: Systém souborů na jednotce připojené jako '%s' nebyl čistě odpojen a může tak obsahovat chyby. Použití poškozeného systému souborů může způsobit ztrátu dat nebo jejich poškození.\n\nPoznámka: Před tím, než fyzicky odpojíte nebo vypnete zařízení (např. USB flash disk nebo externí disk), kde je uložen připojený svazek VeraCrypt, měli byste tento svazek nejdříve odpojit v VeraCryptu.\n\n\nChcete, aby se systém Windows pokusil najít a opravit chyby (pokud nějaké jsou) na souborovém systému?</string>
+ <string lang="cs" key="SYS_FAVORITE_VOLUME_DIRTY">UPOZORNĚNÍ: Jeden nebo více oblíbených systémových svazků nebyl čistě odpojen a může tím pádem obsahovat chyby systému souborů. Pro více informací zkontrolujte log systémových událostí.\n\nPoužití poškozeného systému souborů může způsobit ztrátu dat nebo jejich poškození. Měli byste příslušný systémový oblíbený svazek zkontrolovat na chyby (pravým tlačítkem myši na něj v VeraCryptu klikněte a vyberte 'Opravit systém souborů').</string>
+ <string lang="cs" key="FILESYS_REPAIR_CONFIRM_BACKUP">UPOZORNĚNÍ: Oprava poškozeného systému souborů nástrojem Microsoft 'chkdsk' může způsobit ztrátu souborů v poškozených oblastech. Proto se doporučuje nejdříve zálohovat soubory uložené ve svazku VeraCrypt do jiného, zdravého svazku VeraCrypt.\n\nChcete nyní opravit systém souborů?</string>
<string lang="cs" key="MOUNTED_CONTAINER_FORCED_READ_ONLY">Jednotka '%s' byla připojena pouze pro čtení, protože zápis byl zamítnut. \n\nUjistěte se, prosím, že bezpečnostní oprávnění souborového svazku vám umožňuje do něj zapisovat (pravým tlačítkem myši klikněte na svazek a vyberte Vlastnosti &gt; Zabezpečení).\n\nVzhledem k problému ve Windows se může stát, že toto varování uvidíte i po změně bezpečnostního nastaveni. Nejedná se o chybu v VeraCryptu. Možným řešením je svazek přesunout, například do složky 'Dokumenty'.\n\nPokud chcete nechat svazek nezapisovatelný, zadejte u svazku atribut pouze pro čtení (pravým tlačítkem klikněte na svazek a vyberte Vlastnosti &gt; Pouze pro čtení), což potlačí toto varování.</string>
<string lang="cs" key="MOUNTED_DEVICE_FORCED_READ_ONLY">Jednotka '%s' musela být připojena pouze pro čtení, protože byl zamítnut zápis.\n\nUjistěte se, prosím, že žádná další aplikace (např. antivirový program) nepřistupuje k oddílu/zařízení, na kterém je jednotka umístěna.</string>
<string lang="cs" key="MOUNTED_DEVICE_FORCED_READ_ONLY_WRITE_PROTECTION">Jednotka '%s' byla připojena pouze pro čtení. Operační systém zjistil, že hostovací zařízení je chráněné proti zápisu.\n\nTo se může stát s upravenými ovladači chipsetu, které špatně identifikují média jako nezapisovatelná. Tento problém nezpůsobuje VeraCrypt. Můžete se ho pokusit vyřešit aktualizací nebo odinstalací jakýchkoliv upravených ovladačů chipsetu (non-Microsoft), které mate aktuálně nainstalovány na vašem systému.</string>
<string lang="cs" key="LIMIT_ENC_THREAD_POOL_NOTE">Hyper-Threading technologie poskytuje více logických jader na jedno fyzické jádro. Je-li Hyper Threading zapnut, číslo uvedené nahoře ukazuje počet logických procesorů/jader.</string>
<string lang="cs" key="NUMBER_OF_THREADS">%d vláken</string>
- <string lang="cs" key="DISABLED_HW_AES_AFFECTS_PERFORMANCE">Hardwarově akcelerované AES je vypnuto, což ovlivní výsledky výkonnostních testů (horší výkon).\n\nPro zapnutí hardwarové akcelerace vyberte 'Nastavení' &gt; 'Výkon' a zapněte odpovídající volbu.</string>
+ <string lang="cs" key="DISABLED_HW_AES_AFFECTS_PERFORMANCE">Hardwarově akcelerované AES je vypnuto, což ovlivní výsledky výkonnostních testů (horší výkon).\n\nPro zapnutí hardwarové akcelerace vyberte 'Nastavení' &gt; 'Výkon' a zapněte odpovídající možnost.</string>
<string lang="cs" key="LIMITED_THREAD_COUNT_AFFECTS_PERFORMANCE">Počet vláken je momentálně omezen, což omezí výsledky výkonnostních testů (horší výkon).\n\nPro využití plného potenciálu procesoru/ů, vyberte 'Nastavení' &gt; 'Výkon' a vypněte odpovídající nastavení.</string>
<string lang="cs" key="ASK_REMOVE_DEVICE_WRITE_PROTECTION">Chcete, aby se VeraCrypt pokusil vypnout ochranu proti zapisování do tohoto oddílu/disku?</string>
- <string lang="cs" key="CONFIRM_SETTING_DEGRADES_PERFORMANCE">VAROVÁNÍ: Tato volba může ovlivnit výkonnost.\n\nJste si jisti, že chcete použít toto nastavení?</string>
- <string lang="cs" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN_TITLE">Varování: Svazek VeraCrypt byl automaticky odpojen</string>
+ <string lang="cs" key="CONFIRM_SETTING_DEGRADES_PERFORMANCE">UPOZORNĚNÍ: Tato volba může ovlivnit výkonnost.\n\nOpravdu chcete použít toto nastavení?</string>
+ <string lang="cs" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN_TITLE">UPOZORNĚNÍ: Svazek VeraCrypt byl automaticky odpojen</string>
<string lang="cs" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN">Před tím, než fyzicky odpojíte nebo vypnete zařízení, které obsahuje připojený svazek, měli byste tento svazek nejdříve odpojit v VeraCryptu.\n\nNeočekávané a nenadále odpojení je většinou způsobeno náhle selhávajícím kabelem, diskem (šuplíkem) apod.</string>
- <string lang="en" key="UNSUPPORTED_TRUECRYPT_FORMAT">This volume was created with TrueCrypt %x.%x but VeraCrypt supports only TrueCrypt volumes created with TrueCrypt 6.x/7.x series</string>
+ <string lang="cs" key="UNSUPPORTED_TRUECRYPT_FORMAT">Tento svazek byl vytvořen v TrueCrypt %x.%x, VeraCrypt podporuje jen svazky vytvořené v TrueCrypt 6.x/7.x</string>
<string lang="cs" key="TEST">Test</string>
<string lang="cs" key="KEYFILE">Souborový klíč</string>
<string lang="cs" key="VKEY_08">Backspace</string>
@@ -1380,39 +1380,39 @@
<string lang="cs" key="TB_PER_SEC">TB/s</string>
<string lang="cs" key="PB_PER_SEC">PB/s</string>
<string lang="cs" key="TRIPLE_DOT_GLYPH_ELLIPSIS">…</string>
- <control lang="en" key="IDC_BOOT_LOADER_CACHE_PIM">Include &amp;PIM when caching pre-boot authentication password</control>
- <control lang="en" key="IDC_PREF_CACHE_PIM">Include PIM when caching a password</control>
- <control lang="en" key="IDC_SHOW_DISCONNECTED_NETWORK_DRIVES">Make disconnected network drives available for mounting</control>
- <string lang="en" key="PASSWORD_UTF8_TOO_LONG">The entered password is too long: its UTF-8 representation exceeds 64 bytes.</string>
- <string lang="en" key="PASSWORD_UTF8_INVALID">The entered password contains Unicode characters that couldn't be converted to UTF-8 representation.</string>
- <string lang="en" key="INIT_DLL">Error: Failed to load a system library.</string>
- <string lang="en" key="ERR_EXFAT_INVALID_VOLUME_SIZE">The volume file size specified in the command line is incompatible with selected exFAT filesystem.</string>
- <control lang="en" key="IDT_ENTROPY_BAR">Randomness Collected From Mouse Movements</control>
- <control lang="en" key="IDT_VOLUME_ID">Volume ID:</control>
- <string lang="en" key="VOLUME_ID">Volume ID</string>
- <control lang="en" key="IDC_FAVORITE_USE_VOLUME_ID">Use Volume ID to mount favorite</control>
- <string lang="en" key="VOLUME_ID_INVALID">The Volume ID value is invalid</string>
- <string lang="en" key="VOLUME_ID_NOT_FOUND">No Volume with the specified ID was found on the system</string>
- <string lang="en" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Copy Value to Clipboard...</string>
- <control lang="en" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)</control>
- <string lang="en" key="DISABLE_BOOT_LOADER_PIM_PROMPT">WARNING: Please keep in mind that if you enable this option, the PIM value will be stored unencrypted on the disk.\n\nAre you sure you want to enable this option?</string>
- <string lang="en" key="PIM_TOO_BIG">Personal Iterations Multiplier (PIM) maximum value is 2147468.</string>
- <control lang="en" key="IDC_SKIP_RESCUE_VERIFICATION">Skip Rescue Disk verification</control>
- <control lang="en" key="IDC_HIDE_WAITING_DIALOG">Don't show wait message dialog when performing operations</control>
- <control lang="en" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Do not request Hash algorithm in the pre-boot authentication screen</control>
- <string lang="en" key="GOST89_HELP">The GOST block cipher, defined in the standard GOST 28147-89 under name Magma, is a Soviet and Russian government standard symmetric key block cipher.\n\nDeveloped in the 1970s, the standard had been marked "Top Secret" and then downgraded to "Secret" in 1990. It was a Soviet alternative to the United States standard algorithm, DES.</string>
- <string lang="en" key="KUZNYECHIK_HELP">Kuznyechik is a block cipher first published in 2015 and defined in the National Standard of the Russian Federation GOST R 34.12-2015 and also in RFC 7801. 256-bit key, 128-bit block. Mode of operation is XTS.</string>
- <string lang="en" key="CAMELLIA_HELP">Jointly developed by Mitsubishi Electric and NTT of Japan. First published on 2000. 256-bit key, 128-bit block. Mode of operation is XTS. It has been approved for use by the ISO/IEC, the European Union's NESSIE project and the Japanese CRYPTREC project.</string>
- <string lang="en" key="TIME">Time</string>
- <string lang="en" key="ITERATIONS">Iterations</string>
- <string lang="en" key="PRE-BOOT">Pre-Boot</string>
- <string lang="en" key="RESCUE_DISK_EFI_INFO">Before you can encrypt the partition, you must create a VeraCrypt Rescue Disk (VRD), which serves the following purposes:\n\n- If the VeraCrypt Boot Loader, master key, or other critical data gets damaged, the VRD allows you to restore it (note, however, that you will still have to enter the correct password then).\n\n- If Windows gets damaged and cannot start, the VRD allows you to permanently decrypt the partition before Windows starts.\n\n- The VRD will contain a backup of the present EFI boot loader and will allow you to restore it if necessary.\n\nThe VeraCrypt Rescue Disk ZIP image will be created in the location specified below.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you need to extract it to a USB stick that is formatted as FAT/FAT32.\n\n%lsAfter you create the Rescue Disk, click Next to verify that it has been correctly created.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you should either extract the image to a USB stick that is formatted as FAT/FAT32 or move it to a safe location for later use.\n\n%lsClick Next to continue.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">IMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\n</string>
- <string lang="en" key="RESCUE_DISK_EFI_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk, please eject and reinsert the USB stick; then click Next to try again. If this does not help, please try another USB stick and/or another ZIP software.\n\nIf you have not extracted the Rescue Disk yet, please do so, and then click Next.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created before you started this wizard, please note that such Rescue Disk cannot be used, because it was created for a different master key. You need to extract the newly generated Rescue Disk ZIP image.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk image to a USB stick, please eject it and reinsert it; then try again. If this does not help, please try other ZIP software and/or medium.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created for a different master key, password, salt, etc., please note that such Rescue Disk will always fail this verification. To create a new Rescue Disk fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">The Rescue Disk image has been created and stored in this file:\n%s\n\nNow you need to extract the Rescue Disk image to a USB stick that is formatted as FAT/FAT32.\n\nIMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\nAfter you create the Rescue Disk, select 'System' > 'Verify Rescue Disk' to verify that it has been correctly created.</string>
+ <control lang="cs" key="IDC_BOOT_LOADER_CACHE_PIM">Zahrnout &amp;PIM do mezipaměti při před-bootovací autentifikaci hesla</control>
+ <control lang="cs" key="IDC_PREF_CACHE_PIM">Zahrnout PIM při uložení hesla do mezipaměti</control>
+ <control lang="cs" key="IDC_SHOW_DISCONNECTED_NETWORK_DRIVES">Odpojené síťové disky budou dostupné pro připojení</control>
+ <string lang="cs" key="PASSWORD_UTF8_TOO_LONG">Zadané heslo je moc dlouhé: jeho reprezentace v UTF-8 přesahuje 64 bajtů.</string>
+ <string lang="cs" key="PASSWORD_UTF8_INVALID">Zadané heslo obsahuje znaky v Unicode, které nemohou být převedeny do UTF-8.</string>
+ <string lang="cs" key="INIT_DLL">Chyba: nebylo možné načíst systémovou knihovnu.</string>
+ <string lang="cs" key="ERR_EXFAT_INVALID_VOLUME_SIZE">Velikost souboru ve svazku specifikovaná v příkazovém řádku je nekompatibilní s vybraným souborovým systémem exFAT.</string>
+ <control lang="cs" key="IDT_ENTROPY_BAR">Náhodně sesbíráno z pohybu myši</control>
+ <control lang="cs" key="IDT_VOLUME_ID">ID svazku:</control>
+ <string lang="cs" key="VOLUME_ID">ID svazku</string>
+ <control lang="cs" key="IDC_FAVORITE_USE_VOLUME_ID">Pro připojení oblíbených použít ID svazku</control>
+ <string lang="cs" key="VOLUME_ID_INVALID">ID svazku je neplatné</string>
+ <string lang="cs" key="VOLUME_ID_NOT_FOUND">V systému nebyl nalezen svazek se určeným ID</string>
+ <string lang="cs" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Kopírovat hodnotu do schránky...</string>
+ <control lang="cs" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Při před-bootovací obrazovce nepožadovat PIM (hodnota PIM je uložena nezašifrovaně na disku)</control>
+ <string lang="cs" key="DISABLE_BOOT_LOADER_PIM_PROMPT">UPOZORNĚNÍ: uvědomte si prosím, že pokud povolíte tuto možnost, bude hodnota PIM uložena nezašifrovaně na disku.\n\nUrčitě chcete povolit tuto možnost?</string>
+ <string lang="cs" key="PIM_TOO_BIG">Maximální hodnota pro PIM je 2147468.</string>
+ <control lang="cs" key="IDC_SKIP_RESCUE_VERIFICATION">Přerušit ověření záchraného disku</control>
+ <control lang="cs" key="IDC_HIDE_WAITING_DIALOG">Nezobrazovat vyčkávací dialog při zpracování operací</control>
+ <control lang="cs" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Nevyžadovat hashovací algoritmus v autorizační před-bootovací obrazovce</control>
+ <string lang="cs" key="GOST89_HELP">GOST bloková šifra, definovaná jako standard GOST 28147-89 pod názvem Magma, je standardní symetrickou blokovou šifrou.\n\nVyvynutou v roce 1970, standard byl označen jako "Přísně tajné" a v roce 1990 snížen na stupeň "Tajné". Jde o Sovětskou alternativu k standardním algoritmům Spojených Států - DES.</string>
+ <string lang="cs" key="KUZNYECHIK_HELP">Kuznyechik je bloková šifra prvě publikovaná v roce 2015 v Národním standartu Ruské federace GOST R 34.12-2015 a také v RFC 7801. 256 bitový klíč, 128 bitový blok. Operační režim je XTS.</string>
+ <string lang="cs" key="CAMELLIA_HELP">Společné vytvořeno v Mitsubishi Electric a NTT of Japan. Prvně publikováno v roce 2000. 256 bitový klíč, 128 bitový blok. Operační režim je XTS. Schváleno pro použití jako ISO/IEC, projektem NESSIE v EU a Japonským projektem CRYPTREC.</string>
+ <string lang="cs" key="TIME">Čas</string>
+ <string lang="cs" key="ITERATIONS">Iterace</string>
+ <string lang="cs" key="PRE-BOOT">Před-bootovací</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_INFO">Předtím, než hodláte zašifrovat oddíl, musíte vytvořit záchranný disk VeraCrypt (VRD), který má následující účel:\n\n- Pokud VeraCrypt Boot Loader, master key, nebo jiná důležitá data jsou poškozena, VRD vám je umožní obnovit (nicméně stále pak musíte zadat správné heslo).\n\n- Pokud systém Windows bude poškozen a není schopen spuštění, VRD vám umožní permanentně dešifrovat oddíl před spuštěním Windows.\n\n- VRD bude obsahovat zálohu současného EFI boot loaderu a umožní vám tak jeho obnovení.\n\nObraz ve formátu *.zip pro záchranný disk Veracryptu bude vytvořen na níže uvedeném umístění.</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_EXTRACT_INFO">Záchranný disk v obrazu ve formátu *.zip byl vytvořen a uložen v tomto souboru:\n%s\n\nNyní ho musíte rozbalit na zařízení USB, které je formátováno jako FAT/FAT32.\n\n%lsPo vytvoření záchranného disku, pro jeho ověření, klikněte na tlačítko "Další".</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">Záchranný disk v obrazu ve formátu *.zip byl vytvořen a uložen v tomto souboru:\n%s\n\nNyní ho musíte rozbalit na zařízení USB, které je formátováno jako FAT/FAT32 nebo ho pro pozdější použití přesuňte bezpečné umístění.\n\n%lsPro pokračování, klikněte na tlačítko "Další".</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">DŮLEŽITÉ: nezapomeňte, že soubor *.zip musí být rozbalen přímo do adresáře zařízení USB. Například, pokud je písmeno jednotky USB "E:", tak rozbalení souboru *.zip by mělo vytvořit adresář E:\\EFI na zařízení USB.\n\n</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_CHECK_FAILED">Není možné ověřit, že záchranný disk byl správně rozbalen.\n\nByl-li rozbalen záchranný disk na zařízení USB, vyjměte a znovu zasuňte zařízení USB a klikněte na tlačítko "Další". Pokud to nepomůže, zkuste jiné zařízení USB a/nebo jiný program pro práci s archívem *zip.\n\nPokud nebyl ještě záchranný disk rozbalen, učiňte tak a klikněte na tlačítko "Další".\n\nZkoušel-li jste ověřit záchranný disk Veracrypt vytvořený před spuštěním tohoto průvodce, mějte na paměti, že takový záchranný disk nemůže být použit, neboť byl vytvořen s jiným klíčem. Musíte rozbalit nově vygenerovaný obraz záchranného disku z formátu *.zip.</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Není možné ověřit, že záchranný disk byl správně rozbalen.\n\nByl-li rozbalen záchranný disk na zařízení USB, vyjměte a znovu zasuňte zařízení USB a klikněte na tlačítko "Další". Pokud to nepomůže, zkuste jiné zařízení USB a/nebo jiný program pro práci s archívem *zip.\n\nZkoušel-li jste ověřit záchranný disk vytvořený pro jiný master key, heslo, zařízení, atd., uvědomte si, že kontrola bude vždy neúspěšná. Pro vytvoření nového záchranného disku plně kompatibilního s vaším současnou konfigurací, vyberte možnost v nabídce "Systém > Vytvořit záchranný disk".</string>
+ <string lang="cs" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">Obraz záchranného disku byl vytvořen a uložen v tomto souboru:\n%s\n\nNyní stačí rozbalit obraz na zařízení USB, které je naformátováno jako FAT/FAT32.\n\nDŮLEŽITÉ: Uvědomte si, že soubor *.zip musí být rozbalen přímo do hlavního adresáře zařízení USB. Například, pokud je písmeno jednotky USB "E:", tak rozbalení souboru *.zip by mělo vytvořit adresář E:\\EFI na zařízení USB.\n\nJakmile vytvoříte záchranný disk, vyberte nabídku "Systém > Ověřit záchranný disk" a tím si ověříte jestli byl správně vytvořen.</string>
</localization>
<!-- XML Schema -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
diff --git a/Translations/Language.da.xml b/Translations/Language.da.xml
index f343fa9..ee44502 100644
--- a/Translations/Language.da.xml
+++ b/Translations/Language.da.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="da" name="Dansk" en-name="Danish" version="0.1.0" translators="Lasse Bond" />
<!-- Fonts -->
diff --git a/Translations/Language.de.xml b/Translations/Language.de.xml
index 16b8377..bbc31ea 100644
--- a/Translations/Language.de.xml
+++ b/Translations/Language.de.xml
@@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
- <!-- Languages -->
+ <localization prog-version="1.19">
+ <!-- Sprachen -->
<language langid="de" name="Deutsch" en-name="German" version="1.1.8" translators="Harry Haller, Alexander Schorg, Simon Frankenberger, David Arndt, H. Sauer, Dulla, Ettore Atalan, Matthias Kolja Miehl" />
- <!-- Fonts -->
+ <!-- Schriftarten -->
<font lang="de" class="normal" size="11" face="default" />
<font lang="de" class="bold" size="13" face="Arial" />
<font lang="de" class="fixed" size="12" face="Lucida Console" />
<font lang="de" class="title" size="21" face="Times New Roman" />
- <!-- Controls -->
+ <!-- Steuerelemente -->
<control lang="de" key="IDCANCEL">Abbrechen</control>
<control lang="de" key="IDC_ALL_USERS">Für &amp;alle Benutzer installieren</control>
- <control lang="de" key="IDC_BROWSE">Su&amp;chen...</control>
+ <control lang="de" key="IDC_BROWSE">Su&amp;chen ...</control>
<control lang="de" key="IDC_DESKTOP_ICON">VeraCrypt-Symbol auf dem &amp;Desktop erstellen</control>
- <control lang="de" key="IDC_DONATE">Jetzt spenden...</control>
+ <control lang="de" key="IDC_DONATE">Jetzt spenden ...</control>
<control lang="de" key="IDC_FILE_TYPE">Verknüpft die .hc &amp;Dateierweiterung mit VeraCrypt</control>
<control lang="de" key="IDC_OPEN_CONTAINING_FOLDER">&amp;Den Speicherort nach dem Beenden öffnen</control>
<control lang="de" key="IDC_PROG_GROUP">VeraCrypt ins &amp;Startmenü eintragen</control>
@@ -47,7 +47,7 @@
<control lang="de" key="IDC_KEYFILES_ENABLE">Schlüsselda&amp;t. verwenden</control>
<control lang="de" key="IDC_KEYFILES_TRY_EMPTY_PASSWORD">Versuche zuerst ohne Passwort einzubinden</control>
<control lang="de" key="IDC_KEYFILES_RANDOM_SIZE">Zufällige Größe (64 &lt;-&gt; 1048576)</control>
- <control lang="de" key="IDC_KEY_FILES">Schlüsselda&amp;teien...</control>
+ <control lang="de" key="IDC_KEY_FILES">Schlüsselda&amp;teien ...</control>
<control lang="de" key="IDC_LINK_HASH_INFO">Infos über Hash-Algorithmen</control>
<control lang="de" key="IDC_LINK_MORE_INFO_ABOUT_CIPHER">Weitere Informationen</control>
<control lang="de" key="IDC_LINK_PIM_INFO">Informationen zu PIM</control>
@@ -111,9 +111,9 @@
<control lang="de" key="IDC_AUTORUN_START">&amp;VeraCrypt starten</control>
<control lang="de" key="IDC_AUTO_DETECT_PKCS11_MODULE">Bibliothek auto&amp;matisch erkennen</control>
<control lang="de" key="IDC_BOOT_LOADER_CACHE_PASSWORD">&amp;Prä-Boot-Authentifikationspasswort in Treiber-Speicher schr. (zum Einbinden v. Nicht-System-Volume)</control>
- <control lang="de" key="IDC_BROWSE_DIRS">Durchsuchen...</control>
- <control lang="de" key="IDC_BROWSE_FILES">Durchsuchen...</control>
- <control lang="de" key="IDC_CACHE">Passwort u. Schlüsseldat. im &amp;Cache halten</control>
+ <control lang="de" key="IDC_BROWSE_DIRS">Durchsuchen ...</control>
+ <control lang="de" key="IDC_BROWSE_FILES">Durchsuchen ...</control>
+ <control lang="de" key="IDC_CACHE">Passwort und Schlüsseldatei im &amp;Cache halten</control>
<control lang="de" key="IDC_CLOSE_BKG_TASK_WHEN_NOVOL">&amp;Beenden, wenn alle Vol. getrennt wurden</control>
<control lang="de" key="IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT">Token-&amp;Sitzung schließen, nachdem ein Volume erfolgreich eingebunden wurde</control>
<control lang="de" key="IDC_COPY_EXPANDER">Volume-Erweiterer hinzufügen</control>
@@ -146,15 +146,15 @@
<control lang="de" key="IDC_HK_MOD_WIN">Win</control>
<control lang="de" key="IDC_HOTKEY_ASSIGN">Zuweisen</control>
<control lang="de" key="IDC_HOTKEY_REMOVE">Aufheben</control>
- <control lang="de" key="IDC_KEYFILES">&amp;Schlüsseldat...</control>
+ <control lang="de" key="IDC_KEYFILES">&amp;Schlüsseldat ...</control>
<control lang="de" key="IDC_LIMIT_ENC_THREAD_POOL">Diese Anzahl von Prozessoren NICHT für Ver-/Entschlüsselung nutzen:</control>
<control lang="de" key="IDC_MORE_INFO_ON_HW_ACCELERATION">Mehr Informationen</control>
<control lang="de" key="IDC_MORE_INFO_ON_THREAD_BASED_PARALLELIZATION">Mehr Informationen</control>
- <control lang="de" key="IDC_MORE_SETTINGS">Mehr Einstellungen...</control>
+ <control lang="de" key="IDC_MORE_SETTINGS">Mehr Einstellungen ...</control>
<control lang="de" key="IDC_MOUNTALL">&amp;Alle Datentr. einbinden</control>
- <control lang="de" key="IDC_MOUNT_OPTIONS">&amp;Optionen...</control>
+ <control lang="de" key="IDC_MOUNT_OPTIONS">&amp;Optionen ...</control>
<control lang="de" key="IDC_MOUNT_READONLY">Als schreib&amp;geschütztes Laufwerk einbinden</control>
- <control lang="de" key="IDC_NEW_KEYFILES">Schlüssel&amp;dat...</control>
+ <control lang="de" key="IDC_NEW_KEYFILES">Schlüssel&amp;dat ...</control>
<control lang="de" key="IDC_OLD_PIM_HELP">(Leer oder 0 für vordefinierte Iterationen)</control>
<control lang="de" key="IDC_PIM_HELP">(Leer oder 0 für vordefinierte Iterationen)</control>
<control lang="de" key="IDC_PREF_BKG_TASK_ENABLE">&amp;Aktiv</control>
@@ -176,17 +176,17 @@
<control lang="de" key="IDC_PREF_WIPE_CACHE_ON_EXIT">Cache beim Beenden sicher &amp;löschen</control>
<control lang="de" key="IDC_PRESERVE_TIMESTAMPS">Änderungszeiten von Containerdateien erhalten</control>
<control lang="de" key="IDC_RESET_HOTKEYS">Zu&amp;rücksetzen</control>
- <control lang="de" key="IDC_SELECT_DEVICE">Datent&amp;räger...</control>
- <control lang="de" key="IDC_SELECT_FILE">&amp;Datei...</control>
- <control lang="de" key="IDC_SELECT_PKCS11_MODULE">Wähle &amp;Bibliothek...</control>
+ <control lang="de" key="IDC_SELECT_DEVICE">Datent&amp;räger ...</control>
+ <control lang="de" key="IDC_SELECT_FILE">&amp;Datei ...</control>
+ <control lang="de" key="IDC_SELECT_PKCS11_MODULE">&amp;Bibliothek auswählen ...</control>
<control lang="de" key="IDC_SHOW_PASSWORD_CHPWD_NEW">Passwort anze&amp;igen</control>
<control lang="de" key="IDC_SHOW_PASSWORD_CHPWD_ORI">Passwort an&amp;zeigen</control>
<control lang="de" key="IDC_TRAVEL_OPEN_EXPLORER">&amp;Explorer-Fenster für eingebundenes Volume öffnen</control>
<control lang="de" key="IDC_TRAV_CACHE_PASSWORDS">Passwort im Cache halten</control>
<control lang="de" key="IDC_TRUECRYPT_MODE">TrueCrypt-Modus</control>
<control lang="de" key="IDC_UNMOUNTALL">A&amp;lle trennen</control>
- <control lang="de" key="IDC_VOLUME_PROPERTIES">Eigenscha&amp;ften...</control>
- <control lang="de" key="IDC_VOLUME_TOOLS">Vol.-&amp;Operationen...</control>
+ <control lang="de" key="IDC_VOLUME_PROPERTIES">Eigenscha&amp;ften ...</control>
+ <control lang="de" key="IDC_VOLUME_TOOLS">Vol.-&amp;Operationen ...</control>
<control lang="de" key="IDC_WIPE_CACHE">&amp;Cache sicher löschen</control>
<control lang="de" key="IDD_DEFAULT_MOUNT_PARAMETERS">VeraCrypt – Parameter beim Einbinden</control>
<control lang="de" key="IDD_FAVORITE_VOLUMES">VeraCrypt – Favoriten-Volumes</control>
@@ -201,63 +201,63 @@
<control lang="de" key="IDD_TRAVELER_DLG">VeraCrypt Traveler-Disk-Installation</control>
<control lang="de" key="IDD_VOLUME_PROPERTIES">Eigenschaften des VeraCrypt-Volumes</control>
<control lang="de" key="IDM_ABOUT">&amp;Infos über VeraCrypt</control>
- <control lang="de" key="IDM_ADD_REMOVE_VOL_KEYFILES">Schlüssel&amp;dateien dem/vom Volume hinzufügen/entfernen...</control>
- <control lang="de" key="IDM_ADD_VOLUME_TO_FAVORITES">Eingebundenes Volume zu Favoriten hinzufügen...</control>
- <control lang="de" key="IDM_ADD_VOLUME_TO_SYSTEM_FAVORITES">Eingebundenes Volume zu Systemfavoriten hinzufügen. ..</control>
- <control lang="de" key="IDM_ANALYZE_SYSTEM_CRASH">Einen Systemabsturz analysieren...</control>
- <control lang="de" key="IDM_BACKUP_VOL_HEADER">Volume-Kopfdaten s&amp;ichern...</control>
- <control lang="de" key="IDM_BENCHMARK">&amp;Benchmark-Test...</control>
- <control lang="de" key="IDM_CHANGE_HEADER_KEY_DERIV_ALGO">Algorithmus für &amp;Kopfdatenschlüsselberechnung ändern...</control>
- <control lang="de" key="IDM_CHANGE_PASSWORD">Volume-&amp;Passwort ändern...</control>
- <control lang="de" key="IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO">Algorithmus für Kopfdatenschlüsselberechnung ändern...</control>
- <control lang="de" key="IDM_CHANGE_SYS_PASSWORD">Passwort ändern...</control>
+ <control lang="de" key="IDM_ADD_REMOVE_VOL_KEYFILES">Schlüssel&amp;dateien dem/vom Volume hinzufügen/entfernen ...</control>
+ <control lang="de" key="IDM_ADD_VOLUME_TO_FAVORITES">Eingebundenes Volume zu Favoriten hinzufügen ...</control>
+ <control lang="de" key="IDM_ADD_VOLUME_TO_SYSTEM_FAVORITES">Eingebundenes Volume zu Systemfavoriten hinzufügen ...</control>
+ <control lang="de" key="IDM_ANALYZE_SYSTEM_CRASH">Einen Systemabsturz analysieren ...</control>
+ <control lang="de" key="IDM_BACKUP_VOL_HEADER">Volume-Kopfdaten s&amp;ichern ...</control>
+ <control lang="de" key="IDM_BENCHMARK">&amp;Benchmark-Test ...</control>
+ <control lang="de" key="IDM_CHANGE_HEADER_KEY_DERIV_ALGO">Algorithmus für &amp;Kopfdatenschlüsselberechnung ändern ...</control>
+ <control lang="de" key="IDM_CHANGE_PASSWORD">Volume-&amp;Passwort ändern ...</control>
+ <control lang="de" key="IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO">Algorithmus für Kopfdatenschlüsselberechnung ändern ...</control>
+ <control lang="de" key="IDM_CHANGE_SYS_PASSWORD">Passwort ändern ...</control>
<control lang="de" key="IDM_CLEAR_HISTORY">Volume-Ve&amp;rlauf löschen</control>
<control lang="de" key="IDM_CLOSE_ALL_TOKEN_SESSIONS">Alle Sicherheitstoken-Sitzungen schließen</control>
<control lang="de" key="IDM_CONTACT">&amp;Kontakt</control>
- <control lang="de" key="IDM_CREATE_HIDDEN_OS">Verstecktes Betriebssystem erstellen...</control>
- <control lang="de" key="IDM_CREATE_RESCUE_DISK">Rettungsdatenträger erstellen...</control>
- <control lang="de" key="IDM_CREATE_VOLUME">&amp;Neues Volume erstellen...</control>
- <control lang="de" key="IDM_DECRYPT_NONSYS_VOL">Dauerhaft entschlüsseln...</control>
- <control lang="de" key="IDM_DEFAULT_KEYFILES">&amp;Standardschlüsseldateien...</control>
- <control lang="de" key="IDM_DEFAULT_MOUNT_PARAMETERS">Standardparameter beim Einbinden...</control>
+ <control lang="de" key="IDM_CREATE_HIDDEN_OS">Verstecktes Betriebssystem erstellen ...</control>
+ <control lang="de" key="IDM_CREATE_RESCUE_DISK">Rettungsdatenträger erstellen ...</control>
+ <control lang="de" key="IDM_CREATE_VOLUME">&amp;Neues Volume erstellen ...</control>
+ <control lang="de" key="IDM_DECRYPT_NONSYS_VOL">Dauerhaft entschlüsseln ...</control>
+ <control lang="de" key="IDM_DEFAULT_KEYFILES">&amp;Standardschlüsseldateien ...</control>
+ <control lang="de" key="IDM_DEFAULT_MOUNT_PARAMETERS">Standardparameter beim Einbinden ...</control>
<control lang="de" key="IDM_DONATE">Jetzt spenden...</control>
- <control lang="de" key="IDM_ENCRYPT_SYSTEM_DEVICE">System-Partition/Laufwerk verschlüsseln...</control>
+ <control lang="de" key="IDM_ENCRYPT_SYSTEM_DEVICE">System-Partition/Laufwerk verschlüsseln ...</control>
<control lang="de" key="IDM_FAQ">Häufig gestellte &amp;Fragen (FAQ)</control>
<control lang="de" key="IDM_HELP">&amp;Benutzerhandbuch</control>
<control lang="de" key="IDM_HOMEPAGE">Webseite</control>
- <control lang="de" key="IDM_HOTKEY_SETTINGS">&amp;Tastenkombinationen...</control>
+ <control lang="de" key="IDM_HOTKEY_SETTINGS">&amp;Tastenkombinationen ...</control>
<control lang="de" key="IDM_KEYFILE_GENERATOR">&amp;Schlüsseldatei(en) generieren</control>
- <control lang="de" key="IDM_LANGUAGE">&amp;Sprache...</control>
+ <control lang="de" key="IDM_LANGUAGE">&amp;Sprache ...</control>
<control lang="de" key="IDM_LICENSE">&amp;Lizenzvereinbarung</control>
- <control lang="de" key="IDM_MANAGE_TOKEN_KEYFILES">Sicherheitstoken-Schlüsseldateien verwalten...</control>
+ <control lang="de" key="IDM_MANAGE_TOKEN_KEYFILES">Sicherheitstoken-Schlüsseldateien verwalten ...</control>
<control lang="de" key="IDM_MOUNTALL">&amp;Alle Datenträger-Volumes automatisch einbinden</control>
<control lang="de" key="IDM_MOUNT_FAVORITE_VOLUMES">&amp;Favoriten einbinden</control>
- <control lang="de" key="IDM_MOUNT_SYSENC_PART_WITHOUT_PBA">Ohne Prä-Boot-&amp;Authentifikation einbinden...</control>
+ <control lang="de" key="IDM_MOUNT_SYSENC_PART_WITHOUT_PBA">Ohne Prä-Boot-&amp;Authentifikation einbinden ...</control>
<control lang="de" key="IDM_MOUNT_VOLUME">Volume &amp;einbinden</control>
<control lang="de" key="IDM_MOUNT_VOLUME_OPTIONS">Volume einbinden (mit &amp;Optionen)</control>
<control lang="de" key="IDM_NEWS">&amp;Neuigkeiten</control>
<control lang="de" key="IDM_ONLINE_HELP">Online-&amp;Hilfe</control>
<control lang="de" key="IDM_ONLINE_TUTORIAL">&amp;Anleitung für Anfänger</control>
- <control lang="de" key="IDM_ORGANIZE_FAVORITES">Favoriten-Volumes Einstellungen...</control>
- <control lang="de" key="IDM_ORGANIZE_SYSTEM_FAVORITES">Systemfavoriten-Volumes Einstellungen...</control>
+ <control lang="de" key="IDM_ORGANIZE_FAVORITES">Favoriten-Volumes Einstellungen ...</control>
+ <control lang="de" key="IDM_ORGANIZE_SYSTEM_FAVORITES">Systemfavoriten-Volumes Einstellungen ...</control>
<control lang="de" key="IDM_PERFORMANCE_SETTINGS">Leistung/Treiberkonfiguration</control>
<control lang="de" key="IDM_PERMANENTLY_DECRYPT_SYS">System-Partition/Laufwerk dauerhaft entschlüsseln</control>
- <control lang="de" key="IDM_PREFERENCES">&amp;Voreinstellungen...</control>
+ <control lang="de" key="IDM_PREFERENCES">&amp;Voreinstellungen ...</control>
<control lang="de" key="IDM_REFRESH_DRIVE_LETTERS">&amp;Laufwerksbuchstaben aktualisieren</control>
- <control lang="de" key="IDM_REMOVE_ALL_KEYFILES_FROM_VOL">&amp;Alle Schlüsseldateien vom Volume entfernen...</control>
- <control lang="de" key="IDM_RESTORE_VOL_HEADER">Volume-Kopfdaten &amp;wiederherstellen...</control>
+ <control lang="de" key="IDM_REMOVE_ALL_KEYFILES_FROM_VOL">&amp;Alle Schlüsseldateien vom Volume entfernen ...</control>
+ <control lang="de" key="IDM_RESTORE_VOL_HEADER">Volume-Kopfdaten &amp;wiederherstellen ...</control>
<control lang="de" key="IDM_RESUME_INTERRUPTED_PROC">Unterbrochenen Prozess fortsetzen</control>
- <control lang="de" key="IDM_SELECT_DEVICE">Datent&amp;räger oder Partition auswählen...</control>
- <control lang="de" key="IDM_SELECT_FILE">&amp;Datei auswählen...</control>
+ <control lang="de" key="IDM_SELECT_DEVICE">Datent&amp;räger oder Partition auswählen ...</control>
+ <control lang="de" key="IDM_SELECT_FILE">&amp;Datei auswählen ...</control>
<control lang="de" key="IDM_SYSENC_RESUME">Unterbrochenen Vorgang fortsetzen</control>
- <control lang="de" key="IDM_SYSENC_SETTINGS">Systemverschlüsselung...</control>
- <control lang="de" key="IDM_SYSTEM_ENCRYPTION_STATUS">Eigenschaften...</control>
- <control lang="de" key="IDM_SYS_ENC_SETTINGS">Einstellungen...</control>
- <control lang="de" key="IDM_SYS_FAVORITES_SETTINGS">Systemfavoriten-Volumes...</control>
+ <control lang="de" key="IDM_SYSENC_SETTINGS">Systemverschlüsselung ...</control>
+ <control lang="de" key="IDM_SYSTEM_ENCRYPTION_STATUS">Eigenschaften ...</control>
+ <control lang="de" key="IDM_SYS_ENC_SETTINGS">Einstellungen ...</control>
+ <control lang="de" key="IDM_SYS_FAVORITES_SETTINGS">Systemfavoriten-Volumes ...</control>
<control lang="de" key="IDM_TC_DOWNLOADS">&amp;Downloads</control>
- <control lang="de" key="IDM_TEST_VECTORS">&amp;Testvektoren...</control>
- <control lang="de" key="IDM_TOKEN_PREFERENCES">Sicherheitstokens...</control>
- <control lang="de" key="IDM_TRAVELER">Traveler-Disk-Installation...</control>
+ <control lang="de" key="IDM_TEST_VECTORS">&amp;Testvektoren ...</control>
+ <control lang="de" key="IDM_TOKEN_PREFERENCES">Sicherheitstokens ...</control>
+ <control lang="de" key="IDM_TRAVELER">Traveler-Disk-Installation ...</control>
<control lang="de" key="IDM_UNMOUNTALL">A&amp;lle Volumes trennen</control>
<control lang="de" key="IDM_UNMOUNT_VOLUME">Volume &amp;trennen</control>
<control lang="de" key="IDM_VERIFY_RESCUE_DISK">Rettungsdatenträger überprüfen</control>
@@ -293,7 +293,7 @@
<control lang="de" key="IDT_NEW">Neu</control>
<control lang="de" key="IDT_NEW_PASSWORD">Passwort:</control>
<control lang="de" key="IDT_PARALLELIZATION_OPTIONS">Thread-basierte Parallelisierung</control>
- <control lang="de" key="IDT_PKCS11_LIB_PATH">Pfad der PKCS #11 Bibliothek</control>
+ <control lang="de" key="IDT_PKCS11_LIB_PATH">Pfad der PKCS #11-Bibliothek</control>
<control lang="de" key="IDT_PKCS5_PRF">PKCS-5 PRF:</control>
<control lang="de" key="IDT_NEW_PKCS5_PRF">PKCS-5 PRF:</control>
<control lang="de" key="IDT_PW_CACHE_OPTIONS">Passwort-Cache (im Speicher des VeraCrypt-Treibers)</control>
@@ -304,21 +304,21 @@
<control lang="de" key="IDT_TRAVEL_ROOT">Traveler-Disk-Dateien erstellen in (Traveler-Disk-Stammverzeichnis):</control>
<control lang="de" key="IDT_VOLUME">Volume</control>
<control lang="de" key="IDT_WINDOWS_RELATED_SETTING">Windows</control>
- <control lang="de" key="IDC_ADD_KEYFILE_PATH">&amp;Pfad...</control>
+ <control lang="de" key="IDC_ADD_KEYFILE_PATH">&amp;Pfad ...</control>
<control lang="de" key="IDC_AUTO">&amp;Auto-Test für alle</control>
<control lang="de" key="IDC_CONTINUE">&amp;Fortsetzen</control>
<control lang="de" key="IDC_DECRYPT">&amp;Entschlüsseln</control>
<control lang="de" key="IDC_DELETE">&amp;Löschen</control>
<control lang="de" key="IDC_ENCRYPT">&amp;Verschlüsseln</control>
- <control lang="de" key="IDC_EXPORT">&amp;Exportieren...</control>
+ <control lang="de" key="IDC_EXPORT">&amp;Exportieren ...</control>
<control lang="de" key="IDC_GENERATE_AND_SAVE_KEYFILE">Schlüsseldatei(en) &amp;erstellen und speichern</control>
<control lang="de" key="IDC_GENERATE_KEYFILE">Schlüsseldatei(en) &amp;generieren</control>
<control lang="de" key="IDC_GET_LANG_PACKS">Sprachpaket herunterladen</control>
<control lang="de" key="IDC_HW_AES_LABEL_LINK">Hardwarebeschleunigtes AES:</control>
- <control lang="de" key="IDC_IMPORT_KEYFILE">&amp;Schl.dateien auf den Token importieren...</control>
+ <control lang="de" key="IDC_IMPORT_KEYFILE">&amp;Schl.dateien auf den Token importieren ...</control>
<control lang="de" key="IDC_KEYADD">Dateien &amp;hinzuf.</control>
<control lang="de" key="IDC_KEYFILES_ENABLE_HIDVOL_PROT">Schlüsselda&amp;teien verw.</control>
- <control lang="de" key="IDC_KEYFILES_HIDVOL_PROT">&amp;Schlüsseldat...</control>
+ <control lang="de" key="IDC_KEYFILES_HIDVOL_PROT">&amp;Schlüsseldat ...</control>
<control lang="de" key="IDC_KEYREMOVE">Ent&amp;fernen</control>
<control lang="de" key="IDC_KEYREMOVEALL">&amp;Alle entfernen</control>
<control lang="de" key="IDC_LINK_HIDVOL_PROTECTION_INFO">Was bedeutet „Schützen von verstecktem Volume“?</control>
@@ -370,8 +370,8 @@
<control lang="de" key="IDT_SECONDARY_KEY">Sekundärer Schlüssel (hexadezimal)</control>
<control lang="de" key="IDT_SECURITY_TOKEN">Sicherheitstoken:</control>
<control lang="de" key="IDT_SORT_METHOD">Sortiermethode:</control>
- <control lang="de" key="IDT_STATIC_MODELESS_WAIT_DLG_INFO">Bitte warten. Dieser Vorgang kann sehr lange dauern...</control>
- <control lang="de" key="IDT_STATIC_MODAL_WAIT_DLG_INFO">Bitte warten...\nDieser Prozess kann sehr lange dauern und VeraCrypt kann vorübergehend hängen bleiben.</control>
+ <control lang="de" key="IDT_STATIC_MODELESS_WAIT_DLG_INFO">Bitte warten. Dieser Vorgang kann sehr lange dauern ...</control>
+ <control lang="de" key="IDT_STATIC_MODAL_WAIT_DLG_INFO">Bitte warten ...\nDieser Prozess kann sehr lange dauern und VeraCrypt kann vorübergehend hängen bleiben.</control>
<control lang="de" key="IDT_TEST_BLOCK_NUMBER">Block Nummer:</control>
<control lang="de" key="IDT_TEST_CIPHERTEXT">Chiffretext (hexadezimal)</control>
<control lang="de" key="IDT_TEST_DATA_UNIT_NUMBER">Dateneinheitnummer (64 Bit hexadezimal, die Größe einer Dateneinheit beträgt 512 Byte)</control>
@@ -595,7 +595,7 @@
<string lang="de" key="VOL_LOCK_FAILED_OFFER_FORCED_DISMOUNT">VeraCrypt kann das Volume nicht sperren weil es vom System oder von Programmen verwendet wird (es könnte offene Dateien auf dem Volume geben).\n\nMöchten sie die Trennung auf dem Volume erzwingen?</string>
<string lang="de" key="OPEN_VOL_TITLE">VeraCrypt-Volume auswählen</string>
<string lang="de" key="OPEN_TITLE">Pfad- und Dateiname angeben</string>
- <string lang="de" key="SELECT_PKCS11_MODULE">Wähle PKCS #11 Bibliothek</string>
+ <string lang="de" key="SELECT_PKCS11_MODULE">PKCS #11-Bibliothek auswählen</string>
<string lang="de" key="OUTOFMEMORY">Kein Speicher mehr vorhanden</string>
<string lang="de" key="FORMAT_DEVICE_FOR_ADVANCED_ONLY">WICHTIG: Wir empfehlen unerfahrenen Nutzern dringend eine VeraCrypt-Containerdatei auf der ausgewählten Partition/Laufwerk zu erstellen anstatt zu versuchen die gesamte Partition/Laufwerk zu verschlüsseln.\n\nWenn Sie eine VeraCrypt-Containerdatei erstellen besteht zum Beispiel (im Gegensatz zum Verschlüsseln einer ganzen Partition oder eines Laufwerks) keine Gefahr eine große Zahl von Dateien zu zerstören. Bitte beachten Sie, dass eine VeraCrypt-Containerdatei (obwohl sie eine virtuelle verschlüsselte Festplatte enthält) sich genau wie eine normale Datei verhält (sie kann z.B. kopiert, verschoben oder gelöscht werden). Für mehr Informationen siehe Kapitel „Beginner's Tutorial“ im VeraCrypt Benutzerhandbuch.\n\nSind Sie sicher, dass Sie die gesamte Partition / das gesamte Laufwerk verschlüsseln möchten?</string>
<string lang="de" key="OVERWRITEPROMPT">WARNUNG: Die Datei „%s“ existiert bereits!\n\nWICHTIG: VERACRYPT WIRD DIE DATEI NICHT VERSCHLÜSSELN SONDERN LÖSCHEN. Sind Sie sicher, dass Sie die Datei löschen möchten und mit dem neuen VeraCrypt-Container ersetzen möchten?</string>
@@ -786,8 +786,8 @@
<string lang="de" key="MEAN">Mittelwert</string>
<string lang="de" key="DRIVE">LW</string>
<string lang="de" key="SIZE">Größe</string>
- <string lang="de" key="ENCRYPTION_ALGORITHM">Verschlüsselungsalg.</string>
- <string lang="de" key="ENCRYPTION_ALGORITHM_LV">Verschlüsselungsalg.</string>
+ <string lang="de" key="ENCRYPTION_ALGORITHM">Verschlüsselungsalgorithmus</string>
+ <string lang="de" key="ENCRYPTION_ALGORITHM_LV">Verschlüsselungsalgorithmus</string>
<string lang="de" key="TYPE">Typ</string>
<string lang="de" key="VALUE">Wert</string>
<string lang="de" key="PROPERTY">Eigenschaft</string>
@@ -847,7 +847,7 @@
<string lang="de" key="EXTRACTION_FINISHED_INFO">Alle Dateien wurden erfolgreich in das angegebene Verzeichnis entpackt.</string>
<string lang="de" key="AUTO_FOLDER_CREATION">Wenn der angegebene Ordner nicht existiert wird er automatisch erstellt.</string>
<string lang="de" key="SETUP_UPGRADE_DESTINATION">Die VeraCrypt-Aktualisierung wird am selben Ort installiert an dem VeraCrypt bisher installiert ist. Wenn Sie einen anderen Installationsort wählen möchten, dann deinstallieren Sie VeraCrypt bitte zuerst.</string>
- <string lang="de" key="AFTER_UPGRADE_RELEASE_NOTES">Möchten Sie die „Release Notes“ zu der aktuellen (stabilen) VeraCrypt-Version lesen?</string>
+ <string lang="de" key="AFTER_UPGRADE_RELEASE_NOTES">Möchten Sie die „Versionshinweise“ zu der aktuellen (stabilen) VeraCrypt-Version lesen?</string>
<string lang="de" key="AFTER_INSTALL_TUTORIAL">Falls Sie VeraCrypt noch nie zuvor verwendet haben, ist es empfehlenswert das Kapitel „Beginner's Tutorial“ im VeraCrypt-Benutzerhandbuch zu lesen. Möchten Sie das Tutorial ansehen?</string>
<string lang="de" key="SELECT_AN_ACTION">Wählen Sie eine der folgenden Aktionen aus:</string>
<string lang="de" key="REPAIR_REINSTALL">Reparatur/Neuinstallation</string>
@@ -1261,18 +1261,18 @@
<string lang="de" key="BOOT_LOADER_UPGRADE_FAILED">Es ist ein Fehler beim Aktualisieren des VeraCrypt-Bootloaders aufgetreten.</string>
<string lang="de" key="SYS_DRIVE_SIZE_PROBE_TIMEOUT">VeraCrypt konnte die reale Größe des Systemlaufwerkes nicht ermitteln und folglich wird die Größe, die das Betriebssystem angibt verwendet (welche kleiner sein kann als die reale Größe). Beachten Sie auch, dass dies kein Fehler in VeraCrypt ist.</string>
<string lang="de" key="HIDDEN_SECTOR_DETECTION_FAILED_PREVIOUSLY">WARNUNG: Möglicherweise hat VeraCrypt bereits versucht versteckte Sektoren auf diesem Systemlaufwerk zu erkennen. Wenn Sie Probleme während des vorherigen Erkennungsprozesses hatten, so können Sie diese vermeiden, indem Sie diesmal die Erkennung von versteckten Sektoren überspringen. Bedenken Sie dabei, dass VeraCrypt die vom Betriebssystem angegebene Größe verwendet (die vielleicht kleiner ist als die tatsächliche Größe).\n\nBeachten Sie, das Problem wurde nicht wegen eines Fehlers in VeraCrypt verursacht.</string>
- <string lang="de" key="SKIP_HIDDEN_SECTOR_DETECTION">Die Erkennung von versteckten Sektoren überspringen (die Größe die das Betriebssystem angibt verwenden)</string>
+ <string lang="de" key="SKIP_HIDDEN_SECTOR_DETECTION">Die Erkennung von versteckten Sektoren überspringen (die vom Betriebssystem angegebene Größe verwenden)</string>
<string lang="de" key="RETRY_HIDDEN_SECTOR_DETECTION">Nochmals versteckte Sektoren suchen</string>
<string lang="de" key="ENABLE_BAD_SECTOR_ZEROING">Fehler: Der Inhalt von mindestens einem Sektor des Laufwerks konnte nicht gelesen werden (zum Beispiel wegen eines Hardware Fehlers).\n\nDer Vorgang der „in-place“-Verschlüsselung kann nur fortgesetzt werden, wenn diese Sektoren wieder lesbar sind. VeraCrypt kann versuchen, diese Sektoren wieder lesbar zu machen, indem sie mit Nullen überschrieben werden (diese werden dann mit verschlüsselt). Beachten Sie dabei bitte, dass alle in den beschädigten Sektoren vorhandenen Daten bei diesem Vorgang verloren gehen. Wenn Sie dies vermeiden möchten, dann können Sie versuchen die beschädigten Daten mit einem Dritt-Anbieter Programm wiederherzustellen.\n\nHinweis: Im Falle eines Hardware Fehlers (im Gegensatz zu beschädigten Daten und Prüfsummenfehlern) könnten die Laufwerke die beschädigten Sektoren intern schützen, so dass die darin enthaltenen Daten unverschlüsselt auf der Festplatte bleiben.\n\nMöchten Sie, dass VeraCrypt die unlesbaren Sektoren mit Nullen überschreibt?</string>
<string lang="de" key="DISCARD_UNREADABLE_ENCRYPTED_SECTORS">Fehler: Der Inhalt von mindestens einem Sektor des Laufwerks konnte nicht gelesen werden (zum Beispiel wegen eines Hardware Fehlers).\n\nUm den Vorgang fortsetzen zu können, muss VeraCrypt den Inhalt dieser Sektoren verwerfen (der Inhalt wird mit Pseudo-Zufallsinhalten gefüllt). Beachten Sie bitte dass Sie auch versuchen können die beschädigten Daten mit einem Dritt-Anbieter Programm wiederherzustellen.\n\nMöchten Sie, dass VeraCrypt die unlesbaren Sektoren verwirft?</string>
<string lang="de" key="ZEROED_BAD_SECTOR_COUNT">Hinweis: VeraCrypt hat den Inhalt der %I64d nicht lesbaren Sektoren (%s) mit verschlüsselten NULL-Textblöcken ersetzt.</string>
<string lang="de" key="SKIPPED_BAD_SECTOR_COUNT">Hinweis: VeraCrypt hat den Inhalt der %I64d nicht lesbaren Sektoren (%s) mit zufälligen Daten ersetzt.</string>
<string lang="de" key="ENTER_TOKEN_PASSWORD">Passwort/PIN eingeben für Token „%s“:</string>
- <string lang="de" key="PKCS11_LIB_LOCATION_HELP">Damit VeraCrypt auf einen Token/Smart Card zugreifen kann, müssen Sie zuerst eine PKCS #11 Software Bibliothek installieren. Diese kann mit dem Gerät ausgeliefert sein o. sie steht zum Herunterladen auf der Webswite des Herstellers oder eines Drittherstellers bereit.\n\nNachdem Sie die Bibliothek installiert haben, können Sie diese durch klicken auf „Wähle Bibliothek ...“ selber wählen oder Sie können diese von VeraCrypt durch klicken auf „Bibliothek automatisch erkennen“ suchen und auswählen lassen (nur das Windows Systemverzeichnis wird durchsucht).</string>
+ <string lang="de" key="PKCS11_LIB_LOCATION_HELP">Damit VeraCrypt auf eine(n) Token/Smart Card zugreifen kann, müssen Sie zuerst eine PKCS #11-Softwarebibliothek installieren. Diese kann mit dem Gerät ausgeliefert sein oder sie steht zum Herunterladen auf der Webseite des Herstellers oder eines Drittherstellers bereit.\n\nNachdem Sie die Bibliothek installiert haben, können Sie diese durch klicken auf „Bibliothek auswählen ...“ selber auswählen oder Sie können diese von VeraCrypt durch klicken auf „Bibliothek automatisch erkennen“ suchen und auswählen lassen (nur das Windows-Systemverzeichnis wird durchsucht).</string>
<string lang="de" key="SELECT_PKCS11_MODULE_HELP">Hinweis: Für den Dateinamen und Speicherort der PKCS #11-Bibliothek, die für Ihren Sicherheitstoken oder Smart Card installiert wurde, lesen Sie bitte die Dokumentation, welche mit dem Token, der Card oder Dritthersteller Software mitgeliefert wurde.\n\nKlicken Sie auf „OK“, um den Pfad und Dateinamen zu wählen.</string>
<string lang="de" key="NO_PKCS11_MODULE_SPECIFIED">Um VeraCrypt zu ermöglichen auf einen Sicherheitstoken oder eine Smart-Card zuzugreifen, müssen Sie dafür zuerst eine PKCS #11 Bibliothekssoftware für den Token/die Smart-Card auswählen. Wählen Sie dazu „Einstellungen“ &gt; „Sicherheitstokens ...“.</string>
- <string lang="de" key="PKCS11_MODULE_INIT_FAILED">Die PKCS #11 Sicherheitstoken Bibliothek konnte nicht initialisiert werden.\n\nStellen Sie bitte sicher, dass der angegebene Pfad und Dateiname auf eine gültige PKCS # 11-Bibliothek verweist. Um den Pfad und Dateiname für eine PKCS #11-Bibliothek anzugeben, klicken Sie auf „Einstellungen“ &gt; „Sicherheitstokens“.</string>
- <string lang="de" key="PKCS11_MODULE_AUTO_DETECTION_FAILED">Es wurde keine PKCS #11-Bibliothek im Windows Systemverzeichnis gefunden.\n\nBitte stellen Sie sicher, dass eine PKCS #11-Bibliothek für Ihren Sicherheitstoken (oder für Ihre Smart Card) installiert ist (solch eine Bibliothek kann mit dem Token/der Smart Card mitgeliefert sein oder zum Herunterladen auf der Webseite des Herstellers oder von anderen Drittherstellern bereitstehen). Wenn sie in einem anderen Verzeichnis installiert ist als im Windows-Verzeichnis, dann klicken Sie auf „Wähle Bibliothek“, um die Bibliothek anzugeben (z.B. im Ordner in dem die Software für den Token/die Smart Card installiert ist).</string>
+ <string lang="de" key="PKCS11_MODULE_INIT_FAILED">Die PKCS #11 Sicherheitstoken-Bibliothek konnte nicht initialisiert werden.\n\nStellen Sie bitte sicher, dass der angegebene Pfad und Dateiname auf eine gültige PKCS # 11-Bibliothek verweist. Um den Pfad und Dateiname für eine PKCS #11-Bibliothek anzugeben, klicken Sie auf „Einstellungen“ &gt; „Sicherheitstokens“.</string>
+ <string lang="de" key="PKCS11_MODULE_AUTO_DETECTION_FAILED">Es wurde keine PKCS #11-Bibliothek im Windows Systemverzeichnis gefunden.\n\nBitte stellen Sie sicher, dass eine PKCS #11-Bibliothek für Ihren Sicherheitstoken (oder für Ihre Smart Card) installiert ist (solch eine Bibliothek kann mit dem Token/der Smart Card mitgeliefert sein oder zum Herunterladen auf der Webseite des Herstellers oder von anderen Drittherstellern bereitstehen). Wenn sie in einem anderen Verzeichnis installiert ist als im Windows-Verzeichnis, dann klicken Sie auf „Bibliothek auswählen ...“, um die Bibliothek anzugeben (z.B. im Ordner in dem die Software für den Token/die Smart Card installiert ist).</string>
<string lang="de" key="NO_TOKENS_FOUND">Kein Sicherheitstoken gefunden.\n\nBitte stellen Sie sicher, dass Ihr Sicherheitstoken mit Ihrem Computer verbunden ist und der richtige Gerätetreiber für Ihren Sicherheitstoken installiert ist.</string>
<string lang="de" key="TOKEN_KEYFILE_NOT_FOUND">Sicherheitstoken Schlüsseldatei nicht gefunden.</string>
<string lang="de" key="TOKEN_KEYFILE_ALREADY_EXISTS">Eine Sicherheitstoken Schlüsseldatei mit demselben Namen existiert bereits.</string>
@@ -1282,9 +1282,9 @@
<string lang="de" key="CKR_PIN_INCORRECT">Passwort für das Sicherheitstoken ist falsch.</string>
<string lang="de" key="CKR_DEVICE_MEMORY">Das Sicherheitstoken hat nicht genug Speicherplatz zur Verfügung um diesen Vorgang durchzuführen.\n\nWenn Sie versuchen eine Schlüsseldatei zu importieren sollten Sie eine kleinere Datei auswählen oder eine von VeraCrypt erstellte Schlüsseldatei benutzen („Extras“ &gt; „Schlüsseldatei(en) generieren“).</string>
<string lang="de" key="ALL_TOKEN_SESSIONS_CLOSED">Alle offenen Sicherheitstoken Sitzungen wurden geschlossen.</string>
- <string lang="de" key="SELECT_TOKEN_KEYFILES">Wähle Sicherheitstoken Schlüsseldateien</string>
+ <string lang="de" key="SELECT_TOKEN_KEYFILES">Sicherheitstoken-Schlüsseldateien auswählen</string>
<string lang="de" key="TOKEN_SLOT_ID">Steckplatz</string>
- <string lang="de" key="TOKEN_NAME">Token Name</string>
+ <string lang="de" key="TOKEN_NAME">Tokenname</string>
<string lang="de" key="TOKEN_DATA_OBJECT_LABEL">Dateiname</string>
<string lang="de" key="BOOT_PASSWORD_CACHE_KEYBOARD_WARNING">WICHTIG: Bitte beachten Sie, dass Prä-Boot-Authentifikationspasswörter stets mit einer Standard US-Tastaturbelegung geschrieben werden. Deshalb kann es unmöglich sein ein Volume, dessen Passwort mit einer anderen Tastaturbelegung erstellt wurde mit einem Prä-Boot-Authentifikationspasswort einzubinden (bitte beachten Sie, dass dies kein VeraCrypt-Fehler ist). Um solch ein Volume mit einem Prä-Boot-Authentifikationspasswort einzubinden, folgen Sie diesen Schritten:\n\n1) Klicken Sie „Datei“ oder „Datenträger“ und wählen Sie das Volume aus.\n2) Wählen Sie „Volumes“ &gt; „Volume-Passwort ändern“.\n3) Geben Sie das derzeitige Passwort für das Volume ein.\n4) Ändern Sie die Tastaturbelegung auf „English (US)“ indem Sie auf das Sprachsymbol in der Windows Taskleiste klicken und „EN English (United States)“ wählen (falls das Symbol nicht angezeigt wird gehen Sie in „Systemsteuerung“ &gt; „Regions- und Sprachoptionen“. Klicken Sie auf „Tastatur ändern“ und wählen Sie „Englisch (US)“).\n5) Geben Sie nun in VeraCrypt das neue Prä-Boot-Authentifikationspasswort ein.\n6) Bestätigen Sie das neue Prä-Boot-Authentifikationspasswort und klicken Sie „OK“.\n7)ACHTUNG: Bitte denken Sie daran, dass das Volume Passwort IMMER mit der US-Tastaturbelegung eingegeben werden muss, wenn Sie diese Schritte befolgen (in der Prä-Boot-Umgebung ist automatisch US-Englisch eingestellt).</string>
<string lang="de" key="SYS_FAVORITES_KEYBOARD_WARNING">Systemfavoriten-Volumes werden mit dem Prä-Boot-Authentifikationspasswort eingebunden. Wenn irgendein Systemfavoriten-Volume ein anderes Passwort nutzt wird es nicht eingebunden.</string>
@@ -1293,8 +1293,8 @@
<string lang="de" key="SETTING_REQUIRES_REBOOT">Bitte beachten Sie, dass diese Änderung erst nach einem Neustart des Betriebssystems in Kraft tritt.</string>
<string lang="de" key="COMMAND_LINE_ERROR">Fehler bei der Syntaxanalyse der Kommandozeile.</string>
<string lang="de" key="RESCUE_DISK">Rettungsdatenträger</string>
- <string lang="de" key="SELECT_FILE_AND_MOUNT">&amp;Datei wählen und einbinden ...</string>
- <string lang="de" key="SELECT_DEVICE_AND_MOUNT">Laufwerk wä&amp;hlen und einbinden ...</string>
+ <string lang="de" key="SELECT_FILE_AND_MOUNT">&amp;Datei auswählen und einbinden ...</string>
+ <string lang="de" key="SELECT_DEVICE_AND_MOUNT">Laufwerk auswä&amp;hlen und einbinden ...</string>
<string lang="de" key="DISABLE_NONADMIN_SYS_FAVORITES_ACCESS">Nur Administratoren erlauben Systemfavoriten in VeraCrypt zu sehen und zu trennen</string>
<string lang="de" key="MOUNT_SYSTEM_FAVORITES_ON_BOOT">Systemfavoriten-Volumes einbinden wenn Windows startet (am Anfang der Startphase)</string>
<string lang="de" key="MOUNTED_VOLUME_DIRTY">WARNUNG: Das Dateisystem auf dem Volume, eingebunden als „%s“, wurde nicht ordnungsgemäß getrennt und könnte dadurch Fehler enthalten. Das Verwenden eines beschädigten Dateisystems kann zu Datenverlusten bzw. Datenbeschädigungen führen.\n\nHinweis: Bevor Sie ein Laufwerk physikalisch entfernen oder ausschalten (z.B. ein USB-Stick oder eine externe Festplatte), auf denen ein eingebundenes VeraCrypt-Volume ist, so sollten Sie immer zuerst das Volume in VeraCrypt trennen.\n\n\nMöchten Sie das Windows auf dem Dateisystem nach Fehlern sucht und diese behebt (falls vorhanden)?</string>
@@ -1393,28 +1393,28 @@
<control lang="de" key="IDC_FAVORITE_USE_VOLUME_ID">Volume-Kennung zum Einbinden des Favoriten verwenden</control>
<string lang="de" key="VOLUME_ID_INVALID">Die Volume-Kennung ist ungültig</string>
<string lang="de" key="VOLUME_ID_NOT_FOUND">Mit der angegebenen Kennung wurde kein Volume auf dem System gefunden</string>
- <string lang="de" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Wert in die Zwischenablage kopieren...</string>
+ <string lang="de" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Wert in die Zwischenablage kopieren ...</string>
<control lang="de" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Im Prä-Boot-Authentifikationsbildschirm keinen PIM abfragen</control>
<string lang="de" key="DISABLE_BOOT_LOADER_PIM_PROMPT">WARNUNG: Sie sollten nicht vergessen, dass, wenn Sie diese Option aktivieren, der PIM-Wert unverschlüsselt auf der Festplatte gespeichert wird.\n\nSind Sie sicher, dass Sie diese Option aktivieren möchten?</string>
<string lang="de" key="PIM_TOO_BIG">Der größtmögliche Wert für den PIM (Persönlicher IterationsMultiplikator) ist 2147468.</string>
<control lang="de" key="IDC_SKIP_RESCUE_VERIFICATION">Rettungsdatenträgerüberprüfung überspringen</control>
<control lang="de" key="IDC_HIDE_WAITING_DIALOG">Wartemitteilungsdialog nicht anzeigen, wenn Vorgänge ausgeführt werden</control>
<control lang="de" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Im Prä-Boot-Authentifikationsbildschirm keinen Hash-Algorithmus abfragen</control>
- <string lang="en" key="GOST89_HELP">The GOST block cipher, defined in the standard GOST 28147-89 under name Magma, is a Soviet and Russian government standard symmetric key block cipher.\n\nDeveloped in the 1970s, the standard had been marked "Top Secret" and then downgraded to "Secret" in 1990. It was a Soviet alternative to the United States standard algorithm, DES.</string>
- <string lang="en" key="KUZNYECHIK_HELP">Kuznyechik is a block cipher first published in 2015 and defined in the National Standard of the Russian Federation GOST R 34.12-2015 and also in RFC 7801. 256-bit key, 128-bit block. Mode of operation is XTS.</string>
+ <string lang="de" key="GOST89_HELP">Die GOST-Blockverschlüsselung, definiert in der Norm GOST 28147-89 unter dem Namen Magma, ist ein sowjetischer und russischer Regierungsstandard für Blockverschlüsselung mit symmetrischem Schlüssel.\n\nEntwickelt in den 1970er Jahren wurde der Standard als "Streng geheim" eingestuft und dann im Jahr 1990 auf "Geheim" herabgestuft. Er war eine sowjetische Alternative zum Standard-Algorithmus der Vereinigten Staaten, DES.</string>
+ <string lang="de" key="KUZNYECHIK_HELP">Kuznyechik ist eine Blockverschlüsselung, zuerst veröffentlicht im Jahr 2015 und definiert im Nationalen Standard der Russischen Föderation GOST R 34.12-2015 und ebenfalls in RFC 7801. 256 Bit Schlüssellänge, 28 Bit Blockgröße. Arbeitet im XTS-Modus.</string>
<string lang="de" key="CAMELLIA_HELP">Von Mitsubishi Electric und NTT aus Japan gemeinsam entwickelt. Im Jahr 2000 zuerst veröffentlicht. 256 Bit Schlüssellänge, 128 Bit Blockgröße.\nArbeitet im XTS-Modus. Von der ISO/IEC, dem Projekt NESSIE der Europäischen Union und dem japanischen Projekt CRYPTREC zur Nutzung zugelassen.</string>
<string lang="de" key="TIME">Zeit</string>
<string lang="de" key="ITERATIONS">Iterationen</string>
<string lang="de" key="PRE-BOOT">Prä-Boot</string>
- <string lang="en" key="RESCUE_DISK_EFI_INFO">Before you can encrypt the partition, you must create a VeraCrypt Rescue Disk (VRD), which serves the following purposes:\n\n- If the VeraCrypt Boot Loader, master key, or other critical data gets damaged, the VRD allows you to restore it (note, however, that you will still have to enter the correct password then).\n\n- If Windows gets damaged and cannot start, the VRD allows you to permanently decrypt the partition before Windows starts.\n\n- The VRD will contain a backup of the present EFI boot loader and will allow you to restore it if necessary.\n\nThe VeraCrypt Rescue Disk ZIP image will be created in the location specified below.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you need to extract it to a USB stick that is formatted as FAT/FAT32.\n\n%lsAfter you create the Rescue Disk, click Next to verify that it has been correctly created.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you should either extract the image to a USB stick that is formatted as FAT/FAT32 or move it to a safe location for later use.\n\n%lsClick Next to continue.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">IMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\n</string>
- <string lang="en" key="RESCUE_DISK_EFI_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk, please eject and reinsert the USB stick; then click Next to try again. If this does not help, please try another USB stick and/or another ZIP software.\n\nIf you have not extracted the Rescue Disk yet, please do so, and then click Next.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created before you started this wizard, please note that such Rescue Disk cannot be used, because it was created for a different master key. You need to extract the newly generated Rescue Disk ZIP image.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk image to a USB stick, please eject it and reinsert it; then try again. If this does not help, please try other ZIP software and/or medium.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created for a different master key, password, salt, etc., please note that such Rescue Disk will always fail this verification. To create a new Rescue Disk fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">The Rescue Disk image has been created and stored in this file:\n%s\n\nNow you need to extract the Rescue Disk image to a USB stick that is formatted as FAT/FAT32.\n\nIMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\nAfter you create the Rescue Disk, select 'System' > 'Verify Rescue Disk' to verify that it has been correctly created.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_INFO">Bevor Sie die Partition verschlüsseln können, müssen Sie einen VeraCrypt-Rettungsdatenträger (VRD) erstellen, der zu folgenden Zwecken dient:\n\n- Wenn der VeraCrypt-Bootloader, Hauptschlüssel oder andere kritische Daten beschädigt werden, ermöglicht der VRD Ihnen, sie wiederherzustellen (beachten Sie jedoch, dass Sie immer noch das richtige Passwort eingeben müssen).\n\n- Wenn Windows beschädigt wird und nicht gestartet werden kann, ermöglicht der VRD Ihnen, die Partition dauerhaft zu entschlüsseln, bevor Windows gestartet wird.\n\n- Der VRD wird eine Sicherung des derzeitigen EFI-Bootloaders enthalten und ermöglicht es Ihnen, ihn bei Bedarf wiederherzustellen.\n\nDas VeraCrypt-Rettungsdatenträger-ZIP-Abbild wird in der unten angegebenen Adresse erstellt.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_EXTRACT_INFO">Das Rettungsdatenträger-ZIP-Abbild wurde erstellt und in dieser Datei gespeichert:\n%s\n\nJetzt müssen Sie es auf einen mit FAT/FAT32-formatierten USB-Stick entpacken.\n\n%lsNachdem Sie den Rettungsdatenträger erstellt haben, klicken Sie auf Weiter, um zu bestätigen, dass er korrekt erstellt wurde.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">Das Rettungsdatenträger-ZIP-Abbild wurde erstellt und in dieser Datei gespeichert\n%s\n\nJetzt sollten Sie es entweder auf einen mit FAT/FAT32-formatierten USB-Stick entpacken oder an einen sicheren Ort für die spätere Verwendung verschieben.\n\n%lsWeiter klicken, um fortzufahren.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">WICHTIG: Beachten Sie, dass die ZIP-Datei direkt in das Stammverzeichnis des USB-Sticks entpackt werden muss. Zum Beispiel, wenn der Laufwerksbuchstabe des USB-Sticks E: ist, sollte das Entpacken der ZIP-Datei einen Ordner E:\\EFI auf dem USB-Stick erstellen.\n\n</string>
+ <string lang="de" key="RESCUE_DISK_EFI_CHECK_FAILED">Kann nicht bestätigen, ob der Rettungsdatenträger korrekt entpackt wurde.\n\nWenn Sie den Rettungsdatenträger entpackt haben, werfen Sie den USB-Stick bitte aus und stecken Sie ihn wieder ein; anschließend klicken Sie auf Weiter und versuchen es erneut. Wenn dies nicht hilft, versuchen Sie es bitte mit einem anderen USB-Stick und/oder einer anderen ZIP-Software.\n\nWenn Sie den Rettungsdatenträger noch nicht entpackt haben, machen Sie dies bitte und klicken Sie anschließend auf Weiter.\n\nWenn Sie vor dem Start dieses Assistenten versucht haben, den VeraCrypt-Rettungsdatenträger zu bestätigen, beachten Sie bitte, dass ein solcher Rettungsdatenträger nicht verwendet werden kann, da er für einen anderen Hauptschlüssel erstellt wurde. Sie müssen das neu generierte Rettungsdatenträger-ZIP-Abbild entpacken.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Kann nicht bestätigen, ob der Rettungsdatenträger korrekt entpackt wurde.\n\nWenn Sie das Rettungsdatenträger-Abbild auf einen USB-Stick entpackt haben, werfen Sie ihn bitte aus und stecken Sie ihn wieder ein; anschließend versuchen Sie es erneut. Wenn dies nicht hilft, versuchen Sie es bitte mit einer anderen ZIP-Software und/oder Medium.\n\nWenn Sie für einen anderen Hauptschlüssel, Passwort, Salz, usw. versucht haben, den VeraCrypt-Rettungsdatenträger zu bestätigen, beachten Sie bitte, dass ein solcher Rettungsdatenträger immer durch diese Überprüfung fallen wird. Um einen neuen, mit Ihrer aktuellen Konfiguration vollständig kompatiblen Rettungsdatenträger zu erstellen, wählen Sie 'System' > 'Rettungsdatenträger erstellen' aus.</string>
+ <string lang="de" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">Das Rettungsdatenträger-Abbild wurde erstellt und in dieser Datei gespeichert:\n%s\n\nJetzt müssen Sie das Rettungsdatenträger-Abbild auf einen mit FAT/FAT32-formatierten USB-Stick entpacken.\n\nWICHTIG: Beachten Sie, dass die ZIP-Datei direkt in das Stammverzeichnis des USB-Sticks entpackt werden muss. Zum Beispiel, wenn der Laufwerksbuchstabe des USB-Sticks E: ist, sollte das Entpacken der ZIP-Datei einen Ordner E:\\EFI auf dem USB-Stick erstellen.\n\nNachdem Sie den Rettungsdatenträger erstellt haben, wählen Sie 'System' > 'Rettungsdatenträger überprüfen' aus, um zu bestätigen, dass er korrekt erstellt wurde.</string>
</localization>
- <!-- XML Schema -->
+ <!-- XML-Schema -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="VeraCrypt">
<xs:complexType>
diff --git a/Translations/Language.el.xml b/Translations/Language.el.xml
index 4fce6e8..af83a37 100644
--- a/Translations/Language.el.xml
+++ b/Translations/Language.el.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="el" name="Ελληνικά" en-name="Greek" version="0.1.0" translators="Βασίλης Κοσμίδης" />
<!-- Fonts -->
diff --git a/Translations/Language.es.xml b/Translations/Language.es.xml
index c8b651c..9d93119 100644
--- a/Translations/Language.es.xml
+++ b/Translations/Language.es.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="es" name="Español" en-name="Spanish" version="1.0.0" translators="Juan Antonio Auñón Ochando" />
<!-- Fonts -->
diff --git a/Translations/Language.et.xml b/Translations/Language.et.xml
index fa70525..a1f3da0 100644
--- a/Translations/Language.et.xml
+++ b/Translations/Language.et.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="et" name="Eesti" en-name="Estonian" version="0.1.0" translators="Maiko Mõtsar" />
<!-- Fonts -->
diff --git a/Translations/Language.eu.xml b/Translations/Language.eu.xml
index 58218a9..49d21ea 100644
--- a/Translations/Language.eu.xml
+++ b/Translations/Language.eu.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="eu" name="Euskara" en-name="Basque" version="1.0.0" translators="Ander Genua" />
<!-- Fonts -->
diff --git a/Translations/Language.fa.xml b/Translations/Language.fa.xml
index 45f0855..8cdf026 100644
--- a/Translations/Language.fa.xml
+++ b/Translations/Language.fa.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="fa" name="فارسي" en-name="Persian" version="0.1.0" translators="Ali Bitazar, Rodabeh Sarmadi" />
<!-- Fonts -->
diff --git a/Translations/Language.fi.xml b/Translations/Language.fi.xml
index 560854d..8a4e039 100644
--- a/Translations/Language.fi.xml
+++ b/Translations/Language.fi.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="fi" name="Suomi" en-name="Finnish" version="0.1.0" translators="Matti Ruhanen" />
<!-- Fonts -->
diff --git a/Translations/Language.fr.xml b/Translations/Language.fr.xml
index 65c89d9..25e7c3b 100644
--- a/Translations/Language.fr.xml
+++ b/Translations/Language.fr.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="fr" name="Français" en-name="French" version="0.3.0" translators="Stéphane S., Olivier M., Thierry T" />
<!-- Fonts -->
diff --git a/Translations/Language.hu.xml b/Translations/Language.hu.xml
index a756f23..04b4c60 100644
--- a/Translations/Language.hu.xml
+++ b/Translations/Language.hu.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="hu" name="Magyar" en-name="Hungarian" version="0.1.0" translators="Nyul Balazs" />
<!-- Fonts -->
diff --git a/Translations/Language.id.xml b/Translations/Language.id.xml
index 478ee02..fb8f59f 100644
--- a/Translations/Language.id.xml
+++ b/Translations/Language.id.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="id" name="Bahasa Indonesia" en-name="Indonesian" version="0.1.0" translators="Tajuddin N. F." />
<!-- Fonts -->
diff --git a/Translations/Language.it.xml b/Translations/Language.it.xml
index fb4d929..6ba4116 100644
--- a/Translations/Language.it.xml
+++ b/Translations/Language.it.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="it" name="Italiano" en-name="Italian" version="1.0.1" translators="Maurizio Ballo, Consiglio Gaetano" />
<!-- Fonts -->
diff --git a/Translations/Language.ja.xml b/Translations/Language.ja.xml
index cfcdaf4..80e2bf1 100644
--- a/Translations/Language.ja.xml
+++ b/Translations/Language.ja.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ja" name="日本語" en-name="Japanese" version="1.0.0" translators="OGOSHI Masayuki" />
<!-- Fonts -->
diff --git a/Translations/Language.ka.xml b/Translations/Language.ka.xml
index 8867219..dd7cc49 100644
--- a/Translations/Language.ka.xml
+++ b/Translations/Language.ka.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ka" name="ქართული" en-name="Georgian" version="0.1.0" translators="Kakha Lomiashvili" />
<!-- Fonts -->
diff --git a/Translations/Language.ko.xml b/Translations/Language.ko.xml
index 42a4b01..9b246f5 100644
--- a/Translations/Language.ko.xml
+++ b/Translations/Language.ko.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ko" name="한국어" en-name="Korean" version="0.1.1" translators="Kim Young, Herbert Shin" />
<!-- Fonts -->
diff --git a/Translations/Language.lv.xml b/Translations/Language.lv.xml
index 197b009..0580042 100644
--- a/Translations/Language.lv.xml
+++ b/Translations/Language.lv.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="lv" name="Latviešu" en-name="Latvian" version="0.1.0" translators="Edmunds Melkers" />
<!-- Fonts -->
diff --git a/Translations/Language.my.xml b/Translations/Language.my.xml
index 15e8663..6d31e00 100644
--- a/Translations/Language.my.xml
+++ b/Translations/Language.my.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="my" name="မြန်မာ" en-name="Burmese" version="1.0.0" translators="Zaw Myo Htet" />
<!-- Fonts -->
diff --git a/Translations/Language.nl.xml b/Translations/Language.nl.xml
index d1d6349..4ae5232 100644
--- a/Translations/Language.nl.xml
+++ b/Translations/Language.nl.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
- <language langid="nl" name="Nederlands" en-name="Dutch" version="0.2.1" translators="Jan van der Wal, Peter Tak" />
+ <language langid="nl" name="Nederlands" en-name="Dutch" version="0.2.3" translators="Jan van der Wal, Peter Tak" />
<!-- Fonts -->
<font lang="nl" class="normal" size="11" face="default" />
<font lang="nl" class="bold" size="13" face="Arial" />
@@ -25,14 +25,14 @@
<control lang="nl" key="IDD_UNINSTALL">De-installeer VeraCrypt</control>
<control lang="nl" key="IDHELP">&amp;Help</control>
<control lang="nl" key="IDT_EXTRACT_DESTINATION">Selecteer of type de locatie waar u de uitgepakte bestanden naartoe wilt kopiëren:</control>
- <control lang="nl" key="IDT_INSTALL_DESTINATION">Selecteer of type de locatie waar u de VeraCrypt programma bestanden naartoe wilt kopiëren. Als de gespecificeerde map niet bestaat, zal deze automatisch worden aangemaakt.</control>
+ <control lang="nl" key="IDT_INSTALL_DESTINATION">Selecteer of type de locatie waar u de VeraCrypt programma bestanden naartoe wilt kopiëren. Als de gespecificeerde map niet bestaat, wordt deze automatisch aangemaakt.</control>
<control lang="nl" key="IDT_UNINSTALL_DIR">Klik op Deinstalleer om VeraCrypt te verwijderen van dit systeem.</control>
<control lang="nl" key="IDC_ABORT_BUTTON">Afbreken</control>
<control lang="nl" key="IDC_BENCHMARK">&amp;Benchmark</control>
<control lang="nl" key="IDC_CIPHER_TEST">&amp;Test</control>
- <control lang="nl" key="IDC_DEVICE_TRANSFORM_MODE_FORMAT">Aanmaak en formatering gecodeerd volume</control>
+ <control lang="nl" key="IDC_DEVICE_TRANSFORM_MODE_FORMAT">Aanmaken en formateren gecodeerd volume</control>
<control lang="nl" key="IDC_DEVICE_TRANSFORM_MODE_INPLACE">Op-De-Plaats codering van de partitie (Windows Vista)</control>
- <control lang="nl" key="IDC_DISPLAY_KEYS">Toon gegenereerde sleutels (their portions)</control>
+ <control lang="nl" key="IDC_DISPLAY_KEYS">Toon gegenereerde sleutels (hun gedeelten)</control>
<control lang="nl" key="IDC_DISPLAY_POOL_CONTENTS">Toon inhoud</control>
<control lang="nl" key="IDC_DOWNLOAD_CD_BURN_SOFTWARE">Download CD/DVD brandersoftware</control>
<control lang="nl" key="IDC_FILE_CONTAINER">Maak een gecodeerde bestandscontainer</control>
@@ -53,7 +53,7 @@
<control lang="nl" key="IDC_LINK_PIM_INFO">Informatie over PIM</control>
<control lang="nl" key="IDC_MB">&amp;MB</control>
<control lang="nl" key="IDC_MORE_INFO_ON_CONTAINERS">Meer informatie</control>
- <control lang="nl" key="IDC_MORE_INFO_ON_SYS_ENCRYPTION">Meer informatie over systeem codering</control>
+ <control lang="nl" key="IDC_MORE_INFO_ON_SYS_ENCRYPTION">Meer informatie over systeemcodering</control>
<control lang="nl" key="IDC_MORE_INFO_SYS_ENCRYPTION">Meer informatie</control>
<control lang="nl" key="IDC_MULTI_BOOT">Multi-boot</control>
<control lang="nl" key="IDC_NONSYS_DEVICE">Codeer een niet-systeem partitie/station</control>
@@ -242,22 +242,22 @@
<control lang="nl" key="IDM_ORGANIZE_SYSTEM_FAVORITES">Systeemfavoriete volumes organiseren...</control>
<control lang="nl" key="IDM_PERFORMANCE_SETTINGS">Prestatie-/Stuurprogrammaconfiguratie</control>
<control lang="nl" key="IDM_PERMANENTLY_DECRYPT_SYS">Permanent decoderen systeempartitie/-schijf</control>
- <control lang="nl" key="IDM_PREFERENCES">Voorkeuren</control>
+ <control lang="nl" key="IDM_PREFERENCES">Voorkeuren...</control>
<control lang="nl" key="IDM_REFRESH_DRIVE_LETTERS">Lees stationletters opnieuw in</control>
<control lang="nl" key="IDM_REMOVE_ALL_KEYFILES_FROM_VOL">Verwijder alle sleutelbestanden van volume</control>
<control lang="nl" key="IDM_RESTORE_VOL_HEADER">Herstel volumeheader</control>
<control lang="nl" key="IDM_RESUME_INTERRUPTED_PROC">Hervat onderbroken proces</control>
- <control lang="nl" key="IDM_SELECT_DEVICE">Selecteer apparaat</control>
- <control lang="nl" key="IDM_SELECT_FILE">Selecteer bestand</control>
+ <control lang="nl" key="IDM_SELECT_DEVICE">Selecteer apparaat...</control>
+ <control lang="nl" key="IDM_SELECT_FILE">Selecteer bestand...</control>
<control lang="nl" key="IDM_SYSENC_RESUME">Hervat onderbroken proces</control>
- <control lang="nl" key="IDM_SYSENC_SETTINGS">Systeem codering</control>
- <control lang="nl" key="IDM_SYSTEM_ENCRYPTION_STATUS">Eigenschappen</control>
- <control lang="nl" key="IDM_SYS_ENC_SETTINGS">Instellingen</control>
+ <control lang="nl" key="IDM_SYSENC_SETTINGS">Systeemcodering...</control>
+ <control lang="nl" key="IDM_SYSTEM_ENCRYPTION_STATUS">Eigenschappen...</control>
+ <control lang="nl" key="IDM_SYS_ENC_SETTINGS">Instellingen...</control>
<control lang="nl" key="IDM_SYS_FAVORITES_SETTINGS">Systeemfavoriete volumes...</control>
<control lang="nl" key="IDM_TC_DOWNLOADS">Downloads</control>
- <control lang="nl" key="IDM_TEST_VECTORS">Test vectoren</control>
- <control lang="nl" key="IDM_TOKEN_PREFERENCES">Beveiliging tokens</control>
- <control lang="nl" key="IDM_TRAVELER">Traveler disk aanmaken</control>
+ <control lang="nl" key="IDM_TEST_VECTORS">Test vectoren...</control>
+ <control lang="nl" key="IDM_TOKEN_PREFERENCES">Beveiliging tokens...</control>
+ <control lang="nl" key="IDM_TRAVELER">Traveler disk aanmaken...</control>
<control lang="nl" key="IDM_UNMOUNTALL">Ontkoppel alle gekoppelde volumes</control>
<control lang="nl" key="IDM_UNMOUNT_VOLUME">Ontkoppel volume</control>
<control lang="nl" key="IDM_VERIFY_RESCUE_DISK">Controleer reddingsschijf</control>
@@ -324,7 +324,7 @@
<control lang="nl" key="IDC_LINK_HIDVOL_PROTECTION_INFO">Wat is verborgen volume bescherming?</control>
<control lang="nl" key="IDC_LINK_KEYFILES_INFO">Meer informatie over sleutelbestanden</control>
<control lang="nl" key="IDC_MOUNT_REMOVABLE">Koppel volume als verwijderbaar &amp;medium</control>
- <control lang="nl" key="IDC_MOUNT_SYSENC_PART_WITHOUT_PBA">Koppel partitie &amp;middels systeem codering zonder pre-boot authenticatie</control>
+ <control lang="nl" key="IDC_MOUNT_SYSENC_PART_WITHOUT_PBA">Koppel partitie &amp;middels systeemcodering zonder pre-boot authenticatie</control>
<control lang="nl" key="IDC_PARALLELIZATION_LABEL_LINK">Paralellisatie:</control>
<control lang="nl" key="IDC_PERFORM_BENCHMARK">Start tests</control>
<control lang="nl" key="IDC_PRINT">&amp;Print</control>
@@ -356,7 +356,7 @@
<control lang="nl" key="IDT_HIDDEN_VOL_PROTECTION">Verborgen volume protectie</control>
<control lang="nl" key="IDT_KEY">Sleutelgrootte:</control>
<control lang="nl" key="IDT_KEYFILE_GENERATOR_NOTE">BELANGRIJK: Beweeg de muis zo willekeurig mogelijk binnen dit scherm. Hoe langer u hem beweegt, hoe beter. Dit verbetert significant de cryptografische sterkte van de codeersleutels.</control>
- <control lang="nl" key="IDT_KEYFILE_WARNING">Let op: Als een sleutelbestand zoekraakt of in de eerste 1024 kilobytes verandert, zal het corresponderende volume niet meer gekoppeld kunnen worden!</control>
+ <control lang="nl" key="IDT_KEYFILE_WARNING">Let op: Als een sleutelbestand zoek raakt of in de eerste 1024 kilobytes verandert, kunt u het corresponderende volume niet meer koppelen!</control>
<control lang="nl" key="IDT_KEY_UNIT">bits</control>
<control lang="nl" key="IDT_NUMBER_KEYFILES">Aantal sleutelbestanden:</control>
<control lang="nl" key="IDT_KEYFILES_SIZE">Grootte sleutelbestanden (in Bytes):</control>
@@ -390,17 +390,17 @@
<string lang="nl" key="ABOUTBOX">&amp;Over</string>
<string lang="nl" key="ACCESSMODEFAIL">Het alleen-lezen attribuut op uw oude volume kon niet worden aangepast. Controleer de permissies van het bestand.</string>
<string lang="nl" key="ACCESS_DENIED">Fout: Toegang geweigerd.\n\nDe partitie die u probeert te bereiken is of 0 sectoren groot, of is uw opstart partitie.</string>
- <string lang="en" key="ADMINISTRATOR">Administrator</string>
+ <string lang="nl" key="ADMINISTRATOR">Administrator</string>
<string lang="nl" key="ADMIN_PRIVILEGES_DRIVER">Om de VeraCrypt driver te laden moet u zijn ingelogd met een account met administrator rechten.</string>
<string lang="nl" key="ADMIN_PRIVILEGES_WARN_DEVICES">Noot: om een apparaat/partitie te kunnen coderen/Decodeer/formatteren moet u ingelogd zijn met een beheersaccount, dus met administrator rechten.\n\nDit geldt niet voor het formatteren/coderen van volumes die zijn opgenomen in een Bestandscontainer.</string>
<string lang="nl" key="ADMIN_PRIVILEGES_WARN_HIDVOL">Om een verborgen volume te kunnen maken moet u ingelogd zijn in een account met administrator rechten.\n\nDoorgaan?</string>
<string lang="nl" key="ADMIN_PRIVILEGES_WARN_NTFS">Om het volume te kunen formatteren in NTFS formaat moet u ingelogd zijn in een account met administrator rechten.\n\nZonder administrator rechten kunt u het volume in FAT formaat formatteren.</string>
- <string lang="nl" key="AES_HELP">FIPS-goedgekeurde code (Rijndael, gepubliceerd 1998) die mag worden gebruikt door U.S. overheids departementen en agentschappen om geclassificeerde informatie te beveiligen tot aan Top Secret level. 256-bit sleutel, 128-bit blok, 14 rondgangen (AES-256). Operatiemodus is XTS.</string>
+ <string lang="nl" key="AES_HELP">FIPS-goedgekeurde code (Rijndael, gepubliceerd 1998) die mag worden gebruikt door U.S. overheids departementen en agentschappen om geclassificeerde informatie te beveiligen tot aan Top Secret level. 256-bit sleutel, 128-bit blok, 14 rondgangen (AES-256). Bewerkingsmodus is XTS.</string>
<string lang="nl" key="ALREADY_MOUNTED">Volume is reeds gekoppeld.</string>
<string lang="nl" key="ERR_SELF_TESTS_FAILED">WAARSCHUWING: Bij tenminste een codering of hash algoritme is de ingebouwde automatische zelftest mislukt!\n\nDe installatie van VeraCrypt kan mogelijk beschadigd zijn.</string>
<string lang="nl" key="ERR_NOT_ENOUGH_RANDOM_DATA">Waarschuwing: Er zijn niet genoeg data in de Random Nummer Generator om te voorzien in de gevraagde hoeveelheid random data.\n\nGa niet verder in het programma. Wilt u a.u.b.'Rapporteer een fout' uit het Help menu kiezen en deze fout rapporteren?</string>
- <string lang="nl" key="ERR_HARDWARE_ERROR">De schijf is beschadigd (fysiek defect) of een kabel is beschadigd, of het geheugen disfunctioneert.\n\nMerk a.u.b. op dat dit een probleem met uw hardware is, niet met VeraCrypt. Rapporteer dit daarom a.u.b. NIET als een bug of probleem in VeraCrypt en vraag hiervoor NIET om hulp in het VeraCrypt Forum. Neem a.u.b. contact op met het technisch ondersteunings team van uw computer verkoper voor hulp. Dank u wel.\n\nMerk op: Als de fout herhaaldelijk op dezelfde plaats optreedt, wordt deze waarschijnlijk veroorzaakt door een zgn. bad cluster op de schijf. Dit zou gecorrigeerd moeten kunnen worden middels software van een derde partij (in veel gevallen is de opdracht 'chkdsk /r' niet in staat deze fout te corrigeren omdat dit programma op bestandsnivo werkt; in sommige gevallen zal 'chkdsk' de fout zelfs niet opmerken).</string>
- <string lang="nl" key="DEVICE_NOT_READY_ERROR">Als je toegang tot een station op een verwisselbaar apparaat wilt, wees er dan zeker van dat het apparaat is aangesloten. De schijf/Het apparaat kan ook beschadigd zijn (mogelijk is er een fysiek defect) of is de kabel afgekoppeld/beschadigd.</string>
+ <string lang="nl" key="ERR_HARDWARE_ERROR">De schijf is beschadigd (fysiek defect) of een kabel is beschadigd, of het geheugen disfunctioneert.\n\nMerk a.u.b. op dat dit een probleem met uw hardware is, niet met VeraCrypt. Rapporteer dit daarom a.u.b. NIET als een bug of probleem in VeraCrypt en vraag hiervoor NIET om hulp in het VeraCrypt Forum. Neem a.u.b. contact op met het technisch ondersteunings team van uw computer verkoper voor hulp. Dank u wel.\n\nMerk op: Als de fout herhaaldelijk op dezelfde plaats optreedt, wordt deze waarschijnlijk veroorzaakt door een zgn. bad cluster op de schijf. Dit kunt u mogelijk corrigeren met software van een derde partij (in veel gevallen is de opdracht 'chkdsk /r' niet in staat deze fout te corrigeren omdat dit programma op bestandsniveau werkt; in sommige gevallen zal 'chkdsk' de fout zelfs niet opmerken).</string>
+ <string lang="nl" key="DEVICE_NOT_READY_ERROR">Als u toegang tot een station op een verwisselbaar apparaat wilt, wees er dan zeker van dat het apparaat is aangesloten. De schijf/Het apparaat kan ook beschadigd zijn (mogelijk is er een fysiek defect) of is de kabel afgekoppeld/beschadigd.</string>
<string lang="nl" key="WHOLE_DRIVE_ENCRYPTION_PREVENTED_BY_DRIVERS">Uw system heeft aangepaste chipset drivers met daarin een bug die codering van de gehele systeem schijf verhindert.\n\nProbeer a.u.b. (niet-Microsoft) aangepaste chipset drivers bij te werken of te deïnstalleren voordat u verder gaat. Codeer alleen de systeem partitie als het probleem blijft.</string>
<string lang="nl" key="BAD_DRIVE_LETTER">Ongeldige stationsletter.</string>
<string lang="nl" key="INVALID_PATH">Ongeldig pad.</string>
@@ -414,7 +414,7 @@
<string lang="nl" key="CIPHER_HIDVOL_HOST_TITLE">Buiten volume codering opties</string>
<string lang="nl" key="CIPHER_HIDVOL_TITLE">Verborgen volume codering opties</string>
<string lang="nl" key="CIPHER_TITLE">Codering opties</string>
- <string lang="nl" key="CLEAN_WINMRU_FAILED">WAARSCHUWING: Het pad (als opgeslagen door de bestandsselectie) van het laatst geselecteerde volume/sleutelbestand kon niet geschoond worden!</string>
+ <string lang="nl" key="CLEAN_WINMRU_FAILED">WAARSCHUWING: Het pad (als opgeslagen door de bestandsselectie) van het laatst geselecteerde volume/sleutelbestand kon niet worden geschoond!</string>
<string lang="nl" key="COMPRESSION_NOT_SUPPORTED">Fout: De bestandscontainer is gecomprimeerd op bestandsniveau. VeraCrypt ondersteunt geen gecomprimeerde containers (noot: Compressie van gecodeerde data is ineffectief en overbodig).\n\nSchakel a.u.b. compressie voor deze container uit door de volgende stappen te nemen: 1) Klik de container RECHTS aan in Windows Explorer (niet in VeraCrypt). 2) Selecteer 'Eigenschappen'. 3) Kies 'Geavanceerd' in de 'Eigenschappen' dialoog. 4) Haal het vinkje bij 'Inhoud Comprimeren om schijfruimte vrij te maken' weg in het Geavanceerde Dialoog Scherm en klik op 'OK'. 5) Klik op 'OK' in het 'Eigenschappen' dialoog scherm.</string>
<string lang="nl" key="CREATE_FAILED">Niet succesvol in het aanmaken van volume %s</string>
<string lang="nl" key="DEVICE_FREE_BYTES">Grootte van %s is %.2f bytes</string>
@@ -426,47 +426,47 @@
<string lang="nl" key="DEVICE_IN_USE_FORMAT">WAARSCHUWING: Het apparaat/partitie is in gebruik door het besturingssysteem of door programma's. Het formatteren van het apparaat/partitie kan dataverminking en systeeminstabiliteit tot gevolg hebben.\n\nWilt u doorgaan?</string>
<string lang="nl" key="DEVICE_IN_USE_INPLACE_ENC">Waarschuwing: Deze partitie is in gebruik door het besturingssysteem of programma's. U dient iedere applicatie die deze partitie zou kunnen gebruiken (incl. antivirusprogramma's) te sluiten.\n\nDoorgaan?</string>
<string lang="nl" key="FORMAT_CANT_DISMOUNT_FILESYS">Fout: Het apparaat/partitie bevat een bestandssysteem dat niet kan worden ontkoppeld. Dit bestandssyteem kan in gebruik zijn door het besturingssysteem. Het formatteren van het apparaat/partitie zal waarschijnlijk dataverminking en systeeminstabiliteit tot gevolg hebben.\n\nOm dit probleem op te lossen raden we aan deze partitie eerst te verwijderen en dan opnieuw aan te maken zonder deze te formatteren. Volg hiertoe de volgende stappen: 1) Klik RECHTS op het 'Deze Computer' (of 'Mijn Computer') icoontje in het 'Startmenu' en kies 'Beheren'. Het 'Computerbeheer' scherm verschijnt nu. 2) In het 'Computerbeheer' scherm, kies 'Opslag' &gt; 'Schijfbeheer'. 3) Klik RECHTS op de partitie die u wilt gaan coderen en kies voor 'Partitie verwijderen', of 'Verwijder schijf', of 'Logisch station verwijderen'. 4) Klik op 'Ja'. Als Windows u vraagt de computer te herstarten, doet u dit dan. Herhaal dan de stappen 1 en 2 en ga verder met stap 5. 5) Klik nu RECHTS op de niet-toegewezen/vrije ruimte en selecteer 'Nieuwe partitie', of 'Nieuw eenvoudig volume', of 'Nieuw logisch station'. 6) De 'Wizard nieuwe partitie' of 'Wizard nieuw eenvoudig volume' moet nu verschijnen; volg de instructies. Op de wizard-pagina met de titel 'Formatteer partitie', selecteer 'Formatteer deze partitie NIET' of 'Formatteer dit volume NIET'. In dezelfde wizard, klik op 'Volgende' en dan 'Voltooien'. 7) Merk op dat het stationspad dat u hebt geselecteerd in VeraCrypt nu verandert en dus verkeerd kan zijn. Verlaat daarom de VeraCrypt volume aanmaak wizard (als die nog draait) en start deze opnieuw. 8) Probeer het apparaat/partitie opnieuw te coderen.\n\nMocht VeraCrypt herhaaldelijk falen in zijn pogingen dit apparaat/partitie te coderen, dan kunt u overwegen een bestandscontainer aan te maken.</string>
- <string lang="nl" key="INPLACE_ENC_CANT_LOCK_OR_DISMOUNT_FILESYS">Fout: Het bestandssysteem kon niet gekoppeld en/of ontkoppeld worden. Het bestandssysteem kan in gebruik zijn door het besturingssysteem of programma's (bijv. antivirus software). Het coderen van de partitie kan dan data corruptie en systeeminstabiliteit veroorzaken.\n\nSluit a.u.b. ieder programma dat het bestandssysteem zou kunnen gebruiken (incl. antivirus software) en probeer het opnieuw. Indien dit niet helpt, volg a.u.b. de stappen hieronder.</string>
+ <string lang="nl" key="INPLACE_ENC_CANT_LOCK_OR_DISMOUNT_FILESYS">Fout: Het bestandssysteem kon niet worden gekoppeld en/of ontkoppeld. Het bestandssysteem kan in gebruik zijn door het besturingssysteem of programma's (bijv. antivirus software). Het coderen van de partitie kan dan data corruptie en systeeminstabiliteit veroorzaken.\n\nSluit a.u.b. ieder programma dat het bestandssysteem zou kunnen gebruiken (incl. antivirus software) en probeer het opnieuw. Indien dit niet helpt, volg a.u.b. de stappen hieronder.</string>
<string lang="nl" key="DEVICE_IN_USE_INFO">WAARSCHUWING: Sommige van de gekoppelde apparaten/partities waren reeds in gebruik!\n\nIndien u dit negeert kan dit ongewenste gevolgen en systeeminstabiliteit tot gevolg hebben.\n\nWe raden u sterk aan ieder programma dat het apparaat/partitie in gebruik zou kunnen hebben te beëindigen.</string>
<string lang="nl" key="DEVICE_PARTITIONS_ERR">Het geselecteerde apparaat bevat partities!\n\nDit apparaat formatteren zou systeem instabiliteit en dataverlies tot gevolg kunnen hebben. Selecteert u a.u.b. een partitie op dit apparaat, of verwijdert u alle partities zodat VeraCrypt het apparaat vervolgens veilig kan formatteren.</string>
<string lang="nl" key="DEVICE_PARTITIONS_ERR_W_INPLACE_ENC_NOTE">Op apparaten die niet gepartitioneerd zijn (incl. harde schijven en Solid State drives) kunnen gecodeerde VeraCrypt volumes worden aangemaakt. Een apparaat dat partities bevat kan slechts als één geheel worden gecodeerd (met één master key) indien Windows daarop geïnstalleerd is en ermee opgestart wordt.\n\nAls u het geselecteerde niet-systeem apparaat als één geheel wilt coderen met één master key, dient u eerst alle partities te verwijderen waarna VeraCrypt dit apparaat als één geheel kan formatteren. Als alternatief kunt u iedere partitie op dit apparaat afzonderlijk selecteren voor aanmaak van een VeraCrypt volume. (Iedere partitie wordt dan met een andere master key gecodeerd).\n\nNoot:Als u alle partities wilt verwijderen van een GPT disk, zou u deze kunnen converteren naar een MBR disk (middels bijv. Computerbeheer in Windows) teneinde de verborgen partities te kunnen verwijderen.</string>
- <string lang="en" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">Warning: If you encrypt the entire device (as opposed to encrypting only a partition on it), operating systems will consider the device as new, empty, and unformatted (as it will contain no partition table) and may spontaneously initialize the device (or ask you if you want to do so), which may damage the volume. Furthermore, it will not be possible to consistently mount the volume as favorite (e.g. when the drive number changes) or to assign a favorite-volume label to it.\n\nTo avoid that you may want to consider creating a partition on the device and encrypting the partition instead.\n\nAre you sure want to encrypt the entire device?</string>
- <string lang="en" key="AFTER_FORMAT_DRIVE_LETTER_WARN">IMPORTANT: Please keep in mind that this volume can NOT be mounted/accessed using the drive letter %c:, which is currently assigned to it!\n\nTo mount this volume, click 'Auto-Mount Devices' in the main VeraCrypt window (alternatively, in the main VeraCrypt window, click 'Select Device', then select this partition/device, and click 'Mount'). The volume will be mounted to a different drive letter, which you select from the list in the main VeraCrypt window.\n\nThe original drive letter %c: should be used only in case you need to remove encryption from the partition/device (e.g., if you no longer need encryption). In such a case, right-click the drive letter %c: in the 'Computer' (or 'My Computer') list and select 'Format'. Otherwise, the drive letter %c: should never be used (unless you remove it, as described e.g. in the VeraCrypt FAQ, and assign it to another partition/device).</string>
- <string lang="nl" key="OS_NOT_SUPPORTED_FOR_NONSYS_INPLACE_ENC">Op-De-Plaats codering van niet-systeem volumes wordt niet ondersteund door uw besturingssysteem (het wordt slechts door Windows Vista en latere versies van Windows ondersteund).\n\nDe reden is dat deze versie krimpen van het bestandsysteem niet ondersteunt (hetgeen noodzakelijk is om plaats te maken voor de volumeheader en back-upheader).</string>
- <string lang="nl" key="ONLY_NTFS_SUPPORTED_FOR_NONSYS_INPLACE_ENC">De geselecteerde partitie blijkt geen NTFS bestandssysteem te bevatten. Alleen partities met daarop het NTFS bestandssysteem kunnen Op-De-Plaats gecodeerd worden.De reden hiervoor is dat alleen onder NTFS het krimpen van het bestandssyteem mogelijk is zodat er ruimte vrijkomt voor de volumeheader en de back-upheader).</string>
- <string lang="nl" key="ONLY_MOUNTED_VOL_SUPPORTED_FOR_NONSYS_INPLACE_ENC">De geselecteerde partitie blijkt geen NTFS bestandssysteem te bevatten. Alleen partities met daarop het NTFS bestandssysteem kunnen Op-De-Plaats gecodeerd worden.\n\nIndien u een VeraCrypt volume wilt aanmaken in deze partitie, kies dan ‘Aanmaak en formattering gecodeerd volume’ (i.p.v. ‘Op-De-Plaats Codering van de partitie (Windows Vista))’</string>
+ <string lang="nl" key="WHOLE_NONSYS_DEVICE_ENC_CONFIRM">Waarschuwing: Als u het volledige apparaat codeert (dit in tegenstelling tot het coderen van een partitie), zal het besturingssysteem het apparaat als nieuw, leeg en ongeformatteerd beschouwen; dit omdat de partitietabel leeg is. Als gevolg hiervan kan het besturingssysteem het apparaat "spontaan" initialiseren (of je vragen dit te doen), met als gevolg dat het volume onbruikbaar wordt. Ook zal het niet mogelijk zijn om de volume als favoriet te koppelen (b.v. als de stationsletter wijzigt) of kan er geen favoriet-volumelabel worden toegewezen.\n\nOm dit te voorkomen kunt u overwegen een partitie op het apparaat aan te maken en die partitie te coderen.\n\nWeet u zeker dat je het volledige apparaat wilt coderen?</string>
+ <string lang="nl" key="AFTER_FORMAT_DRIVE_LETTER_WARN">BELANGRIJK: Houdt er rekening mee dat deze volume NIET kan worden gekoppeld/benaderd met stationsletter %c:, welke nu hieraan is toegewezen!\n\nOm dit volume te koppelen, klik 'Auto-koppel apparaten' in het VeraCrypt hoofdvenster (alternatief, in het VeraCrypt hoofdvenster, klik 'Selecteer apparaat', selecteer daarna deze partitie/apparaat en klik 'Koppelen'). U moet het volume koppelen met een ander stationsletter, welke u kunt selecteren uit de lijst in het VeraCrypt hoofdvenster.\n\nDe originele stationsletter %c: mag alleen worden gebruikt in het geval dat u de codering van de partitie/apparaat wilt verwijderen (b.v., wanneer codering niet meer nodig is). In dat geval, rechtsklikken op de stationsletter %c: in de 'Computer' (of 'Mijn computer') lijst en selecteer 'Formatteren'. In andere gevallen moet u de stationsletter %c: nooit gebruiken (tenzij je het verwijderd, zoals beschreven b.v. in het VeraCrypt FAQ, en het toewijst aan een andere partitie/apparaat).</string>
+ <string lang="nl" key="OS_NOT_SUPPORTED_FOR_NONSYS_INPLACE_ENC">Op-De-Plaats codering van niet-systeem volumes wordt niet ondersteunt door uw besturingssysteem (het wordt slechts ondersteunt door Windows Vista en latere versies van Windows).\n\nDe reden is dat deze versie krimpen van het bestandsysteem niet ondersteunt (hetgeen noodzakelijk is om plaats te maken voor de volumeheader en back-upheader).</string>
+ <string lang="nl" key="ONLY_NTFS_SUPPORTED_FOR_NONSYS_INPLACE_ENC">De geselecteerde partitie blijkt geen NTFS bestandssysteem te bevatten. Alleen partities met daarop het NTFS bestandssysteem kunnen Op-De-Plaats worden gecodeerd.De reden hiervoor is dat alleen onder NTFS het krimpen van het bestandssyteem mogelijk is zodat er ruimte vrijkomt voor de volumeheader en de back-upheader).</string>
+ <string lang="nl" key="ONLY_MOUNTED_VOL_SUPPORTED_FOR_NONSYS_INPLACE_ENC">De geselecteerde partitie blijkt geen NTFS bestandssysteem te bevatten. Alleen partities met daarop het NTFS bestandssysteem kunnen Op-De-Plaats worden gecodeerd.\n\nIndien u een VeraCrypt volume wilt aanmaken in deze partitie, kies dan ‘Aanmaak en formattering gecodeerd volume’ (i.p.v. ‘Op-De-Plaats Codering van de partitie (Windows Vista))’</string>
<string lang="nl" key="PARTITION_TOO_SMALL_FOR_NONSYS_INPLACE_ENC">Fout: De partitie is te klein. VeraCrypt kan het niet Op-De-Plaats coderen.</string>
- <string lang="nl" key="INPLACE_ENC_ALTERNATIVE_STEPS">Volg a.u.b. de volgende stappen om de bestanden op deze partitie te coderen:\n\n1) Maak een VeraCrypt volume aan op een lege partitie/apparaat en koppel dit volume.\n\n2) Kopieer alle bestanden van de partitie die u oorspronkelijk wilde coderen naar het in stap 1 aangemaakte en gekoppelde VeraCrypt volume. U heeft nu een in VeraCrypt gecodeerde back-up van uw bestanden gemaakt.\n\n3) Maak een VeraCrypt volume aan op de partitie die u oorspronkelijk wilde coderen en zorg ervoor dat u in de‘VeraCrypt volume aanmaak wizard’ de keuze ‘Aanmaak en formattering gecodeerd volume’ doet en dus niet ‘Op-De-Plaats Codering van de partitie (Windows Vista)’. Alle data op de partitie worden nu gewist. Na de aanmaak kunt u het volume koppelen.\n\n4) Kopieer nu alle back-upbestanden die u op het in stap 1 gekoppelde VeraCrypt volume hebt veiliggesteld naar het volume dat u in stap 3 heeft aangemaakt en gekoppeld.\n\nNadat u deze stappen hebt doorlopen zijn uw bestanden gecodeerd én heeft u er een back-up van.</string>
+ <string lang="nl" key="INPLACE_ENC_ALTERNATIVE_STEPS">Volg a.u.b. de volgende stappen om de bestanden op deze partitie te coderen:\n\n1) Maak een VeraCrypt volume aan op een lege partitie/apparaat en koppel dit volume.\n\n2) Kopieer alle bestanden van de partitie die u oorspronkelijk wilde coderen naar het in stap 1 aangemaakte en gekoppelde VeraCrypt volume. U heeft nu een in VeraCrypt gecodeerde back-up van uw bestanden gemaakt.\n\n3) Maak een VeraCrypt volume aan op de partitie die u oorspronkelijk wilde coderen en zorg ervoor dat u in de‘VeraCrypt volume aanmaak wizard’ de keuze ‘Aanmaak en formattering gecodeerd volume’ doet en dus niet ‘Op-De-Plaats Codering van de partitie (Windows Vista)’. Alle data op de partitie wordt nu gewist. Na de aanmaak kunt u het volume koppelen.\n\n4) Kopieer nu alle back-upbestanden die u op het in stap 1 gekoppelde VeraCrypt volume hebt veiliggesteld naar het volume dat u in stap 3 heeft aangemaakt en gekoppeld.\n\nNadat u deze stappen hebt doorlopen zijn uw bestanden gecodeerd én heeft u er een back-up van.</string>
<string lang="nl" key="RAW_DEV_NOT_SUPPORTED_FOR_INPLACE_ENC">VeraCrypt kan alleen maar een partitie, een dynamisch volume of een gehele systeem schijf Op-De-Plaats coderen.\n\nIndien u een VeraCrypt volume wilt maken in het geselecteerde niet-systeem apparaat, kies dan ‘Aanmaak en formattering gecodeerd volume’ (i.p.v. ‘Op-De-Plaats Codering van de partitie (Windows Vista))’</string>
<string lang="nl" key="INPLACE_ENC_INVALID_PATH">Fout: VeraCrypt kan alleen maar een partitie, een dynamisch volume of een gehele systeem schijf Op-De-Plaats coderen.Controleer a.u.b. of het opgegeven pad geldig is.</string>
<string lang="nl" key="CANNOT_RESIZE_FILESYS">Fout: Kan het bestandssysteem niet krimpen (dit is noodzakelijk om plaats te maken voor de volumeheader en de back-upheader).\n\nMogelijke oorzaken en oplossingen:\n\n- Niet voldoende vrije ruimte op het volume. Zorg ervoor dat geen ander programma aan het schrijven is naar het bestandssysteem.\n\n- Corrupt bestandssysteem. Controleer en repareer indien nodig de fouten: Klik rechts op de overeenkomende stationsletter in ‘Mijn Computer’, klik op ‘Eigenschappen’ &gt; Extra &gt; ‘Volume op fouten controleren’, zorg dat de optie ‘Fouten in het bestandssysteem automatisch corrigeren’ is aangevinkt en druk op ‘Starten’.\n\nAls deze stappen niet helpen, volg dan a.u.b. de volgende stappen.</string>
- <string lang="nl" key="NOT_ENOUGH_FREE_FILESYS_SPACE_FOR_SHRINK">Fout: er is niet genoeg vrije ruimte op het volume waardoor het bestandssysteem niet ingekrompen kan worden (dit is noodzakelijk om ruimte te maken voor de volumeheader en de back-upheader).\n\nVerwijder a.u.b. alle overbodige bestanden en maak de prullenbak leeg om zo minstens 256 KB ruimte vrij te maken en probeer het daarna opnieuw. Door een probleem in Windows kan de vrije ruimte, gemeld door Windows Explorer, incorrect kan zijn zolang de computer niet opnieuw is gestart. Als opnieuw starten van de computer niet helpt, kan het bestandssysteem mogelijk corrupt zijn. Controleer dit dan en repareer de fouten: Klik rechts op de stationsletter in ‘Mijn Computer’, klik op ‘Eigenschappen’ &gt; Extra &gt; ‘Volume op fouten controleren’, zorg dat de optie ‘Fouten in het bestandssysteem automatisch corrigeren’ is aangevinkt en druk op ‘Starten’.\n\nAls deze stappen niet helpen, volg dan a.u.b. de volgende stappen.</string>
+ <string lang="nl" key="NOT_ENOUGH_FREE_FILESYS_SPACE_FOR_SHRINK">Fout: er is niet genoeg vrije ruimte op het volume waardoor het bestandssysteem niet kan worden ingekrompen (dit is noodzakelijk om ruimte te maken voor de volumeheader en de back-upheader).\n\nVerwijder a.u.b. alle overbodige bestanden en maak de prullenbak leeg om zo minstens 256 KB ruimte vrij te maken en probeer het daarna opnieuw. Door een probleem in Windows kan de vrije ruimte, gemeld door Windows Explorer, incorrect kan zijn zolang de computer niet opnieuw is gestart. Als opnieuw starten van de computer niet helpt, kan het bestandssysteem mogelijk corrupt zijn. Controleer dit dan en repareer de fouten: Klik rechts op de stationsletter in ‘Mijn Computer’, klik op ‘Eigenschappen’ &gt; Extra &gt; ‘Volume op fouten controleren’, zorg dat de optie ‘Fouten in het bestandssysteem automatisch corrigeren’ is aangevinkt en druk op ‘Starten’.\n\nAls deze stappen niet helpen, volg dan a.u.b. de volgende stappen.</string>
<string lang="nl" key="DISK_FREE_BYTES">Vrije ruimte op schijf %s is %.2f bytes.</string>
<string lang="nl" key="DISK_FREE_KB">Vrije ruimte op schijf %s is %.2f KB</string>
<string lang="nl" key="DISK_FREE_MB">Vrije ruimte op schijf %s is %.2f MB</string>
<string lang="nl" key="DISK_FREE_GB">Vrije ruimte op schijf %s is %.2f GB</string>
<string lang="nl" key="DISK_FREE_TB">Vrije ruimte op schijf %s is %.2f TB</string>
<string lang="nl" key="DISK_FREE_PB">Vrije ruimte op schijf %s is %.2f PB</string>
- <string lang="nl" key="DRIVELETTERS">Kon geen beschikbare station letters verkrijgen.</string>
+ <string lang="nl" key="DRIVELETTERS">Kon geen beschikbare stationsletters verkrijgen.</string>
<string lang="nl" key="DRIVER_NOT_FOUND">Fout: VeraCrypt driver niet gevonden.\n\nKopieer a.u.b. de bestanden 'veracrypt.sys' en 'veracrypt-x64.sys' naar de map waar VeraCrypt (VeraCrypt.exe) is geïnstalleerd.</string>
<string lang="en" key="DRIVER_VERSION">Error: An incompatible version of the VeraCrypt driver is currently running.\n\nIf you are trying to run VeraCrypt in portable mode (i.e. without installing it) and a different version of VeraCrypt is already installed, you must uninstall it first (or upgrade it using the VeraCrypt installer). To uninstall it, follow these steps: On Windows Vista or later, select 'Startmenu' > Computer > 'Uninstall or change a program' > VeraCrypt > Uninstall; on Windows XP, select 'Startmenu' > Settings > 'Control Panel' > 'Add Or Remove Programs' > VeraCrypt > Remove.\n\nSimilarly, if you are trying to run VeraCrypt in portable mode (i.e. without installing it) and a different version of VeraCrypt is already running in portable mode, you must restart the system first and then run only this new version.</string>
<string lang="nl" key="ERR_CIPHER_INIT_FAILURE">Error: Code initialisatie mislukt.</string>
- <string lang="nl" key="ERR_CIPHER_INIT_WEAK_KEY">Fout: Een zwakke of potentieel-zwakke sleutel is ontdekt. De sleutel zal worden verwijderd. Probeert u het a.u.b. opnieuw.</string>
- <string lang="nl" key="EXCEPTION_REPORT">Een kritische fout is opgetreden in VeraCrypt waardoor dit beëindigd moet worden. Als dit veroorzaakt is door een fout in VeraCrypt willen we deze graag herstellen. Om ons te helpen kunt u ons een automatisch aangemaakt foutrapport sturen met de volgende informatie:\n\n- Programma versie\n- besturingssysteem versie\n- Type CPU\n- VeraCrypt component naam\n- Checksum van VeraCrypt executable\n- Symbolische naam van dialoog scherm\n- Fout categorie\n- Fout adres\n- VeraCrypt call stack\n\nAls u op 'Ja' drukt, zal de volgende URL (met daarin het hele foutrapport) worden geopend in uw standaard internet browser.\n\n%s\n\nWilt u ons dit rapport zenden?</string>
- <string lang="nl" key="EXCEPTION_REPORT_EXT">Een kritische fout is opgetreden in uw systeem waardoor VeraCrypt moet worden beëindigd.\n\nMerk op dat deze fout NIET is veroorzaakt door VeraCrypt. (De VeraCrypt ontwikkelaars kunnen deze fout dus NIET oplossen). Controleer uw computer op mogelijke problemen (bijv. systeem configuratie, netwerkverbinding, defecte hardware componenten).</string>
+ <string lang="nl" key="ERR_CIPHER_INIT_WEAK_KEY">Fout: Een zwakke of potentieel-zwakke sleutel is ontdekt. De sleutel wordt verwijderd. Probeert u het a.u.b. opnieuw.</string>
+ <string lang="nl" key="EXCEPTION_REPORT">Er is een kritische fout in VeraCrypt opgetreden waardoor dit moet worden beëindigd. Als dit veroorzaakt is door een fout in VeraCrypt willen we deze graag herstellen. Om ons te helpen kunt u ons een automatisch aangemaakt foutrapport sturen met de volgende informatie:\n\n- Programma versie\n- besturingssysteem versie\n- Type CPU\n- VeraCrypt component naam\n- Checksum van VeraCrypt executable\n- Symbolische naam van dialoog scherm\n- Fout categorie\n- Fout adres\n- VeraCrypt call stack\n\nAls u op 'Ja' drukt, zal de volgende URL (met daarin het hele foutrapport) worden geopend in uw standaard internet browser.\n\n%s\n\nWilt u ons dit rapport zenden?</string>
+ <string lang="nl" key="EXCEPTION_REPORT_EXT">Er is een kritische fout in uw systeem opgetreden waardoor VeraCrypt moet worden beëindigd.\n\nMerk op dat deze fout NIET is veroorzaakt door VeraCrypt. (De VeraCrypt ontwikkelaars kunnen deze fout dus NIET oplossen). Controleer uw computer op mogelijke problemen (bijv. systeem configuratie, netwerkverbinding, defecte hardware componenten).</string>
<string lang="en" key="EXCEPTION_REPORT_EXT_FILESEL">A critical error has occurred in your system, which requires VeraCrypt to be terminated.\n\nIf this problem persists, you may want to try disabling or uninstalling applications that could potentially be causing this issue, such as antivirus or Internet security software, system "enhancers", "optimizers" or "tweakers", etc. If it does not help, you may want to try reinstalling your operating system (this problem may also be caused by malware).</string>
<string lang="nl" key="EXCEPTION_REPORT_TITLE">VeraCrypt kritieke fout</string>
- <string lang="en" key="SYSTEM_CRASHED_ASK_REPORT">VeraCrypt detected that the operating system recently crashed. There are many potential reasons why the system could have crashed (for example, a failing hardware component, a bug in a device driver, etc.)\n\nDo you want VeraCrypt to check whether a bug in VeraCrypt could have caused the system crash?</string>
- <string lang="nl" key="ASK_KEEP_DETECTING_SYSTEM_CRASH">Wil je dat VeraCrypt systeemcrashes blijft controleren?</string>
- <string lang="nl" key="NO_MINIDUMP_FOUND">VeraCrypt heeft geen systeem crash dumpbestand gevonden.</string>
- <string lang="nl" key="ASK_DELETE_KERNEL_CRASH_DUMP">Wil je de Windows crash logbestanden verwijderen om schijfruimte vrij te maken?</string>
+ <string lang="nl" key="SYSTEM_CRASHED_ASK_REPORT">VeraCrypt constateert dat het besturingssysteem recent is gecrashed. Er zijn veel mogelijke redenen waardoor het systeem kan crashen (bijvoorbeeld, een defect hardwareonderdeel, een fout in een stuurprogramma, enz.)\n\nWilt u dat VeraCrypt controleert of er mogelijk een fout in VeraCrypt zit die de oorzaak van een systeemcrash kan zijn?</string>
+ <string lang="nl" key="ASK_KEEP_DETECTING_SYSTEM_CRASH">Wilt u dat VeraCrypt systeemcrashes blijft controleren?</string>
+ <string lang="nl" key="NO_MINIDUMP_FOUND">VeraCrypt heeft geen systeemcrash dumpbestand gevonden.</string>
+ <string lang="nl" key="ASK_DELETE_KERNEL_CRASH_DUMP">Wilt u de Windows crash logbestanden verwijderen om schijfruimte vrij te maken?</string>
<string lang="en" key="ASK_DEBUGGER_INSTALL">In order to analyze the system crash, VeraCrypt needs to install Microsoft Debugging Tools for Windows first.\n\nAfter you click OK, the Windows installer will download the Microsoft Debugging Tools installation package (16 MB) from a Microsoft server and install it (the Windows installer will be forwarded to the Microsoft server URL from the veracrypt.org server, which ensures that this feature works even if Microsoft changes the location of the installation package).</string>
- <string lang="nl" key="SYSTEM_CRASH_ANALYSIS_INFO">Wanneer je op OK klikt zal VeraCrypt de systeemcrash analyseren. Dit kan enkele minuten duren.</string>
+ <string lang="nl" key="SYSTEM_CRASH_ANALYSIS_INFO">Wanneer u op OK klikt zal VeraCrypt de systeemcrash analyseren. Dit kan enkele minuten duren.</string>
<string lang="nl" key="DEBUGGER_NOT_FOUND">Zorg ervoor dat de environment variabele 'PATH' ook een verwijzing naar 'kd.exe' (Kernel Debugger) bevat.</string>
<string lang="nl" key="SYSTEM_CRASH_NO_VERACRYPT">Het lijkt erop dat VeraCrypt niet de oorzaak van de systeemcrash is. Er zijn veel mogelijkheden waardoor een systeem kan crashen (bijvoorbeeld, een defect hardware onderdeel, een fout in een stuurapparaat, enz.)</string>
<string lang="nl" key="SYSTEM_CRASH_UPDATE_DRIVER">Uit de analyse blijkt dat updaten van het volgende stuurprogramma mogelijk het probleem oplost: </string>
<string lang="en" key="SYSTEM_CRASH_REPORT">To help us determine whether there is a bug in VeraCrypt, you can send us an automatically generated error report containing the following items:\n- Program version\n- Operating system version\n- Type of CPU\n- Error category\n- Driver name and version\n- System call stack\n\nIf you select 'Yes', the following URL (which contains the entire error report) will be opened in your default Internet browser.</string>
- <string lang="nl" key="ASK_SEND_ERROR_REPORT">Wil je ons het bovengenoemde foutenrapport sturen?</string>
+ <string lang="nl" key="ASK_SEND_ERROR_REPORT">Wilt u ons het bovengenoemde foutenrapport sturen?</string>
<string lang="nl" key="ENCRYPT">&amp;Coderen</string>
<string lang="nl" key="DECRYPT">&amp;Decoderen</string>
<string lang="nl" key="PERMANENTLY_DECRYPT">&amp;Permanent decoderen</string>
@@ -503,7 +503,7 @@
<string lang="nl" key="WIPE_FINISHED">De inhoud van de partitie/apparaat is succesvol gewist.</string>
<string lang="nl" key="WIPE_FINISHED_DECOY_SYSTEM_PARTITION">De inhoud van de partitie waar het oorspronkelijke systeem aanwezig was is succesvol gewist.</string>
<string lang="en" key="DECOY_OS_VERSION_WARNING">Please make sure the version of Windows you are going to install (on the wiped partition) is the same as the version of Windows you are currently running. This is required due to the fact that both systems will share a common boot partition.</string>
- <string lang="nl" key="SYSTEM_ENCRYPTION_FINISHED">De systeempartitie/-schijf is succesvol gecodeerd.\n\nNote: Als er niet-systeem Veracrypt volumes zijn die je automatisch wilt koppelen wanneer Windows start, dan kan je dat instellen door ze te koppelen en daarna 'favorieten' te selecteren > 'Gekoppelde volume aan systeemfavorieten toevoegen').</string>
+ <string lang="nl" key="SYSTEM_ENCRYPTION_FINISHED">De systeempartitie/-schijf is succesvol gecodeerd.\n\nNote: Als er niet-systeem Veracrypt volumes zijn die u automatisch wilt koppelen wanneer Windows start, dan kunt u dat instellen door ze te koppelen en daarna 'favorieten' te selecteren > 'Gekoppelde volume aan systeemfavorieten toevoegen').</string>
<string lang="nl" key="SYSTEM_DECRYPTION_FINISHED">De systeem partitie/schijf is succesvol gedecodeerd.</string>
<string lang="nl" key="FORMAT_FINISHED_HELP">\n\nHet VeraCrypt volume is succesvol aangemaakt en is klaar voor gebruik. Als u nog een VeraCrypt volume wilt aanmaken, klik dan op Volgende. Anders op Sluiten klikken.</string>
<string lang="nl" key="SYSENC_HIDDEN_VOL_FORMAT_FINISHED_HELP">\n\nHet Verborgen VeraCrypt volume is aangemaakt (het verborgen besturingssysteem zal zich in dit verborgen volume bevinden).\n\nKlik op Volgende om door te gaan.</string>
@@ -540,7 +540,7 @@
<string lang="nl" key="HIDVOL_PROT_WARN_AFTER_MOUNT">Het verborgen volume is nu beveiligd tegen schade totdat het buiten volume is ontkoppeld.\n\nWAARSCHUWING: Als data wordt geprobeerd te schrijven naar het verborgen volume, zal VeraCrypt schrijf-bescherming instellen voor het gehele volume (zowel het buiten als het verborgen deel) todat het is ontkoppeld. Dit kan beschadiging van gegevens in het buiten volume tot gevolg hebben, wat (indien herhaald) de aannemelijke ontkenbaarheid van het verborgen volume kan aantasten. Gelieve daarom te voorkomen dat er nu geschreven wordt in het verborgen volume gedeelte. Alle gegevens weggeschreven naar het verborgen volume zullen verloren gaan. Windows kan dit rapporteren als een schrijffout ("Uitgestelde schrijfactie mislukt" of "Verkeerde parameter").</string>
<string lang="nl" key="HIDVOL_PROT_WARN_AFTER_MOUNT_PLURAL">Ieder van de verborgen volumes binnen de nieuw gekoppelde volumes is nu beschermd tegen schade tot het moment van ontkoppeling.\n\nWAARSCHUWING: Als data wordt geprobeerd te schrijven naar het verborgen volume van ieder van deze volumes, zal VeraCrypt schrijf-bescherming instellen voor het gehele volume (zowel het buiten als het verborgen deel) totdat het is ontkoppeld. Dit kan beschadiging van gegevens in het buiten volume tot gevolg hebben, wat (indien herhaald) de aannemelijke ontkenbaarheid van het verborgen volume kan aantasten. Gelieve daarom te voorkomen dat er nu geschreven wordt in het verborgen volume gedeelte. Alle gegevens weggeschreven naar het verborgen volume zullen verloren gaan. Windows kan dit rapporteren als een schrijffout ("Uitgestelde schrijfactie mislukt" of "Verkeerde parameter").</string>
<string lang="nl" key="DAMAGE_TO_HIDDEN_VOLUME_PREVENTED">WAARSCHUWING: Er is geprobeerd data te schrijven in het verborgen volume gedeelte van het volume dat is gekoppeld als %c:! Om het verborgen volume te beschermen voorkwam VeraCrypt dat deze data werden opgeslagen. Dit kan beschadiging van gegevens tot gevolg hebben in het buiten volume. Windows kan een schrijffout gerapporteerd hebben ("uitgestelde Schrijfactie mislukt" of "Verkeerde parameter"). Het gehele volume (zowel het Buiten als het Verborgen gedeelte) zullen nu tegen schrijven beschermd zijn tot het ontkoppelen. Als VeraCrypt al eerder voorkomen heeft dat data geschreven werden naar het verborgen volume gedeelte van dit volume, kan de aannemelijke ontkenbaarheid van dit verborgen volume aangetast zijn (als gevolg van mogelijke ongebruikelijke gerelateerde inconstitenties binnen het bestandssyteem van het buiten volume). Neem daarom in overweging een nieuw VeraCrypt volume aan te maken (met Snelformatteren uitgeschakeld) en de bestanden van dit volume naar het nieuwe volume te verplaatsen; dit volume moet beveiligd gewist worden (zowel het Buiten als het Verborgen gedeelte). We raden u sterk aan de computer nu opnieuw op te starten.</string>
- <string lang="nl" key="CANNOT_SATISFY_OVER_4G_FILE_SIZE_REQ">Je geeft aan dat je bestanden groter dan 4 Gb op dit volume wilt opslaan. Daarvoor moet het volume als NTFS geformatteerd zijn, dit is echter NIET mogelijk.</string>
+ <string lang="nl" key="CANNOT_SATISFY_OVER_4G_FILE_SIZE_REQ">U geeft aan dat u bestanden groter dan 4 Gb op dit volume wilt opslaan. Daarvoor moet het volume als NTFS geformatteerd zijn, dit is echter NIET mogelijk.</string>
<string lang="en" key="CANNOT_CREATE_NON_HIDDEN_NTFS_VOLUMES_UNDER_HIDDEN_OS">Please note that when a hidden operating system is running, non-hidden VeraCrypt volumes cannot be formatted as NTFS. The reason is that the volume would need to be temporarily mounted without write protection in order to allow the operating system to format it as NTFS (whereas formatting as FAT is performed by VeraCrypt, not by the operating system, and without mounting the volume). For further technical details, see below. You can create a non-hidden NTFS volume from within the decoy operating system.</string>
<string lang="en" key="HIDDEN_VOL_CREATION_UNDER_HIDDEN_OS_HOWTO">For security reasons, when a hidden operating system is running, hidden volumes can be created only in the 'direct' mode (because outer volumes must always be mounted as read-only). To create a hidden volume securely, follow these steps:\n\n1) Boot the decoy system.\n\n2) Create a normal VeraCrypt volume and, to this volume, copy some sensitive-looking files that you actually do NOT want to hide (the volume will become the outer volume).\n\n3) Boot the hidden system and start the VeraCrypt Volume Creation Wizard. If the volume is file-hosted, move it to the system partition or to another hidden volume (otherwise, the newly created hidden volume would be mounted as read-only and could not be formatted). Follow the instructions in the wizard so as to select the 'direct' hidden volume creation mode.\n\n4) In the wizard, select the volume you created in step 2 and then follow the instructions to create a hidden volume within it.</string>
<string lang="nl" key="HIDDEN_OS_WRITE_PROTECTION_BRIEF_INFO">Wanneer een verborgen operating system draait kunnen locale ongecodeerde bestandssystemen en niet-verborgen VeraCrypt volumes alleen als read-only worden gekoppeld (data schrijven onmogelijk).\n\nData kunnen dan slechts worden geschreven naar bestanden in een verborgen VeraCrypt volume (indien dit verborgen volume NIET is geplaatst in een container in een ongecodeerd bestandssysteem of een read-only bestandssysteem).</string>
@@ -557,9 +557,9 @@
<string lang="nl" key="ERR_CONTAINER_SIZE_TOO_BIG">De in de opdrachtregel opgegeven grootte van de bestandscontainer is groter dan de beschikbare vrije ruimte. Het volume kan niet worden aangemaakt.</string>
<string lang="nl" key="ERR_VOLUME_SIZE_TOO_SMALL">De in de opdrachtregel opgegeven volumegrootte is te klein. Het volume kan niet worden aangemaakt.</string>
<string lang="nl" key="ERR_VOLUME_SIZE_TOO_BIG">De in de opdrachtregel opgegeven volumegrootte is te groot. Het volume kan niet worden aangemaakt.</string>
- <string lang="nl" key="INIT_SYS_ENC">Applicatie componenten voor systeem codering kunnen niet geïnitialiseerd worden.</string>
+ <string lang="nl" key="INIT_SYS_ENC">Applicatie componenten voor systeemcodering kunnen niet geïnitialiseerd worden.</string>
<string lang="nl" key="INIT_RAND">Het programma heeft de initialisatie van de random nummer generator niet kunnen voltooien!</string>
- <string lang="en" key="CAPI_RAND">Windows Crypto API failed!\n\n\n(If you report a bug in connection with this, please include the following technical information in the bug report:\n%hs, Last Error = 0x%.8X)</string>
+ <string lang="nl" key="CAPI_RAND">Windows Crypto API mislukt!\n\n\n(Als u hierover een bug rapporteert, wilt u dan ook de volgende technische informatie in het bugrapport vermelden:\n%hs, Last Error = 0x%.8X)</string>
<string lang="nl" key="INIT_REGISTER">Het programma heeft de initialisatie niet kunnen voltooien. Het registreren van de 'Dialog Class' is mislukt.</string>
<string lang="nl" key="INIT_RICHEDIT">Fout: Laden van Rich Edit systeem library mislukt.</string>
<string lang="nl" key="INTRO_TITLE">VeraCrypt volume aanmaak wizard</string>
@@ -580,12 +580,12 @@
<string lang="nl" key="EXTRACT">U&amp;itpakken</string>
<string lang="nl" key="NODRIVER">Kan geen verbinding maken met het VeraCrypt apparaat stuurprogramma. VeraCrypt kan niet werken als dit stuurprogramma niet gestart is.\n\nDoor de eigenschappen van Windows kan het nodig zijn uit te loggen of het systeem te herstarten voordat het apparaatstuurprogramma kan worden geladen.</string>
<string lang="nl" key="NOFONT">Error ontstaan tijdens laden/voorbereiden lettertypes.</string>
- <string lang="nl" key="NOT_FOUND">De stations letter is niet gevonden of er is geen stations letter opgegeven.</string>
- <string lang="en" key="ERR_CANNOT_ASSIGN_DRIVE_LETTER_NONSYS_DEC">Error: Cannot assign drive letter.\n\nUntil a drive letter is assigned to the decrypted volume, you will not be able to access data stored on the volume.\n\nRetry?</string>
- <string lang="nl" key="DRIVE_LETTER_UNAVAILABLE">Geen stations letter beschikbaar.</string>
+ <string lang="nl" key="NOT_FOUND">De stationsletter is niet gevonden of er is geen stationsletter opgegeven.</string>
+ <string lang="nl" key="ERR_CANNOT_ASSIGN_DRIVE_LETTER_NONSYS_DEC">FOUT: Kan geen stationsletter toewijzen.\n\nZolang als er géén stationsletter is toegewezen kunt u de opgeslagen data niet benaderen.\n\nOpnieuw proberen?</string>
+ <string lang="nl" key="DRIVE_LETTER_UNAVAILABLE">Geen stationsletter beschikbaar.</string>
<string lang="nl" key="NO_FILE_SELECTED">Geen bestand geselecteerd!</string>
- <string lang="nl" key="NO_FREE_DRIVES">Geen Stations letters beschikbaar.</string>
- <string lang="nl" key="NO_FREE_DRIVE_FOR_OUTER_VOL">Geen vrije stations letter gevonden voor het buiten volume! Aanmaak volume kan niet doorgaan.</string>
+ <string lang="nl" key="NO_FREE_DRIVES">Geen stationsletters beschikbaar.</string>
+ <string lang="nl" key="NO_FREE_DRIVE_FOR_OUTER_VOL">Geen vrije stationsletter gevonden voor het buiten volume! Aanmaak volume kan niet doorgaan.</string>
<string lang="nl" key="NO_OS_VER">Het was niet mogelijk de versie van uw besturingssysteem te herkennen. Het kan mogelijk zijn dat u een niet-ondersteund besturingssysteem gebruikt.</string>
<string lang="nl" key="NO_PATH_SELECTED">Geen pad geselecteerd!</string>
<string lang="nl" key="NO_SPACE_FOR_HIDDEN_VOL">Niet genoeg ruimte om volume aan te maken! Aanmaken van volume kan niet worden voortgezet.</string>
@@ -601,7 +601,7 @@
<string lang="nl" key="OVERWRITEPROMPT">WAARSCHUWING: Het bestand '%s' bestaat reeds!\n\nBELANGRIJK: VERACRYPT ZAL DIT BESTAND NIET CODEREN MAAR VERWIJDEREN. Bent u er zeker van dat u het bestand wilt verwijderen en vervangen door een nieuwe VeraCrypt bestandscontainer?</string>
<string lang="nl" key="OVERWRITEPROMPT_DEVICE">VOORZICHTIG: ALLE BESTANDEN DIE MOMENTEEL AANWEZIG ZIJN OP DE GESELECTEERDE %s '%s'%s ZULLEN WORDEN GEWIST EN ZIJN VERLOREN (ZIJ ZULLEN NIET GECODEERD WORDEN)!\n\nBent u er zeker van dat u door wilt gaan met formatteren?</string>
<string lang="nl" key="NONSYS_INPLACE_ENC_CONFIRM">LET OP: U kunt het volume niet koppelen en hebt dus geen toegang tot de bestanden totdat het coderen klaar is.\n\nWilt u starten met coderen van het geslecteerde %s '%s'%s?</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_CONFIRM">WARNING: You will not be able to mount the volume or access any files stored on it until it has been fully decrypted.\n\nAre you sure you want to start decrypting the selected %s '%s'%s?</string>
+ <string lang="nl" key="NONSYS_INPLACE_DEC_CONFIRM">Waarschuwing: U kunt het volume niet koppelen en geen bestanden die zijn opgeslagen benaderen totdat het systeem is gedecodeerd.\n\nWeet u zeker dat u wilt starten met het decoderen van de geselecteerde %s '%s'%s?</string>
<string lang="nl" key="NONSYS_INPLACE_ENC_CONFIRM_BACKUP">LET OP: Indien de spanning onderbroken wordt, of het besturingssysteem loopt onverhoopt vast door een soft/hardware fout tijdens de Op-De-Plaats Codering, dan kan hierdoor data verminkt raken of verloren gaan! Wij raden u daarom aan alvorens het coderen te starten, een deugdelijke back-up van de te coderen data te maken.\n\nHeeft u een back-up gemaakt?</string>
<string lang="nl" key="OVERWRITEPROMPT_DEVICE_HIDDEN_OS_PARTITION">VOORZICHTIG: ALLE BESTANDEN OP DE PARTITIE '%s'%s (DE EERSTE PARTITIE ACHTER DE SYSTEEM PARTITIE) WORDEN GEWIST (ZE WORDEN NIET GECODEERD)!\n\nBent u er zeker van dat u wilt formatteren?</string>
<string lang="nl" key="OVERWRITEPROMPT_DEVICE_SECOND_WARNING_LOTS_OF_DATA">WAARSCHUWING! DE GESELECTEERDE PARTITIE BEVAT VEEL DATA! Alle bestanden op deze partitie zullen worden gewist (ze worden NIET gecodeerd)!</string>
@@ -621,7 +621,7 @@
<string lang="nl" key="PKCS5_PRF_CHANGED">Header Key afleidingsalgoritme succesvol gecreëerd.</string>
<string lang="nl" key="NONSYS_INPLACE_ENC_RESUME_PASSWORD_PAGE_HELP">Geef a.u.b. wachtwoord en/of sleutelbestand(en) voor het niet-systeem volume waarvan u de Op-De-Plaats coderings wilt hervatten.\n\nNadat u op Volgende heeft gedrukt, zal VeraCrypt proberen alle niet-systeemvolumes te vinden waarvan de codering is onderbroken en waarop het verstrekte wachtwoord en/of de sleutelbestand(en) van toepassing zijn. Indien meer dan één zo’n volume wordt gevonden, dient u het juiste in de volgende stap te selecteren.</string>
<string lang="nl" key="NONSYS_INPLACE_ENC_RESUME_VOL_SELECT_HELP">Selecteer a.u.b. een van de getoonde volumes. De lijst bevat ieder toegankelijk niet-syteem volume waarvan de codering is onderbroken en waarop het verstrekte wachtwoord en/of sleutelbestand(en) van toepassing zijn.</string>
- <string lang="en" key="NONSYS_INPLACE_DEC_PASSWORD_PAGE_HELP">Please enter the password and/or keyfile(s) for the non-system VeraCrypt volume that you want to decrypt.</string>
+ <string lang="nl" key="NONSYS_INPLACE_DEC_PASSWORD_PAGE_HELP">Voer het wachtwoord en/of sleutelbestand(en) in voor het VerCrypt niet-systeem volume die u wilt decoderen.</string>
<string lang="nl" key="PASSWORD_HELP">Het is erg belangrijk dat u een goed wachtwoord kiest. U dient een wachtwoord te vermijden dat bestaat uit een of meerdere woorden die kunnen worden teruggevonden in een woordenboek. Ook moeten eigennamen en geboortedata vermeden worden, evenmin mag het makkelijk te raden zijn. We raden u dringend een willekeurige combinatie van hoofd- en kleine letters, nummers en speciale karakters (zoals @ ^ = $ * +) aan. Het is heel belangrijk dat het meer dan 20 karakters telt (hoe langer hoe beter). The maximaal mogelijke lengte is 64 karakters.</string>
<string lang="nl" key="PASSWORD_HIDDENVOL_HELP">Kies een wachtwoord voor het verborgen volume. </string>
<string lang="nl" key="PASSWORD_HIDDEN_OS_HELP">Kies een wachtwoord voor het verborgen besturingssysteem (d.w.z. verborgen volume). </string>
@@ -648,14 +648,14 @@
<string lang="en" key="PIM_HELP">PIM (Personal Iterations Multiplier) is a value that controls the number of iterations used by the header key derivation as follows:\n Iterations = 15000 + (PIM x 1000).\n\nWhen left empty or set to 0, VeraCrypt will use a default value (485) that ensures a high security.\n\nWhen the password is less than 20 characters, PIM can't be smaller than 485 in order to maintain a minimal security level.\nWhen the password is 20 characters or more, PIM can be set to any value.\n\nA PIM value larger than 485 will lead to slower mount. A small PIM value (less than 485) will lead to a quicker mount but it can reduce security if the password is not strong enough.</string>
<string lang="en" key="PIM_SYSENC_HELP">PIM (Personal Iterations Multiplier) is a value that controls the number of iterations used by the header key derivation as follows:\n Iterations = PIM x 2048.\n\nWhen left empty or set to 0, VeraCrypt will use a default value that ensures a high security.\n\nWhen the password is less than 20 characters, PIM can't be smaller than 98 in order to maintain a minimal security level.\nWhen the password is 20 characters or more, PIM can be set to any value.\n\nA PIM value larger than 98 will lead to slower boot. A small PIM value (less than 98) will lead to a quicker boot but it can reduce security if the password is not strong enough.</string>
<string lang="nl" key="PIM_SYSENC_CHANGE_WARNING">Onthoudt het nummer om het systeem te starten</string>
- <string lang="nl" key="PIM_LARGE_WARNING">Je hebt een PIM waarde gekozen die groter is dan de VeraCrypt standaard waarde.\nLet op dat het koppelen/opstarten hierdoor trager verloopt.</string>
- <string lang="en" key="PIM_SMALL_WARNING">You have chosen a Personal Iterations Multiplier (PIM) that is smaller than the default VeraCrypt value. Please note that if your password is not strong enough, this could lead to a weaker security.\n\nDo you confirm that you are using a strong password?</string>
- <string lang="nl" key="PIM_SYSENC_TOO_BIG">Persoonlijke iteraties multiplier (PIM) maximale waarde voor systeem codering is 65535.</string>
+ <string lang="nl" key="PIM_LARGE_WARNING">U hebt een PIM-waarde gekozen die groter is dan de VeraCrypt standaard waarde.\nLet op dat het koppelen/opstarten hierdoor trager verloopt.</string>
+ <string lang="nl" key="PIM_SMALL_WARNING">U heeft een Persoonlijke Iteraties Multiplier (PIM) gekozen die kleiner is dan de standaard VeraCrypt waarde. Houd er rekening mee dat uw wachtwoord niet sterk genoeg is, dit heeft een zwakkere beveiliging tot gevolg.\n\nBevestigt u dat u uw wachtwoord als sterk en veilig beschouwd?</string>
+ <string lang="nl" key="PIM_SYSENC_TOO_BIG">Persoonlijke iteraties multiplier (PIM) maximale waarde voor systeemcodering is 65535.</string>
<string lang="nl" key="PIM_TITLE">PIM volume</string>
<string lang="en" key="HIDDEN_FILES_PRESENT_IN_KEYFILE_PATH">\n\nWARNING: Hidden file(s) have been found in a keyfile search path. Such hidden files cannot be used as keyfiles. If you need to use them as keyfiles, remove their 'Hidden' attribute (right-click each of them, select 'Properties', uncheck 'Hidden' and click OK). Note: Hidden files are visible only if the corresponding option is enabled (Computer > Organize > 'Folder and search options' > View).</string>
<string lang="nl" key="HIDDEN_VOL_PROT_PASSWORD_US_KEYB_LAYOUT">Indien u de bescherming instelt voor een verborgen volume met daarin een verborgen system, gebruik dan de standaard US toetsenbord layout bij het typen van het wachtwoord voor het verborgen volume. Dit is noodzakelijk omdat het wachtwoord in de pre boot omgeving (voordat Windows start) moet worden ingegeven waar niet-US toetsenbord layouts NIET beschikbaar zijn.</string>
- <string lang="nl" key="FOUND_NO_PARTITION_W_DEFERRED_INPLACE_ENC">VeraCrypt vond geen volume waarop niet-systeem codering werd onderbroken en waarop het verstrekte wachtwoord en/of sleutelbestanden(en) van toepassing zijn.\n\nControleer of het ingegeven wachtwoord en/of sleutelbestand(en) juist zijn en of de partitie/volume niet gebruikt wordt door het systeem of programma’s (bijv. een antivirus programma).</string>
- <string lang="nl" key="SELECTED_PARTITION_ALREADY_INPLACE_ENC">De geselecteerde partitie/apparaat is al volledig versleuteld.\nHeader vlag = 0x%.8X</string>
+ <string lang="nl" key="FOUND_NO_PARTITION_W_DEFERRED_INPLACE_ENC">VeraCrypt vond geen volume waarop niet-systeemcodering werd onderbroken en waarop het verstrekte wachtwoord en/of sleutelbestanden(en) van toepassing zijn.\n\nControleer of het ingegeven wachtwoord en/of sleutelbestand(en) juist zijn en of de partitie/volume niet gebruikt wordt door het systeem of programma’s (bijv. een antivirus programma).</string>
+ <string lang="nl" key="SELECTED_PARTITION_ALREADY_INPLACE_ENC">De geselecteerde partitie/apparaat is al volledig gecodeerd.\nHeader vlag = 0x%.8X</string>
<string lang="en" key="SELECTED_PARTITION_NOT_INPLACE_ENC">The selected partition/device is not using in-place encryption.\nHeader Flags = 0x%.8X</string>
<string lang="nl" key="SYSENC_MOUNT_WITHOUT_PBA_NOTE">\n\nNoot: Als u probeert een partitie te koppelen die is gelegen op een systeem schijf zonder pre-boot authenticatie of probeert de gecodeerde system partitie te koppelen van een besturingssysteem dat niet draait, dan doet u dit door te selecteren 'Systeem' &gt; 'Koppel Zonder Pre-Boot Authenticatie'.</string>
<string lang="nl" key="MOUNT_WITHOUT_PBA_VOL_ON_ACTIVE_SYSENC_DRIVE">In deze modus kunt u geen partitie koppelen die aanwezig is op een schijf die momenteel actief gecodeerd wordt.\n\nVoordat u deze partitie kunt koppelen in deze modus, dient u op te starten met een besturingssysteem vanaf een andere schijf (gecodeerd of ongecodeerd) òf op te starten met een ongecodeerd besturingssysteem.</string>
@@ -669,7 +669,7 @@
<string lang="nl" key="SELECT_KEYFILE_PATH">Selecteer een sleutelbestand zoekpad. WAARSCHUWING: Alleen het pad wordt onthouden, niet de bestandsnamen!</string>
<string lang="nl" key="SELECT_KEYFILE_GENERATION_DIRECTORY">Selecteer een map om de sleutelbestanden op te slaan.</string>
<string lang="nl" key="SELECTED_KEYFILE_IS_CONTAINER_FILE">De huidige bestandscontainer is geselecteerd als sleutelbestand. Het wordt overgeslagen.</string>
- <string lang="nl" key="SERPENT_HELP">Ontworpen door Ross Anderson, Eli Biham, en Lars Knudsen. Gepubliceerd in 1998. 256-bit sleutel, 128-bit blok. Operatiemodus is XTS. Serpent was een van de AES finalisten.</string>
+ <string lang="nl" key="SERPENT_HELP">Ontworpen door Ross Anderson, Eli Biham, en Lars Knudsen. Gepubliceerd in 1998. 256-bit sleutel, 128-bit blok. Bewerkingsmodus is XTS. Serpent was een van de AES finalisten.</string>
<string lang="en" key="SIZE_HELP">Please specify the size of the container you want to create.\n\nIf you create a dynamic (sparse-file) container, this parameter will specify its maximum possible size.\n\nNote that the minimum possible size of a FAT volume is 292 KB. The minimum possible size of an NTFS volume is 3792 KB.</string>
<string lang="en" key="SIZE_HELP_HIDDEN_HOST_VOL">Please specify the size of the outer volume to be created (you will first create the outer volume and then a hidden volume within it). The minimum possible size of a volume within which a hidden volume is intended to be created is 340 KB.</string>
<string lang="en" key="SIZE_HELP_HIDDEN_VOL">Please specify the size of the hidden volume to create. The minimum possible size of a hidden volume is 40 KB (or 3664 KB if it is formatted as NTFS). The maximum possible size you can specify for the hidden volume is displayed above.</string>
@@ -692,7 +692,7 @@
<string lang="nl" key="AUTORUN_MAY_NOT_ALWAYS_WORK">Afhankelijk van de besturingssysteem instellingen, kunnen auto-run en auto-koppel mogelijk alleen werken als de traveler disk bestanden zijn aangemaakt op een niet beschrijfbaar CD/DVD-ahtig medium. Dit is geen fout in VeraCrypt maar een beperking in Windows.</string>
<string lang="en" key="TRAVELER_DISK_CREATED">VeraCrypt traveler disk has been successfully created.\n\nNote that you need administrator privileges to run VeraCrypt in portable mode. Also note that, after examining the registry file, it may be possible to tell that VeraCrypt was run on a Windows system even if it is run in portable mode.</string>
<string lang="nl" key="TC_TRAVELER_DISK">VeraCrypt Traveler Disk</string>
- <string lang="nl" key="TWOFISH_HELP">Ontworpen door Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, en Niels Ferguson. Gepubliceerd in 1998. 256-bit sleutel, 128-bit blok. Operatiemodus is XTS. Twofish was een van de AES finalisten.</string>
+ <string lang="nl" key="TWOFISH_HELP">Ontworpen door Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, en Niels Ferguson. Gepubliceerd in 1998. 256-bit sleutel, 128-bit blok. Bewerkingsmodus is XTS. Twofish was een van de AES finalisten.</string>
<string lang="nl" key="MORE_INFO_ABOUT">Meer informatie over %s</string>
<string lang="nl" key="UNKNOWN">Onbekend</string>
<string lang="nl" key="ERR_UNKNOWN">Een niet gespecificeerde of onbekende fout is opgetreden (%d).</string>
@@ -709,16 +709,16 @@
<string lang="nl" key="CONFIRM_SPARSE_FILE">Een dynamische container is een pre-gealloceerde NTFS sparse file waarvan de fysieke grootte (feitelijke gebruikte diskruimte) groeit naarmate data worden toegevoegd.\n\nWAARSCHUWING:De performance van volumes, ondergebracht in sparse-files is beduidend slechter dan van normale volumes. Daarnaast zijn ze ook minder veilig omdat na te gaan is welke sectoren van het volume ongebruikt zijn. Daarnaast kunnen ze geen aannemelijke ontkenbaarheid verschaffen. Ook kan het gecodeerde bestandssysteem corrupt raken wanneer er data geschreven worden naar een sparse-file container en er geen ruimte beschikbaar is in het huisvestende bestandssysteem.\n\nWeet u zeker dat u een volume wilt aanmaken dat ondergebracht is in een sparse-file?</string>
<string lang="en" key="SPARSE_FILE_SIZE_NOTE">Note that the size of the dynamic container reported by Windows and by VeraCrypt will always be equal to its maximum size. To find out current physical size of the container (actual disk space it uses), right-click the container file (in a Windows Explorer window, not in VeraCrypt), then select 'Properties' and see the 'Size on disk' value.\n\nAlso note that if you move a dynamic container to another volume or drive, the physical size of the container will be extended to the maximum. (You can prevent that by creating a new dynamic container in the destination location, mounting it and then moving the files from the old container to the new one.)</string>
<string lang="nl" key="PASSWORD_CACHE_WIPED_SHORT">Wachtwoordcache gewist</string>
- <string lang="en" key="PASSWORD_CACHE_WIPED">Passwords (and/or processed keyfile contents) stored in the VeraCrypt driver cache have been wiped.</string>
+ <string lang="nl" key="PASSWORD_CACHE_WIPED">Wachtwoorden (en/of inhoud van het verwerkte sleutelbestand) in het VeraCrypt stuurprogramma cache zijn gewist.</string>
<string lang="nl" key="WRONG_VOL_TYPE">VeraCrypt kan het wachtwoord van een vreemd volume niet veranderen.</string>
<string lang="nl" key="SELECT_FREE_DRIVE">Selecteer a.u.b. een vrije stationsletter uit de lijst.</string>
<string lang="nl" key="SELECT_A_MOUNTED_VOLUME">Selecteer a.u.b. een gekoppeld volume uit de lijst met stationsletters.</string>
- <string lang="en" key="AMBIGUOUS_VOL_SELECTION">Warning: Two different volumes/devices are currently selected (the first is selected in the drive letter list and the second is selected in the input field below the drive letter list).\n\nPlease confirm your choice:</string>
+ <string lang="nl" key="AMBIGUOUS_VOL_SELECTION">Waarschuwing: Er zijn twee verschillende volumes/apparaten geselecteerd (de eerste is geselecteerd in de schijfstationlijst en de tweede is geselecteerd in het invoerveld onder de schijfstationlijst).\n\nWilt u uw keuze bevestigen:</string>
<string lang="nl" key="CANT_CREATE_AUTORUN">Fout: kan autorun.inf niet maken</string>
<string lang="nl" key="ERR_PROCESS_KEYFILE">Fout bij het verwerken van het sleutelbestand!</string>
<string lang="nl" key="ERR_PROCESS_KEYFILE_PATH">Fout bij het verwerken van het pad van sleutelbestanden!</string>
- <string lang="en" key="ERR_KEYFILE_PATH_EMPTY">The keyfile path contains no files.\n\nPlease note that folders (and files they contain) found in keyfile search paths are ignored.</string>
- <string lang="nl" key="UNSUPPORTED_OS">VeraCrypt ondersteund dit besturingssysteem niet.</string>
+ <string lang="nl" key="ERR_KEYFILE_PATH_EMPTY">Het sleutelbestandpad bevat geen bestanden.\n\nHoud er rekening mee dat mappen (en de bestanden daarin) die in het sleutelbestandpad staan worden genegeerd.</string>
+ <string lang="nl" key="UNSUPPORTED_OS">VeraCrypt ondersteunt dit besturingssysteem niet.</string>
<string lang="nl" key="UNSUPPORTED_BETA_OS">FOUT: VeraCrypt ondersteunt alleen definitieve versies van dit besturingssysteem (Géén Beta/RC versies).</string>
<string lang="nl" key="ERR_MEM_ALLOC">Fout: Kan geheugen niet toewijzen.</string>
<string lang="nl" key="ERR_PERF_COUNTER">Fout: Kon de waarde van de prestatieteller niet achterhalen.</string>
@@ -744,7 +744,7 @@
<string lang="nl" key="VOLUME_LOWER_CASE">volume</string>
<string lang="nl" key="VOLUME_UPPER_CASE">VOLUME</string>
<string lang="nl" key="LABEL">Label</string>
- <string lang="nl" key="CLUSTER_TOO_SMALL">De geselecteerde clustergrootte is te klein gezien de grootte van dit volume. Een grotere cluster-grootte zal worden gebruikt.</string>
+ <string lang="nl" key="CLUSTER_TOO_SMALL">De geselecteerde clustergrootte is te klein gezien de grootte van dit volume. Een grotere cluster-grootte wordt gebruikt.</string>
<string lang="nl" key="CANT_GET_VOLSIZE">Fout: Kan de volumegrootte niet lezen!\n\nOvertuig u ervan dat het geselecteerde volume niet wordt gebruikt door het systeem of een programma.</string>
<string lang="en" key="HIDDEN_VOL_HOST_SPARSE">Hidden volumes must not be created within dynamic (sparse file) containers. To achieve plausible deniability, the hidden volume needs to be created within a non-dynamic container.</string>
<string lang="nl" key="HIDDEN_VOL_HOST_UNSUPPORTED_FILESYS">De VeraCrypt volume aanmaak wizard kan een verborgen volume alleen aanmaken binnen een FAT of NTFS volume.</string>
@@ -752,14 +752,14 @@
<string lang="nl" key="HIDDEN_VOL_HOST_NTFS">Noot: Het FAT bestandssysteem is meer geschikt voor buitenvolumes dan het NTFS bestandssysteem. (De maximum grootte van het verborgen volume zal bijv. veel groter zijn als het buitenvolume geformatteerd is onder FAT).</string>
<string lang="nl" key="HIDDEN_VOL_HOST_NTFS_ASK">Merk op dat het FAT bestandssysteem geschikter is voor buitenvolumes dan het NTFS systeem. De maximum grootte van het verborgen volume zal waarschijnlijk veel groter zijn als het buitenvolume geformatteerd is onder FAT. De reden hiervoor is dat het NTFS systeem zijn meta-data altijd opslaat in het midden van het volume en dat daarom het verborgen volume alleen hierachter kan worden aan gemaakt.\n\nBent u er zeker van dat u het buitenvolume wilt formatteren als NTFS?</string>
<string lang="nl" key="OFFER_FAT_FORMAT_ALTERNATIVE">Wilt u het volume formatteren als FAT?</string>
- <string lang="en" key="FAT_NOT_AVAILABLE_FOR_SO_LARGE_VOLUME">Note: This volume cannot be formatted as FAT, because it exceeds the maximum volume size supported by the FAT32 filesystem for the applicable sector size (2 TB for 512-byte sectors and 16 TB for 4096-byte sectors).</string>
+ <string lang="nl" key="FAT_NOT_AVAILABLE_FOR_SO_LARGE_VOLUME">Let op: Dit volume kunt u niet formatteren als FAT, want het is groter dan de maximum volumegrootte welke het FAT32 bestandssysteem ondersteunt. Toegestane sectorgrootten (2 TB voor 512-byte sectoren en 16 TB voor 4096-byte sectoren).</string>
<string lang="nl" key="PARTITION_TOO_SMALL_FOR_HIDDEN_OS">Fout: De partitie voor het verborgen besturingssysteem (OS) (dit is de eerste partitie achter de systeempartitie) moet minstens 5% groter zijn dan de systeempartitie (dit is de partitie waarop het nu actieve OS staat).</string>
<string lang="nl" key="PARTITION_TOO_SMALL_FOR_HIDDEN_OS_NTFS">Fout: De partitie voor het verborgen besturingssysteem (dit is de eerste partitie achter de system partitie) moet minstens 110% (2.1 maal) groter zijn dan de systeem partitie (dit is de partitie waarop het besturingssysteem staat dat nu draait). De reden is dat het NTFS bestandssysteem haar meta-data altijd precies in het midden van het volume opslaat en dat daardoor het verborgen volume, dat een kloon is van de systeempartitie, alleen maar een plekje kan vinden in de tweede helft van de partitie).</string>
<string lang="nl" key="OUTER_VOLUME_TOO_SMALL_FOR_HIDDEN_OS_NTFS">Fout: als het buiten volume is geformatteerd als NTFS, moet het minstens 110% (2.1 maal) groter zijn dan de systeem partitie. De reden is dat het NTFS systeem haar meta- data precies in het midden van het volume opslaat en dat daardoor het verborgen volume (waarin een kloon van de systeem partitie moet passen) slechts op de tweede helft van het buitenvolume kan staan.\n\nNoot: Het buitenvolume dient op dezelfde partitie te staan als het verborgen besturingssysteem (de eerste partitie na de systeem partitie).</string>
<string lang="nl" key="NO_PARTITION_FOLLOWS_BOOT_PARTITION">Fout: Er bevindt zich geen partitie na de systeem partitie.\n\nMerk op dat u, voor de aanmaak van het verborgen besturingssysteem, eerst een partitie op de systeemschijf dient aan te maken. Deze partitie moet de éérste partitie zijn na de systeem partitie en moet minstens 5% groter zijn dan de systeem partitie (dit is de partitie waar het besturingssysteem staat dat nu draait). Echter, als het buitenvolume (niet te verwarren met de systeem partitie) als NTFS wordt geformatteerd, moet de partitie voor het verborgen besturingssysteem minstens (let op!) 110% (2.1 maal) groter zijn dan de systeem partitie (de reden hiervoor is dat het NTFS bestands systeem haar meta-data altijd opslaat precies in het midden van het volume, hierdoor kan het verborgen volume, waarin een kloon van de systeem partitie moet passen, slechts op de tweede helft van de partitie staan).</string>
- <string lang="nl" key="TWO_SYSTEMS_IN_ONE_PARTITION_REMARK">Opmerking: Het is niet praktisch (dus niet ondersteund) besturingssystemen te installeren in twee TryeCrypt volumes binnen één partitie, omdat het gebruik van het buitenste systeem vaak data schrijven tot gevolg heeft in het gebied van het verborgen besturingssysteem. Als zulke schrijfacties worden gestopt door het gebruik van verborgen volume bescherming, zou dit zeker een crash tot gevolg hebben (een Blauw Scherm).</string>
+ <string lang="nl" key="TWO_SYSTEMS_IN_ONE_PARTITION_REMARK">Opmerking: Het is niet praktisch (wordt niet ondersteunt) besturingssystemen te installeren in twee TryeCrypt volumes binnen één partitie, omdat het gebruik van het buitenste systeem vaak data schrijven tot gevolg heeft in het gebied van het verborgen besturingssysteem. Als zulke schrijfacties worden gestopt door het gebruik van verborgen volume bescherming, zou dit zeker een crash tot gevolg hebben (een Blauw Scherm).</string>
<string lang="nl" key="FOR_MORE_INFO_ON_PARTITIONS">Voor informatie over het maken en beheren van een partitie kunt u zich wenden tot de documentatie bij uw besturingssysteem of neem contact op met de technische helpdesk van uw computerverkoper.</string>
- <string lang="nl" key="SYSTEM_PARTITION_NOT_ACTIVE">Fout: Het nu actieve besturingssysteem staat niet op de boot partitie (eerste Actieve partitie). Dit wordt niet ondersteund.</string>
+ <string lang="nl" key="SYSTEM_PARTITION_NOT_ACTIVE">Fout: Het nu actieve besturingssysteem staat niet op de boot partitie (eerste Actieve partitie). Dit wordt niet ondersteunt.</string>
<string lang="en" key="CONFIRM_FAT_FOR_FILES_OVER_4GB">You indicated that you intend to store files larger than 4 GB in this VeraCrypt volume. However, you chose the FAT file system, on which files larger than 4 GB cannot be stored.\n\nAre you sure you want to format the volume as FAT?</string>
<string lang="en" key="NONSYS_INPLACE_DECRYPTION_BAD_VOL_FORMAT">Error: VeraCrypt does not support in-place decryption of legacy non-system volumes created by VeraCrypt 1.0b or earlier.\n\nNote: You can still decrypt files stored on the volume by copying/moving them to any unencrypted volume.</string>
<string lang="en" key="NONSYS_INPLACE_DECRYPTION_CANT_DECRYPT_HID_VOL">Error: VeraCrypt cannot in-place decrypt a hidden VeraCrypt volume.\n\nNote: You can still decrypt files stored on the volume by copying/moving them to any unencrypted volume.</string>
@@ -772,7 +772,7 @@
<string lang="nl" key="INPLACE_ENC_CANT_ACCESS_OR_GET_INFO_ON_VOL_ALT">Fout: Het is onmogelijk toegang tot het volume te krijgen of er informatie over te verkrijgen.\n\nOvertuig u ervan dat dit volume bestaat, dat het niet wordt gebruikt door het systeem of programma’s, dat u lees/schrijf toegang ertoe hebt en dat het niet schrijf beveiligd is.\n\nIndien dit probleem blijft bestaan, volg evt. de volgende stappen.</string>
<string lang="nl" key="INPLACE_ENC_GENERIC_ERR_ALT_STEPS">Een fout verhinderde VeraCrypt de partitie te coderen. Los evt. eerder gerapporteerde fouten op en probeer het dan opnieuw. Als het probleem blijft bestaan probeer dan de volgende stappen.</string>
<string lang="nl" key="INPLACE_ENC_GENERIC_ERR_RESUME">Een fout verhinderde VeraCrypt het codering proces van de partitie te hervatten.\n\nLos evt. eerder gerapporteerde fouten op en probeer het proces dan te hervatten. Noot: het volume kan niet gekoppeld worden tenzij het volledig gecodeerd is.</string>
- <string lang="en" key="INPLACE_DEC_GENERIC_ERR">An error prevented VeraCrypt from decrypting the volume. Please try fixing any previously reported problems and then try again if possible.</string>
+ <string lang="nl" key="INPLACE_DEC_GENERIC_ERR">Een fout verhinderde VeraCrypt om het volume te decoderen. Probeer eerder gemelde problemen te verhelpen en (indien mogelijk) probeer het dan opnieuw.</string>
<string lang="nl" key="CANT_DISMOUNT_OUTER_VOL">Fout: Het buiten volume kan niet ontkoppeld worden!\n\nEen volume kan niet ontkoppeld worden als het bestanden of mappen bevat die worden gebruikt door een programma of het systeem.\n\nSluit u alstublieft ieder programma dat bestanden of mappen zou kunnen gebruiken op het volume en klik op Opnieuw.</string>
<string lang="nl" key="CANT_GET_OUTER_VOL_INFO">Fout: Kan geen informatie verkrijgen over het buiten volume! Volume aanmaak kan niet doorgaan.</string>
<string lang="nl" key="CANT_ACCESS_OUTER_VOL">Fout: Het buiten bolume kan niet bereikt worden! Volume aanmaak kan geen doorgang vinden.</string>
@@ -830,7 +830,7 @@
<string lang="nl" key="AUTODETECTION">Autodetectie</string>
<string lang="nl" key="SETUP_MODE_TITLE">Wizard Modus</string>
<string lang="nl" key="SETUP_MODE_INFO">Selecteer een van de modi. Als u niet zeker bent welke te kiezen, neem de standaard modus.</string>
- <string lang="nl" key="SETUP_MODE_HELP_INSTALL">Selecteer deze optie als je VeraCrypt op dit systeem wilt installeren.</string>
+ <string lang="nl" key="SETUP_MODE_HELP_INSTALL">Selecteer deze optie als u VeraCrypt op dit systeem wilt installeren.</string>
<string lang="en" key="SETUP_MODE_HELP_UPGRADE">Note: You can upgrade without decrypting even if the system partition/drive is encrypted or you use a hidden operating system.</string>
<string lang="en" key="SETUP_MODE_HELP_EXTRACT">If you select this option, all files will be extracted from this package but nothing will be installed on the system. Do not select it if you intend to encrypt the system partition or system drive. Selecting this option can be useful, for example, if you want to run VeraCrypt in so-called portable mode. VeraCrypt does not have to be installed on the operating system under which it is run. After all files are extracted, you can directly run the extracted file 'VeraCrypt.exe' (then VeraCrypt will run in portable mode).</string>
<string lang="nl" key="SETUP_OPTIONS_TITLE">Setup Opties</string>
@@ -839,7 +839,7 @@
<string lang="nl" key="SETUP_PROGRESS_INFO">A.u.b. wachten terwijl VeraCrypt wordt geïnstalleerd.</string>
<string lang="nl" key="SETUP_FINISHED_TITLE_DON">VeraCrypt is succesvol geïnstalleerd</string>
<string lang="nl" key="SETUP_FINISHED_UPGRADE_TITLE_DON">VeraCrypt is succesvol geupgraded</string>
- <string lang="nl" key="SETUP_FINISHED_INFO_DON">Overweeg a.u.b. om een donatie over te maken. Je kan wanneer je wilt op EINDE klikken om het installatiescherm te sluiten.</string>
+ <string lang="nl" key="SETUP_FINISHED_INFO_DON">Overweeg a.u.b. om een donatie over te maken. U kunt wanneer u wilt op EINDE klikken om het installatiescherm te sluiten.</string>
<string lang="nl" key="EXTRACTION_OPTIONS_TITLE">Uitpak Opties</string>
<string lang="nl" key="EXTRACTION_OPTIONS_INFO">Hier kunt u opties kiezen om het uitpakproces te controleren.</string>
<string lang="nl" key="EXTRACTION_PROGRESS_INFO">Wacht a.u.b. terwijl de bestanden worden uitgepakt.</string>
@@ -866,7 +866,7 @@
<string lang="nl" key="ROLLBACK">De installatie heeft een roll-back ondergaan.</string>
<string lang="nl" key="INSTALL_OK">VeraCrypt is succesvol geïnstalleerd.</string>
<string lang="nl" key="SETUP_UPDATE_OK">Update van VeraCrypt was succesvol.</string>
- <string lang="en" key="UPGRADE_OK_REBOOT_REQUIRED">VeraCrypt has been successfully upgraded. However, before you can start using it, the computer must be restarted.\n\nDo you want to restart it now?</string>
+ <string lang="nl" key="UPGRADE_OK_REBOOT_REQUIRED">VeraCrypt is succesvol geüpgradet. Echter, voor u het kunt gebruiken, moet u de computer herstarten.\n\nWilt u de computer nu herstarten?</string>
<string lang="en" key="SYS_ENC_UPGRADE_FAILED">Failed to upgrade VeraCrypt!\n\nIMPORTANT: Before you shut down or restart the system, we strongly recommend that you use System Restore (Windows Start menu > All programs > Accessories > System Tools > System Restore) to restore your system to the restore point named 'VeraCrypt installation'. If System Restore is not available, you should try installing the original or the new version of VeraCrypt again before you shut down or restart the system.</string>
<string lang="nl" key="UNINSTALL_OK">VeraCrypt is succesvol gedeinstalleerd.\n\nKlik 'Sluiten' om de VeraCrypt installer en de map te verwijderen %s. Merk op dat de map niet wordt verwijderd indien er zich bestanden in bevinden die niet door de VeraCrypt installer zijn aangebracht, of die niet zijn aangemaakt door VeraCrypt.</string>
<string lang="nl" key="REMOVING_REG">Verwijderen VeraCrypt register gegevens</string>
@@ -941,11 +941,11 @@
<string lang="nl" key="ENTER_HIDDEN_VOL_PASSWORD">Geef wachtwoord voor het verborgen volume</string>
<string lang="nl" key="ENTER_HEADER_BACKUP_PASSWORD">Geef wachtwoord voor header opgeslagen in de back-up</string>
<string lang="nl" key="KEYFILE_CREATED">Sleutelbestand is aangemaakt.</string>
- <string lang="en" key="KEYFILE_INCORRECT_NUMBER">The number of keyfiles you supplied is invalid.</string>
- <string lang="en" key="KEYFILE_INCORRECT_SIZE">The keyfile size must be comprized between 64 and 1048576 bytes.</string>
- <string lang="en" key="KEYFILE_EMPTY_BASE_NAME">Please enter a name for the keyfile(s) to be generated</string>
- <string lang="en" key="KEYFILE_INVALID_BASE_NAME">The base name of the keyfile(s) is invalid</string>
- <string lang="en" key="KEYFILE_ALREADY_EXISTS">The keyfile '%s' already exists.\nDo you want to overwrite it? The generation process will be stopped if you answer No.</string>
+ <string lang="nl" key="KEYFILE_INCORRECT_NUMBER">De opgegeven sleutelbestanden zijn ongeldig.</string>
+ <string lang="nl" key="KEYFILE_INCORRECT_SIZE">De grootte van het sleutelbestand moet liggen tussen 64 en 1048576 bytes.</string>
+ <string lang="nl" key="KEYFILE_EMPTY_BASE_NAME">Voer een naam in voor het/de aan te maken sleutelbestand(en)</string>
+ <string lang="nl" key="KEYFILE_INVALID_BASE_NAME">De basisnaam voor het/de sleutelbestand(en) is ongeldig</string>
+ <string lang="nl" key="KEYFILE_ALREADY_EXISTS">Het sleutelbestand '%s' bestaat al.\nWilt u dit overschrijven? Het genereren van het sleutelbestand stopt als u NEE antwoord.</string>
<string lang="nl" key="HEADER_DAMAGED_AUTO_USED_HEADER_BAK">WAARSCHUWING: De header van dit volume is beschadigd! VeraCrypt heeft automatisch de back-up ervan gebruikt die was opgeslagen in het volume.\n\nU dient de volumeheader te repareren d.m.v. het tool ‘Herstel volumeheader’.</string>
<string lang="nl" key="VOL_HEADER_BACKED_UP">Volumeheader back-up is succesvol aangemaakt.\n\nBelangrijk: Het herstellen van de volumeheader door deze back-up te gebruiken zal ook het huidige wachtwoord herstellen. Verder, als nu sleutelbestanden nodig zijn om het volume te koppelen, zullen dezelfde sleutelbestanden weer nodig zijn om te koppelen als de volumeheader is hersteld via het terugzetten van deze back-up.\n\nWAARSCHUWING: Deze volumeheader back-up kan uitsluitend worden gebruikt om de header van DIT volume te herstellen. Indien u deze header back-up gebruikt om een ander volume te herstellen, zult u daarna het volume kunnen koppelen, maar zult u niet in staat zijn enige data die op dit volume zijn opgeslagen te lezen (omdat u de master key dan heeft veranderd).</string>
<string lang="nl" key="VOL_HEADER_RESTORED">De volumeheader is succesvol hersteld.\n\nBELANGRIJK: Neemt u er nota van dat een oud wachtwoord ook hersteld kan zijn. Verder, de sleutelbestanden die nodig waren om het volume te koppelen toen de back-up werd gemaakt, zijn nu, na het terugzetten van deze back-up, weer nodig om het volume te koppelen.</string>
@@ -968,7 +968,7 @@
<string lang="nl" key="RESCUE_DISK_NON_WIZARD_CHECK_INSERT">Breng uw VeraCrypt Reddingsschijf aan in het CD/DVD station en klik op OK om deze te controleren.</string>
<string lang="nl" key="RESCUE_DISK_NON_WIZARD_CHECK_PASSED">De VeraCrypt Reddingsschijf is succesvol gecontroleerd.</string>
<string lang="nl" key="RESCUE_DISK_NON_WIZARD_CHECK_FAILED">Kan niet controleren of de Reddingsschijf foutloos is gebrand.\n\nIndien u de Reddingsschijf heeft gebrand, haal de CD/DVD uit het station en breng hem opnieuw aan; daarna opnieuw controleren. Indien dit niet helpt, probeert u a.u.b. een ander brandprogramma en/of andere CD/DVD.\n\nIndien u probeerde een VeraCrypt Reddingsschijf te controleren die is aangemaakt voor een andere Hoofdsleutel, wachtwoord, salt, etc., merk dan op dat een dergelijke Reddingsschijf altijd zal falen in deze controle. Om een nieuwe reddingsschijf aan te maken die volledig compatibel is met uw huidige configuratie, selecteer 'Systeem' &gt; 'Maak Reddingsschijf Aan'.</string>
- <string lang="en" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">The VeraCrypt Rescue Disk image has been successfully verified.</string>
+ <string lang="nl" key="RESCUE_DISK_ISO_IMAGE_CHECK_PASSED">Het VeraCrypt reddingsschijf bestand is succesvol gecontroleerd.</string>
<string lang="en" key="RESCUE_DISK_ISO_IMAGE_CHECK_FAILED">The Rescue Disk image verification failed.\n\nIf you attempted to verify a VeraCrypt Rescue Disk image created for a different master key, password, salt, etc., please note that such Rescue Disk image will always fail this verification. To create a new Rescue Disk image fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
<string lang="nl" key="ERROR_CREATING_RESCUE_DISK">Fout bij het aanmaken van de VeraCrypt Reddingsschijf.</string>
<string lang="nl" key="CANNOT_CREATE_RESCUE_DISK_ON_HIDDEN_OS">VeraCrypt Reddingsschijf kan niet gemaakt worden als een verborgen besturingssysteem draait.\n\nOm een Reddingsschijf te maken, start op van het lokvogel operating syteem en selecteer 'System' &gt; 'Create Rescue Disk'.</string>
@@ -991,7 +991,7 @@
<string lang="nl" key="UISTR_DISABLED">Uitgeschakeld</string>
<string lang="nl" key="DIGIT_ONE">1</string>
<string lang="nl" key="TWO_OR_MORE">2 of meer</string>
- <string lang="nl" key="MODE_OF_OPERATION">Operatie Modus</string>
+ <string lang="nl" key="MODE_OF_OPERATION">Bewerkingsmodus</string>
<string lang="nl" key="LABEL_ITEM">Label: </string>
<string lang="nl" key="SIZE_ITEM">Grootte: </string>
<string lang="nl" key="PATH_ITEM">Pad: </string>
@@ -1008,7 +1008,7 @@
<string lang="en" key="VOLUME_TOO_LARGE_FOR_WINXP">Warning: Windows XP does not support files larger than 2048 GB (it will report that "Not enough storage is available"). Therefore, you cannot create a file-hosted VeraCrypt volume (container) larger than 2048 GB under Windows XP.\n\nNote that it is still possible to encrypt the entire drive or create a partition-hosted VeraCrypt volume larger than 2048 GB under Windows XP.</string>
<string lang="nl" key="FREE_SPACE_FOR_WRITING_TO_OUTER_VOLUME">Waarschuwing: Als u in de toekomst meer bestanden wilt toevoegen aan het buiten volume, zou u misschien beter een kleinere grootte kunnen kiezen voor het verborgen volume.\n\nBent u er zeker van dat u wilt doorgaan met de grootte die u hebt ingegeven?</string>
<string lang="nl" key="NO_VOLUME_SELECTED">Geen volume geselecteerd.\n\nKlik op 'Selecteer apparaat' of 'Selecteer bestand' om een VeraCrypt volume te selecteren.</string>
- <string lang="nl" key="NO_SYSENC_PARTITION_SELECTED">Geen partitie geselecteerd.\n\nKlik 'Selecteer apparaat' om een ontkoppelde partitie te selecteren die normaal gesproken pre-boot authenticatie vereist (bijvoorbeeld een partitie gesitueerd op de gecodeerde systeem schijf van een ander besturingssysteem, dat niet draait, of de gecodeerde systeem partitie van een ander besturingssysteem).\n\nNoot: De geselecteerde partitie zal worden gekoppeld als een gewoon VeraCrypt volume zonder pre-boot authenticatie. Dit is nuttig bijv. voor back-up of reparatie acties.</string>
+ <string lang="nl" key="NO_SYSENC_PARTITION_SELECTED">Geen partitie geselecteerd.\n\nKlik 'Selecteer apparaat' om een ontkoppelde partitie te selecteren die normaal gesproken pre-boot authenticatie vereist (bijvoorbeeld een partitie gesitueerd op de gecodeerde systeem schijf van een ander besturingssysteem, dat niet draait, of de gecodeerde systeem partitie van een ander besturingssysteem).\n\nNoot: De geselecteerde partitie word als een gewoon VeraCrypt volume zonder pre-boot authenticatie gekoppeld. Dit is nuttig bijv. voor back-up of reparatie acties.</string>
<string lang="nl" key="CONFIRM_SAVE_DEFAULT_KEYFILES">WAARSCHUWING: Als Standaard sleutelbestanden zijn geselecteerd en opgeslagen, kunnen volumes die deze sleutelbestanden niet gebruiken onmogelijk meer worden gekoppeld. Daarom dient u, na aanzetten van de optie Standaard sleutelbestanden, niet te vergeten dit vinkje weer weg te halen bij het vakje "gebruik sleutelbestanden" onder het vakje "laat wachtwoord zien" wanneer u dergelijke volumes wilt gebruiken.\n\nBent u er zeker van de Standaard sleutelbestanden plus pad op te slaan?</string>
<string lang="nl" key="HK_AUTOMOUNT_DEVICES">Auto-koppel apparaten</string>
<string lang="nl" key="HK_DISMOUNT_ALL">Ontkoppel alles</string>
@@ -1071,13 +1071,13 @@
<string lang="en" key="SECTOR_SIZE_UNSUPPORTED">Error: The drive uses an unsupported sector size.\n\nIt is currently not possible to create partition/device-hosted volumes on drives that use sectors larger than 4096 bytes. However, note that you can create file-hosted volumes (containers) on such drives.</string>
<string lang="en" key="SYSENC_UNSUPPORTED_SECTOR_SIZE_BIOS">It is currently not possible to encrypt a system installed on a disk that uses a sector size other than 512 bytes.</string>
<string lang="nl" key="NO_SPACE_FOR_BOOT_LOADER">De VeraCrypt Boot Lader vereist minstens 32 KBytes vrije ruimte aan het begin van de systeem schijf (de VeraCrypt Boot Lader moet daar opgeslagen worden). Helaas voldoet uw systeem schijf niet aan deze voorwaarde.\n\nWilt u dit a.u.b. NIET als een programmafout/probleem van VeraCrypt melden. Om dit probleem op te lossen, zult u uw schijf moeten herpartitioneren en de eerste 32 KBytes van de schijf vrijlaten (in de meeste gevallen voldoet het de eerste partitie te verwijderen en opnieuw aan te maken). We raden u aan hiervoor de Microsoft partitie manager te gebruiken die beschikbaar is bijv. bij installeren van Windows.</string>
- <string lang="nl" key="FEATURE_UNSUPPORTED_ON_CURRENT_OS">Deze functie wordt niet ondersteund door de versie van het besturingssysteem die u momenteel gebruikt.</string>
+ <string lang="nl" key="FEATURE_UNSUPPORTED_ON_CURRENT_OS">Deze functie wordt niet ondersteunt door de versie van het besturingssysteem die u momenteel gebruikt.</string>
<string lang="nl" key="SYS_ENCRYPTION_UNSUPPORTED_ON_CURRENT_OS">VeraCrypt ondersteunt geen codering van de systeem partitie/schijf onder de versie van het besturingssysteem die u momenteel gebruikt.</string>
<string lang="nl" key="SYS_ENCRYPTION_UNSUPPORTED_ON_VISTA_SP0">Voordat u de system partitie/schijf onder Windows Vista kunt coderen, dient u Service Pack 1 of hoger te installeren voor Windows Vista. Dit is op uw systeem niet aanwezig.\n\nNoot:Service Pack 1 voor Windows Vista loste een probleem op dat er te weinig geheugen aanwezig was tijdens het opstarten van het systeem.</string>
<string lang="en" key="SYS_ENCRYPTION_UPGRADE_UNSUPPORTED_ON_VISTA_SP0">VeraCrypt no longer supports encryption of the system partition/drive on Windows Vista with no Service Pack installed. Before upgrading VeraCrypt, please install Service Pack 1 or higher for Windows Vista.</string>
<string lang="en" key="FEATURE_REQUIRES_INSTALLATION">Error: This feature requires VeraCrypt to be installed on the system (you are running VeraCrypt in portable mode).\n\nPlease install VeraCrypt and then try again.</string>
<string lang="en" key="WINDOWS_NOT_ON_BOOT_DRIVE_ERROR">WARNING: Windows does not appear to be installed on the drive from which it boots. This is not supported.\n\nYou should continue only if you are sure that Windows is installed on the drive from which it boots.\n\nDo you want to continue?</string>
- <string lang="en" key="GPT_BOOT_DRIVE_UNSUPPORTED">You are running a 32-bit Windows and your system drive has a GUID partition table (GPT). Currently, only Windows 64-bit is supported for GPT system encryption.</string>
+ <string lang="nl" key="GPT_BOOT_DRIVE_UNSUPPORTED">U gebruikt een 32-bit Windows systeem en uw systeem heeft een GUID partitie tabel (GPT). Momenteel is er alleen ondersteuning voor Windows 64-bit GPT systeemcodering.</string>
<string lang="nl" key="TC_BOOT_LOADER_ALREADY_INSTALLED">VOORZICHTIG: De VeraCrypt Boot Lader is reeds geïnstalleerd op uw system schijf!\n\nHet is mogelijk dat een ander systeem op uw computer reeds gecodeerd is.\n\nWAARSCHUWING: DOORGAAN MET CODERING VAN HET NU ACTIEVE SYSTEEM KAN ERVOOR ZORGEN DAT EEN ANDER SYSTEEM/SYSTEMEN NIET MEER GESTART KUNNEN WORDEN EN DE AANWEZIGE DATA NIET MEER TOEGANKELIJK.\n\nBent u er zeker van dat u door wilt gaan?</string>
<string lang="nl" key="SYS_LOADER_RESTORE_FAILED">Fout in herstellen van de originele systeemlader.\n\nGebruik a.u.b. uw VeraCrypt reddingsschijf ('Repair Options' &gt; 'Restore original system loader') of Windows installatie medium om de VeraCrypt Boot Lader te vervangen door de Windows systeem lader.</string>
<string lang="nl" key="SYS_LOADER_UNAVAILABLE_FOR_RESCUE_DISK">De originele systeem lader zal niet opgeslagen worden op de Reddingsschijf (waarschijnlijke oorzaak: ontbrekende back-up).</string>
@@ -1103,12 +1103,12 @@
<string lang="en" key="CONFIRM_HIDDEN_OS_EXTRA_BOOT_PARTITION">Your system uses an extra boot partition. VeraCrypt does not support hibernation on hidden operating systems that use an extra boot partition (decoy systems can be hibernated without any problems).\n\nPlease note that the boot partition would be shared by both the decoy and the hidden system. Therefore, in order to prevent data leaks and problems while resuming from hibernation, VeraCrypt has to prevent the hidden system from writing to the shared boot partition and from hibernating.\n\n\nDo you want to continue? If you select 'No', instructions for removing the extra boot partition will be displayed.</string>
<string lang="en" key="EXTRA_BOOT_PARTITION_REMOVAL_INSTRUCTIONS">\nThe extra boot partition can be removed before installing Windows. To do so, follow these steps:\n\n1) Boot your Windows installation disc.\n\n2) In the Windows installer screen, click 'Install now' > 'Custom (advanced)'.\n\n3) Click 'Drive Options'.\n\n4) Select the main system partition and delete it by clicking 'Delete' and 'OK'.\n\n5) Select the 'System Reserved' partition, click 'Extend', and increase its size so that the operating system can be installed to it.\n\n6) Click 'Apply' and 'OK'.\n\n7) Install Windows on the 'System Reserved' partition.\n\n\nShould an attacker ask why you removed the extra boot partition, you can answer that you wanted to prevent any possible data leaks to the unencrypted boot partition.\n\nNote: You can print this text by clicking the 'Print' button below. If you save a copy of this text or print it (strongly recommended, unless your printer stores copies of documents it prints on its internal drive), you should destroy any copies of it after removing the extra boot partition (otherwise, if such a copy was found, it might indicate that there is a hidden operating system on this computer).</string>
<string lang="nl" key="GAP_BETWEEN_SYS_AND_HIDDEN_OS_PARTITION">WAARSCHUWING: Er is niet-toegewezen ruimte aanwezig tussen de systeem partitie en de eerste partitie daar achter. Na aanmaken van het verborgen besturingssysteem (OS) mag u geen partitie meer maken in deze ruimte, anders zal het verborgen OS systeem niet meer te starten zijn (totdat u deze partitie weer verwijdert).</string>
- <string lang="nl" key="ALGO_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">Dit algoritme wordt momenteel niet ondersteund voor systeem codering.</string>
- <string lang="en" key="ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">This algorithm is not supported for TrueCrypt mode.</string>
- <string lang="nl" key="PIM_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">PIM (Persoonlijke iteraties Multiplier) wordt niet ondersteund in TrueCrypt modus.</string>
+ <string lang="nl" key="ALGO_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">Dit algoritme wordt momenteel niet ondersteunt voor systeemcodering.</string>
+ <string lang="nl" key="ALGO_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">Dit algoritme wordt niet ondersteunt in TrueCrypt modus.</string>
+ <string lang="nl" key="PIM_NOT_SUPPORTED_FOR_TRUECRYPT_MODE">PIM (Persoonlijke iteraties Multiplier) wordt niet ondersteunt in TrueCrypt modus.</string>
<string lang="en" key="PIM_REQUIRE_LONG_PASSWORD">Password must contain 20 or more characters in order to use the specified PIM.\nShorter passwords can only be used if the PIM is 485 or greater.</string>
<string lang="en" key="BOOT_PIM_REQUIRE_LONG_PASSWORD">Pre-boot authentication Password must contain 20 or more characters in order to use the specified PIM.\nShorter passwords can only be used if the PIM is 98 or greater.</string>
- <string lang="nl" key="KEYFILES_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">Sleutelbestanden zijn niet ondersteund bij systeemcodering.</string>
+ <string lang="nl" key="KEYFILES_NOT_SUPPORTED_FOR_SYS_ENCRYPTION">U kunt geen sleutelbestanden gebruiken bij systeemcodering.</string>
<string lang="nl" key="CANNOT_RESTORE_KEYBOARD_LAYOUT">Waarschuwing: VeraCrypt kon de originele toetsenbord lay-out niet terugzetten. Dit zou ertoe kunnen leiden dat u een wachtwoord verkeerd ingeeft.</string>
<string lang="nl" key="CANT_CHANGE_KEYB_LAYOUT_FOR_SYS_ENCRYPTION">Fout: Kan de toetsenbord indeling voor VeraCrypt niet instellen op de standaard (US) toetsenbord indeling.\n\nMerk op dat het wachtwoord ingetypt moet worden in de pre-boot omgeving (voor Windows start) waar niet-standaard (US) Windows toetsenbord indelingen niet beschikbaar zijn. Daarom moet het wachtwoord altijd worden ingetypt met gebruik van de standaard (US) toetsenbord indeling.</string>
<string lang="nl" key="ALT_KEY_CHARS_NOT_FOR_SYS_ENCRYPTION">Omdat VeraCrypt tijdelijk de toetsenbord lay-out veranderde naar de standaard (US) toetsenbordindeling, is het niet mogelijk karakters te typen terwijl u de rechter ALT toets ingedrukt houdt. Echter, u kunt de meeste van dit soort karakters creëren door de betreffende toets in te drukken terwijl u de SHIFT toets ingedrukt houdt.</string>
@@ -1121,8 +1121,8 @@
<string lang="en" key="RESCUE_DISK_BURN_INFO_NONWIN_ISO_BURNER">IMPORTANT: Note that the file must be written to the CD/DVD as an ISO disk image (not as an individual file). For information on how to do so, please refer to the documentation of your CD/DVD recording software. If you do not have any CD/DVD recording software that can write the ISO disk image to a CD/DVD, click the link below to download such free software.\n\n</string>
<string lang="en" key="LAUNCH_WIN_ISOBURN">Launch Microsoft Windows Disc Image Burner</string>
<string lang="nl" key="RESCUE_DISK_BURN_NO_CHECK_WARN">LET OP: Indien u een VeraCrypt Reddingsschijf heeft kan deze niet gebruikt worden voor deze systeem partitie/schijf omdat hij is gemaakt voor een andere master key! Na iedere codering van een systeem partitie/schijf moet een nieuwe reddingsschijf worden aangemaakt, zelfs als u hetzelfde wachtwoord gebruikt.</string>
- <string lang="nl" key="CANNOT_SAVE_SYS_ENCRYPTION_SETTINGS">Fout: Kan de systeem codering settings niet opslaan.</string>
- <string lang="nl" key="CANNOT_INITIATE_SYS_ENCRYPTION_PRETEST">Kan de systeem codering pre-test niet initiëren.</string>
+ <string lang="nl" key="CANNOT_SAVE_SYS_ENCRYPTION_SETTINGS">Fout: Kan de systeemcodering settings niet opslaan.</string>
+ <string lang="nl" key="CANNOT_INITIATE_SYS_ENCRYPTION_PRETEST">Kan de systeemcodering pre-test niet initiëren.</string>
<string lang="nl" key="CANNOT_INITIATE_HIDDEN_OS_CREATION">Voorbereiding tot aanmaak van verborgen besturingssysteem mislukt.</string>
<string lang="nl" key="WIPE_MODE_TITLE">Wis Modus</string>
<string lang="nl" key="INPLACE_ENC_WIPE_MODE_INFO">Op sommige typen opslagmedia is het mogelijk oorspronkelijke data, die overschreven zijn door andere data, weer te herstellen met geavanceerde technieken. Dit geldt ook voor data die worden overschreven door hun gecodeerde variant. (Dit gebeurt als VeraCrypt een ongecodeerde partitie of schijf codeert.) Volgens studies en overheidspublicaties kan deze hersteltechniek voorkomen worden (of zeer bemoeilijkt) door de data eerst een aantal malen met pseudo-random en niet-random data te overschrijven. Indien u gelooft dat een vijand mogelijk uw originele data met een dergelijke techniek zou kunnen herstellen, kunt u één van de volgende wismethoden kiezen (let op bestaande data gaan NIET verloren). Merk op dat het wissen NIET zal plaatsvinden na de codering van de partitie/schijf. Als de partie/schijf geheel is gecodeerd worden er geen ongecodeerde data meer op geschreven, deze data worden in het interne geheugen “on the fly” gecodeerd en daarna pas weggeschreven naar de schijf.</string>
@@ -1159,7 +1159,7 @@
<string lang="nl" key="WINDOWS_BOOT_LOADER_HINTS">Als het nu draaiende besturingssysteem (OS) is geïnstalleerd op de boot partitie zult u na codering ervan het wachtwoord dienen op te geven, zelfs als u een ander ongecodeerd Windows systeem wilt starten. Dit omdat ze dezelfde gecodeerde Windows boot lader/manager delen.\n\nIn contrast hiermee: als het nu draaiende OS NIET geïnstalleerd is op de boot partitie (of als de Windows boot lader/manager niet door een ander systeem wordt gebruikt) dan zal, na codering van dit systeem het ingeven van een wachtwoord voor andere ongecodeerde syste(e)m(en) niet nodig zijn. Dan zal alleen het indrukken van de ESC toets voldoende zijn om het ongecodeerde systeem te starten. (Indien er meerdere van deze ongecodeerde systemen zijn zult u in het VeraCrypt Boot Manager Menu moeten aangeven welk systeem te starten).\n\nNoot: Kenmerkend is dat het éérst geïnstalleerde Windows systeem op de boot partitie staat.</string>
<string lang="nl" key="SYSENC_PRE_DRIVE_ANALYSIS_TITLE">Codering van "Host Protected Area"</string>
<string lang="nl" key="SYSENC_PRE_DRIVE_ANALYSIS_HELP">Aan het einde van veel harde schijven bestaat een gebied dat normaal gesproken verborgen is voor het besturingssysteem, het ‘Hort Protected Area’ (HPA). Sommige programma’s kunnen echter data lezen en schrijven naar dit gebied.\n\nWAARSCHUWING: Sommige computerfabrikanten gebruiken dit gebied voor de opslag van tools, data voor RAID, systeemherstel, systeem setup, diagnostiek enz. Indien deze data toegankelijk moeten zijn vóór het opstarten, mag de HPA NIET gecodeerd worden. (Kies boven ‘Nee’)\n\nWilt u dat VeraCrypt een HPA opzoekt en codeert?</string>
- <string lang="nl" key="SYSENC_TYPE_PAGE_TITLE">Type Systeem Codering</string>
+ <string lang="nl" key="SYSENC_TYPE_PAGE_TITLE">Type SysteemCodering</string>
<string lang="nl" key="SYSENC_NORMAL_TYPE_HELP">Selecteer deze optie als u de systeempartitie of de gehele systeemschijf wilt coderen zonder deze te verbergen.</string>
<string lang="en" key="SYSENC_HIDDEN_TYPE_HELP">It may happen that you are forced by somebody to decrypt the operating system. There are many situations where you cannot refuse to do so (for example, due to extortion). If you select this option, you will create a hidden operating system whose existence should be impossible to prove (provided that certain guidelines are followed). Thus, you will not have to decrypt or reveal the password to the hidden operating system. For a detailed explanation, please click the link below.</string>
<string lang="en" key="HIDDEN_OS_PREINFO">It may happen that you are forced by somebody to decrypt the operating system. There are many situations where you cannot refuse to do so (for example, due to extortion).\n\nUsing this wizard, you can create a hidden operating system whose existence should be impossible to prove (provided that certain guidelines are followed). Thus, you will not have to decrypt or reveal the password for the hidden operating system.</string>
@@ -1172,9 +1172,9 @@
<string lang="nl" key="COLLECTING_RANDOM_DATA_TITLE">Verzamelen Random Data</string>
<string lang="nl" key="KEYS_GEN_TITLE">Sleutels aangemaakt</string>
<string lang="en" key="CD_BURNER_NOT_PRESENT">VeraCrypt has found no CD/DVD burner connected to your computer. VeraCrypt needs a CD/DVD burner to burn a bootable VeraCrypt Rescue Disk containing a backup of the encryption keys, VeraCrypt boot loader, original system loader, etc.\n\nWe strongly recommend that you burn the VeraCrypt Rescue Disk.</string>
- <string lang="en" key="CD_BURNER_NOT_PRESENT_WILL_STORE_ISO">I have no CD/DVD burner but I will store the Rescue Disk ISO image on a removable drive (e.g. USB flash drive).</string>
- <string lang="en" key="CD_BURNER_NOT_PRESENT_WILL_CONNECT_LATER">I will connect a CD/DVD burner to my computer later. Terminate the process now.</string>
- <string lang="en" key="CD_BURNER_NOT_PRESENT_CONNECTED_NOW">A CD/DVD burner is connected to my computer now. Continue and write the Rescue Disk.</string>
+ <string lang="nl" key="CD_BURNER_NOT_PRESENT_WILL_STORE_ISO">Ik heb geen CD/DVD brander, maar sla het herstelschijf ISO bestand op op een portable station (b.v. USB flash schijf).</string>
+ <string lang="nl" key="CD_BURNER_NOT_PRESENT_WILL_CONNECT_LATER">Ik zal later een CD/DVD brander aan de computer aansluiten. Het proces nu afbreken.</string>
+ <string lang="nl" key="CD_BURNER_NOT_PRESENT_CONNECTED_NOW">Een CD/DVD brander is nu aan de computer aangesloten. ga verder en maak een herstelschijf.</string>
<string lang="en" key="CD_BURNER_NOT_PRESENT_WILL_STORE_ISO_INFO">Please follow these steps:\n\n1) Connect a removable drive, such as a USB flash drive, to your computer now.\n\n2) Copy the VeraCrypt Rescue Disk image file (%s) to the removable drive.\n\nIn case you need to use the VeraCrypt Rescue Disk in the future, you will be able to connect your removable drive (containing the VeraCrypt Rescue Disk image) to a computer with a CD/DVD burner and create a bootable VeraCrypt Rescue Disk by burning the image to a CD or DVD. IMPORTANT: Note that the VeraCrypt Rescue Disk image file must be written to the CD/DVD as an ISO disk image (not as an individual file).</string>
<string lang="nl" key="RESCUE_DISK_RECORDING_TITLE">Reddingsschijf Maken</string>
<string lang="nl" key="RESCUE_DISK_CREATED_TITLE">Reddingsschijf Aangemaakt</string>
@@ -1231,7 +1231,7 @@
<string lang="nl" key="HIDDEN_OS_CREATION_PREINFO_TITLE">Klonen besturingssysteem</string>
<string lang="nl" key="HIDDEN_OS_CREATION_PREINFO_HELP">In de volgende stappen zal VeraCrypt het verborgen besturingssysteem aanmaken door de inhoud van de system partitie naar het verborgen volume te kopiëren (de te kopiëren data worden on-the-fly gecodeerd met een andere codering sleutel dan die van het lokvogel besturingssysteem)\n\nMerk op dat dit proces wordt uitgevoerd in de pre-boot omgeving (dus voordat Windows start) en dat voltooiing lang kan duren: meerder uren of zelfs dagen (afhankelijk van de grootte van de systeem partitie en van de prestaties van uw computer).\n\nU kunt het proces onderbreken, de computer afsluiten, en weer hervatten na aanzetten van de computer. Echter, na onderbreking zal het proces van het kopiëren en coderen van de systeem partitie altijd weer van voren af aan beginnen omdat de inhoud van deze partitie tijdens het klonen niet gewijzigd mag worden.</string>
<string lang="nl" key="CONFIRM_CANCEL_HIDDEN_OS_CREATION">Wilt u het gehele proces tot aanmaak van een verborgen besturingssysteem stoppen?\n\nNoot: U zult het proces NIET kunnen hervatten als u nu stopt.</string>
- <string lang="nl" key="CONFIRM_CANCEL_SYS_ENC_PRETEST">Wilt u de systeem codering pre-test annuleren?</string>
+ <string lang="nl" key="CONFIRM_CANCEL_SYS_ENC_PRETEST">Wilt u de systeemcodering pre-test annuleren?</string>
<string lang="en" key="BOOT_PRETEST_FAILED_RETRY">The VeraCrypt system encryption pretest failed. Do you want to try again?\n\nIf you select 'No', the pre-boot authentication component will be uninstalled.\n\nNotes:\n\n- If the VeraCrypt Boot Loader did not ask you to enter the password before Windows started, it is possible that your operating system does not boot from the drive on which it is installed. This is not supported.\n\n- If you used an encryption algorithm other than AES and the pretest failed (and you entered the password), it may have been caused by an inappropriately designed driver. Select 'No', and try encrypting the system partition/drive again, but use the AES encryption algorithm (which has the lowest memory requirements).\n\n- For more possible causes and solutions, see: https://veracrypt.codeplex.com/wikipage?title=Troubleshooting</string>
<string lang="nl" key="SYS_DRIVE_NOT_ENCRYPTED">De systeem partitie/schijf blijkt niet gecodeerd te zijn (ook niet gedeeltelijk).</string>
<string lang="nl" key="SETUP_FAILED_BOOT_DRIVE_ENCRYPTED">Uw systeem partitie/schijf is gecodeerd (volledig of geheel).\n\nDecodeer a.u.b. uw systeem partitie/schijf geheel alvorens verder te gaan. Om dit te doen, selecteer 'Systeem' &gt; 'Permanent Decoderen Systeem Partitie/Schijf' uit het menu van het hoofdscherm van VeraCrypt.</string>
@@ -1241,7 +1241,7 @@
<string lang="nl" key="SYSTEM_ENCRYPTION_NOT_COMPLETED">Het coderen/decoderen van de systeem partitie/schijf is niet voltooid. Wacht a.u.b. tot het is voltooid alvorens verder te gaan.</string>
<string lang="nl" key="ERR_ENCRYPTION_NOT_COMPLETED">Fout: Het coderen/decoderen van de partitie/schijf is niet voltooid. Het moet eerst afgerond worden.</string>
<string lang="nl" key="ERR_NONSYS_INPLACE_ENC_INCOMPLETE">Fout: Het coderingsproces van de partitie/volume is niet voltooid. Het moet eerst voltooid worden.\n\nOm het proces te hervatten, selecteer 'Volumes' &gt; 'Hervat Onderbroken Proces' uit het menu van het hoofdscherm van VeraCrypt.</string>
- <string lang="nl" key="ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG">Het wachtwoord is goed, VeraCrypt heeft de volumeheader gedecodeerd maar ontdekt dat dit een verborgen systeem volume is. U kunt de volumeheader van een verborgen systeem volume niet op deze manier wijzigen.\n\nOm het wachtwoord van een verborgen systeem volume te wijzigen, start het verborgen besturingssysteem en kies dan 'Systeem' &gt; 'Verander wachtwoord' uit het menu van het hoofdscherm van VeraCrypt.\n\nOm het header key afleidingsalgoritme aan te maken, start het verborgen besturingssysteem en lies dan 'Systeem' &gt; 'Creëer Header Key Afleidingsalgoritme'.</string>
+ <string lang="nl" key="ERR_SYS_HIDVOL_HEAD_REENC_MODE_WRONG">Het wachtwoord is goed, VeraCrypt heeft de volumeheader gedecodeerd maar ontdekt dat dit een verborgen systeemvolume is. U kunt de volumeheader van een verborgen systeemvolume niet op deze manier wijzigen.\n\nOm het wachtwoord van een verborgen systeemvolume te wijzigen, start het verborgen besturingssysteem en kies dan 'Systeem' &gt; 'Verander wachtwoord' uit het menu van het hoofdscherm van VeraCrypt.\n\nOm het header key afleidingsalgoritme aan te maken, start het verborgen besturingssysteem en lies dan 'Systeem' &gt; 'Creëer Header Key Afleidingsalgoritme'.</string>
<string lang="nl" key="CANNOT_DECRYPT_HIDDEN_OS">VeraCrypt ondersteunt geen Op-De-Plaats decodering van een verborgen systeem partitie.\n\nNoot:Als u de lokvogel systeem partitie wilt decoderen, start het lokvogel besturingssysteem en selecteer 'Systeem' &gt; 'Permanent Decoderen Systeem Partitie/Schijf' in het VeraCrypt hoofdscherm.</string>
<string lang="nl" key="ERR_PARAMETER_INCORRECT">Fout: Incorrecte/ongeldige parameter.</string>
<string lang="nl" key="DEVICE_SELECTED_IN_NON_DEVICE_MODE">U heeft een partitie of apparaat geselecteerd maar de functie van de wizard die u koos is alleen maar geschikt voor bestandscontainers.\n\nWilt u een andere functie van de wizard kiezen?</string>
@@ -1249,7 +1249,7 @@
<string lang="en" key="CONFIRM_SYSTEM_ENCRYPTION_MODE">You have selected the system partition/drive (or the boot partition), but the wizard mode you selected is suitable only for non-system partitions/drives.\n\nDo you want to set up pre-boot authentication (which means that you will need to enter your password each time before Windows boots/starts) and encrypt the system partition/drive?</string>
<string lang="nl" key="CONFIRM_DECRYPT_SYS_DEVICE">Bent u er zeker van dat u de systeempartitie/-schijf permanent wilt decoderen?</string>
<string lang="nl" key="CONFIRM_DECRYPT_SYS_DEVICE_CAUTION">VOORZICHTIG: Als u de systeempartitie/-schijf permanent decodeert, worden er ongecodeerde data naar geschreven.\n\nBent u er zeker van dat u de systeempartitie/-schijf permanent wilt decoderen?</string>
- <string lang="nl" key="CONFIRM_DECRYPT_NON_SYS_DEVICE">Weet je zeker dat je het navolgende station permanent wilt decoderen?</string>
+ <string lang="nl" key="CONFIRM_DECRYPT_NON_SYS_DEVICE">Weet u zeker dat u het navolgende station permanent wilt decoderen?</string>
<string lang="en" key="CONFIRM_DECRYPT_NON_SYS_DEVICE_CAUTION">CAUTION: If you permanently decrypt the VeraCrypt volume, unencrypted data will be written to the disk.\n\nAre you really sure you want to permanently decrypt the selected volume?</string>
<string lang="nl" key="CONFIRM_CASCADE_FOR_SYS_ENCRYPTION">Waarschuwing: als u codes in cascade gebruikt voor system codering, kunt u de volgende problemen tegenkomen:\n\n)1 De VeraCrypt Boot Lader is dan groter dan normaal waardoor er niet genoeg ruimte zou kunnen zijn op de eerste track van de schijf voor een back-up van deze Boot Lader. Als de Boot Lader beschadigd raakt, hetgeen nogal eens gebeurt (bijv. door slecht ontworpen anti-piraterij activatieprocedures van bepaalde programma’s), heeft u de VeraCrypt Reddingsschijf nodig om op te starten of om de Boot Lader te repareren.\n\n2) Op sommige computers neemt het herstarten uit de slaapstand meer tijd in beslag.\n\nDeze mogelijke problemen kunt u vermijden door een niet-cascade coderingsalgoritme (bijv. AES) te kiezen.\n\nBent u er zeker van dat u codes in cascade wilt gebruiken?</string>
<string lang="nl" key="NOTE_CASCADE_FOR_SYS_ENCRYPTION">Als u enige van de hiervoor beschreven problemen tegenkomt, decodeer de partitie/schijf (als het is gecodeerd) en codeer het daarna opnieuw met gebruik van een niet-cascade-code (bijv. AES).</string>
@@ -1295,10 +1295,10 @@
<string lang="nl" key="RESCUE_DISK">Reddingsschijf</string>
<string lang="nl" key="SELECT_FILE_AND_MOUNT">Selecteer &amp;bestand en koppel</string>
<string lang="nl" key="SELECT_DEVICE_AND_MOUNT">Selecteer &amp;apparaat en koppel</string>
- <string lang="en" key="DISABLE_NONADMIN_SYS_FAVORITES_ACCESS">Allow only administrators to view and dismount system favorite volumes in VeraCrypt</string>
- <string lang="en" key="MOUNT_SYSTEM_FAVORITES_ON_BOOT">Mount system favorite volumes when Windows starts (in the initial phase of the startup procedure)</string>
+ <string lang="nl" key="DISABLE_NONADMIN_SYS_FAVORITES_ACCESS">Toestaan dat alleen administrators favoriete systeemvolumes in VeraCrypt kunnen bekijken en ontkoppelen</string>
+ <string lang="nl" key="MOUNT_SYSTEM_FAVORITES_ON_BOOT">Koppel favoriete systeemvolumes wanneer Windows start (in de beginfase van de opstartprocedure)</string>
<string lang="nl" key="MOUNTED_VOLUME_DIRTY">Waarschuwing: Het volume gekoppeld als '%s' werd niet correct ontkoppeld en kan derhalve fouten bevatten. Het gebruik van een corrupt bestandssysteem kan dataverlies of verminking tot gevolg hebben.\n\nNoot: Voordat u een apparaat fysiek verwijdert of uitschakelt (bijv. een USB flash-drive of een externe harddisk) waarop een gekoppeld VeraCrypt volume staat, moet u altijd eerst dit volume ontkoppelen.\n\nWilt u dat windows probeert evt. fouten op dit volume op te sporen en te repareren?</string>
- <string lang="en" key="SYS_FAVORITE_VOLUME_DIRTY">Warning: One or more system favorite volumes were not cleanly dismounted and thus may contain filesystem errors. Please see the system event log for further details.\n\nUsing a corrupted filesystem can cause data loss or data corruption. You should check the affected system favorite volume(s) for errors (right-click each of them in VeraCrypt and select 'Repair Filesystem').</string>
+ <string lang="nl" key="SYS_FAVORITE_VOLUME_DIRTY">Waarschuwing: Een of meer favoriete systeemvolumes werden niet goed afgekoppeld en kunnen zodoende bestandsfouten bevatten. Controleer het systeem gebeurtenissenlogboek voor meer details.\n\nHet gebruik van een beschadigt bestandssysteem kan verlies of verminking van data tot gevolg hebben. U wordt aangeraden om de vermelde favoriete systeemvolume(s) op fouten te controleren. In VeraCrypt rechts-klikken op deze volumes en kies voor 'Repareer bestandssysteem').</string>
<string lang="nl" key="FILESYS_REPAIR_CONFIRM_BACKUP">Waarschuwing: Een beschadigd bestandssysteem repareren m.b.v. Microsoft ‘chkdsk’ kan verlies van bestanden in beschadigde gebieden tot gevolg hebben. Daarom wordt het aangeraden dat u eerst de bestanden uit het VeraCrypt volume kopieert naar een ander, intact, VeraCrypt volume.\n\nWilt u het bestandssysteem nu repareren?</string>
<string lang="en" key="MOUNTED_CONTAINER_FORCED_READ_ONLY">Volume '%s' has been mounted as read-only because write access was denied.\n\nPlease make sure the security permissions of the file container allow you to write to it (right-click the container and select Properties > Security).\n\nNote that, due to a Windows issue, you may see this warning even after setting the appropriate security permissions. This is not caused by a bug in VeraCrypt. A possible solution is to move your container to, e.g., your 'Documents' folder.\n\nIf you intend to keep your volume read-only, set the read-only attribute of the container (right-click the container and select Properties > Read-only), which will suppress this warning.</string>
<string lang="nl" key="MOUNTED_DEVICE_FORCED_READ_ONLY">Volume '%s' moest als read-only gekoppeld worden omdat schrijftoegang verboden werd.\n\nZorg ervoor dat geen ander programma (zoals antivirus software) bezig is met toegang tot de partitie/apparaat waarop het volume staat.</string>
@@ -1308,10 +1308,10 @@
<string lang="en" key="DISABLED_HW_AES_AFFECTS_PERFORMANCE">Note that hardware-accelerated AES is disabled, which will affect benchmark results (worse performance).\n\nTo enable hardware acceleration, select 'Settings' > 'Performance' and enable the corresponding option.</string>
<string lang="en" key="LIMITED_THREAD_COUNT_AFFECTS_PERFORMANCE">Note that the number of threads is currently limited, which will affect benchmark results (worse performance).\n\nTo utilize the full potential of the processor(s), select 'Settings' > 'Performance' and disable the corresponding option.</string>
<string lang="nl" key="ASK_REMOVE_DEVICE_WRITE_PROTECTION">Wilt u dat VeraCrypt probeert de schrijfbeveiliging op de partitie/schijf uit te zetten?</string>
- <string lang="en" key="CONFIRM_SETTING_DEGRADES_PERFORMANCE">WARNING: This setting may degrade performance.\n\nAre you sure you want to use this setting?</string>
+ <string lang="nl" key="CONFIRM_SETTING_DEGRADES_PERFORMANCE">WAARSCHUWING: Deze instelling kan de performance verslechteren.\n\nWeet u zeker dat u deze instelling wilt gebruiken?</string>
<string lang="nl" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN_TITLE">Waarschuwing: VeraCrypt volume auto-ontkoppeld</string>
<string lang="en" key="HOST_DEVICE_REMOVAL_DISMOUNT_WARN">Before you physically remove or turn off a device containing a mounted volume, you should always dismount the volume in VeraCrypt first.\n\nUnexpected spontaneous dismount is usually caused by an intermittently failing cable, drive (enclosure), etc.</string>
- <string lang="en" key="UNSUPPORTED_TRUECRYPT_FORMAT">This volume was created with TrueCrypt %x.%x but VeraCrypt supports only TrueCrypt volumes created with TrueCrypt 6.x/7.x series</string>
+ <string lang="nl" key="UNSUPPORTED_TRUECRYPT_FORMAT">Dit volume is met TrueCrypt %x.%x aangemaakt. VeraCrypt ondersteunt alleen TrueCrypt volumes gemaakt met TrueCrypt 6.x/7.x series</string>
<string lang="nl" key="TEST">Test</string>
<string lang="nl" key="KEYFILE">Sleutel</string>
<string lang="nl" key="VKEY_08">Backspace</string>
@@ -1395,13 +1395,13 @@
<string lang="nl" key="VOLUME_ID_NOT_FOUND">Geen volume met het opgegeven ID op het systeem gevonden</string>
<string lang="nl" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Kopieer waarde naar het klembord...</string>
<control lang="nl" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Vraag niet om de PIM in het pre-boot authenticatie venster (PIM waarde is ongecodeerd opgeslagen op schijf)</control>
- <string lang="nl" key="DISABLE_BOOT_LOADER_PIM_PROMPT">Waarschuwing: Houd er rekening mee dat wanneer je deze optie inschakelt, de PIM waarde ongecodeerd op schijf wordt opgeslagen.\n\nWeet je zeker dat je deze optie wilt inschakelen?</string>
+ <string lang="nl" key="DISABLE_BOOT_LOADER_PIM_PROMPT">Waarschuwing: Houd er rekening mee dat wanneer u deze optie inschakelt, de PIM waarde ongecodeerd op schijf wordt opgeslagen.\n\nWeet u zeker dat u deze optie wilt inschakelen?</string>
<string lang="nl" key="PIM_TOO_BIG">Persoonlijke iteraties multiplier (PIM) maximale waarde is 2147468.</string>
<control lang="nl" key="IDC_SKIP_RESCUE_VERIFICATION">Herstelschijf controle overslaan</control>
<control lang="nl" key="IDC_HIDE_WAITING_DIALOG">Geen wachtvenster tonen tijdens het uitvoeren van acties.</control>
- <control lang="en" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Do not request Hash algorithm in the pre-boot authentication screen</control>
- <string lang="en" key="GOST89_HELP">The GOST block cipher, defined in the standard GOST 28147-89 under name Magma, is a Soviet and Russian government standard symmetric key block cipher.\n\nDeveloped in the 1970s, the standard had been marked "Top Secret" and then downgraded to "Secret" in 1990. It was a Soviet alternative to the United States standard algorithm, DES.</string>
- <string lang="en" key="KUZNYECHIK_HELP">Kuznyechik is a block cipher first published in 2015 and defined in the National Standard of the Russian Federation GOST R 34.12-2015 and also in RFC 7801. 256-bit key, 128-bit block. Mode of operation is XTS.</string>
+ <control lang="nl" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Gebruik geen hash algoritme in het pre-boot authenticatievenster</control>
+ <string lang="nl" key="GOST89_HELP">Het GOST blok cijfercodering, vastgelegd in de standaard "GOST 28147-89" onder de naam Magma, is een Sovjet en Russische overheidsstandaard symetrische blok cijfercodering.\n\nOntwikkeld in de 1970er jaren, de standaard was gekenmerkt als "Uiterst geheim" en in 1990 afgewaardeerd tot "geheim". Het was een Sovjet alternatief voor de Verenigde Staten standaard algoritme, DES.</string>
+ <string lang="nl" key="KUZNYECHIK_HELP">Kuznyechik is een blok cijfercodering voor het eerst gepubliceerd in 2015 en vastgelegd in de "National Standard of the Russian Federation GOST R 34.12-2015" en ook in RFC 7801. 256-bit sleutel, 128-bit blok. Bewerkingsmodus is XTS.</string>
<string lang="nl" key="CAMELLIA_HELP">Gemeenschappelijk ontwikkeld door Mitsubishi Electric en NTT of Japan. Voor het eerst gepubliceerd in 2000. 256-bit sleutels, 128-bit blok. Modus voor bewerkingen is XTS. Het is goedgekeurd voor gebruik door de ISO/IEC, het Europese Gemeenschap's NESSIE project en het Japanse CRYPTREC project.</string>
<string lang="nl" key="TIME">Tijd</string>
<string lang="nl" key="ITERATIONS">Iteraties</string>
diff --git a/Translations/Language.nn.xml b/Translations/Language.nn.xml
index 06504d6..c0c33cc 100644
--- a/Translations/Language.nn.xml
+++ b/Translations/Language.nn.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="nn" name="Norsk Nynorsk" en-name="Norwegian (Nynorsk)" version="0.1.0" translators="Kjell Rune Helland" />
<!-- Fonts -->
diff --git a/Translations/Language.pl.xml b/Translations/Language.pl.xml
index f1e3775..fa215c8 100644
--- a/Translations/Language.pl.xml
+++ b/Translations/Language.pl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="pl" name="Polski" en-name="Polish" version="1.0.0" translators="Mirek Druchowicz, Janusz Zamecki, Sobiesław Antolak, Begina Felicysym" />
<!-- Fonts -->
diff --git a/Translations/Language.pt-br.xml b/Translations/Language.pt-br.xml
index 88e1094..39dc487 100644
--- a/Translations/Language.pt-br.xml
+++ b/Translations/Language.pt-br.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="pt-br" name="Português-Brasil" en-name="Portuguese (Brazil)" version="0.1.0" translators="Thiago C. L. Mendes, Lecidio S. Alencar , Lucas C. Ferreira" />
<!-- Fonts -->
diff --git a/Translations/Language.ru.xml b/Translations/Language.ru.xml
index 738c332..99e1a52 100644
--- a/Translations/Language.ru.xml
+++ b/Translations/Language.ru.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="ru" name="Русский" en-name="Russian" version="1.0.0" translators="Dmitry Yerokhin" />
<!-- Fonts -->
@@ -1077,7 +1077,7 @@
<string lang="ru" key="SYS_ENCRYPTION_UPGRADE_UNSUPPORTED_ON_VISTA_SP0">VeraCrypt больше не поддерживает шифрование системного раздела/диска в Windows Vista без установленного пакета обновления (Service Pack). Прежде чем обновить VeraCrypt, установите Service Pack 1 (или новее) для Windows Vista.</string>
<string lang="ru" key="FEATURE_REQUIRES_INSTALLATION">Ошибка! Чтобы воспользоваться этой функцией, нужно, чтобы VeraCrypt был УСТАНОВЛЕН в компьютере (сейчас VeraCrypt работает в 'переносном' режиме).\n\nУстановите (инсталлируйте) VeraCrypt и повторите попытку.</string>
<string lang="ru" key="WINDOWS_NOT_ON_BOOT_DRIVE_ERROR">ВНИМАНИЕ: Похоже, Windows не установлена на диске, с которого она загружается. Это не поддерживается.\n\nВам следует продолжить, только если вы уверены, что Windows установлена на том же диске, с которого она загружается.\n\nПродолжить?</string>
- <string lang="en" key="GPT_BOOT_DRIVE_UNSUPPORTED">You are running a 32-bit Windows and your system drive has a GUID partition table (GPT). Currently, only Windows 64-bit is supported for GPT system encryption.</string>
+ <string lang="ru" key="GPT_BOOT_DRIVE_UNSUPPORTED">Вы используете 32-разрядную версию Windows, а системный диск имеет таблицу разделов GUID (GPT). В настоящее время системное шифрование на дисках GPT поддерживается только в 64-разрядных версиях Windows.</string>
<string lang="ru" key="TC_BOOT_LOADER_ALREADY_INSTALLED">ОСТОРОЖНО: На системном диске уже установлен загрузчик VeraCrypt!\n\nВозможно, в вашем компьютере имеется другая уже зашифрованная система.\n\nВНИМАНИЕ: В СЛУЧАЕ ПРОДОЛЖЕНИЯ ШИФРОВАНИЯ ТЕКУЩЕЙ СИСТЕМЫ ЕСТЬ ВЕРОЯТНОСТЬ, ЧТО ДРУГИЕ СИСТЕМЫ НЕ СМОГУТ ЗАГРУЖАТЬСЯ, А ОТНОСЯЩИЕСЯ К НИМ ДАННЫЕ СТАНУТ НЕДОСТУПНЫМИ.\n\nВы действительно хотите продолжить?</string>
<string lang="ru" key="SYS_LOADER_RESTORE_FAILED">Ошибка восстановления исходного загрузчика системы.\n\nИспользуйте диск восстановления VeraCrypt ('Repair Options' &gt; 'Restore original system loader') или установочный диск Windows, чтобы заменить загрузчик VeraCrypt системным загрузчиком Windows.</string>
<string lang="ru" key="SYS_LOADER_UNAVAILABLE_FOR_RESCUE_DISK">Исходный системный загрузчик не будет сохранён на диске восстановления (возможная причина: нет файла с резервной копией).</string>
@@ -1388,31 +1388,31 @@
<string lang="ru" key="INIT_DLL">ОШИБКА: Не удалось загрузить системную библиотеку.</string>
<string lang="ru" key="ERR_EXFAT_INVALID_VOLUME_SIZE">Указанный в командной строке размер файла тома несовместим с выбранной файловой системой exFAT.</string>
<control lang="ru" key="IDT_ENTROPY_BAR">Хаотично из перемещений мыши</control>
- <control lang="en" key="IDT_VOLUME_ID">Volume ID:</control>
- <string lang="en" key="VOLUME_ID">Volume ID</string>
- <control lang="en" key="IDC_FAVORITE_USE_VOLUME_ID">Use Volume ID to mount favorite</control>
- <string lang="en" key="VOLUME_ID_INVALID">The Volume ID value is invalid</string>
- <string lang="en" key="VOLUME_ID_NOT_FOUND">No Volume with the specified ID was found on the system</string>
- <string lang="en" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Copy Value to Clipboard...</string>
- <control lang="en" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)</control>
- <string lang="en" key="DISABLE_BOOT_LOADER_PIM_PROMPT">WARNING: Please keep in mind that if you enable this option, the PIM value will be stored unencrypted on the disk.\n\nAre you sure you want to enable this option?</string>
- <string lang="en" key="PIM_TOO_BIG">Personal Iterations Multiplier (PIM) maximum value is 2147468.</string>
- <control lang="en" key="IDC_SKIP_RESCUE_VERIFICATION">Skip Rescue Disk verification</control>
- <control lang="en" key="IDC_HIDE_WAITING_DIALOG">Don't show wait message dialog when performing operations</control>
- <control lang="en" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Do not request Hash algorithm in the pre-boot authentication screen</control>
- <string lang="en" key="GOST89_HELP">The GOST block cipher, defined in the standard GOST 28147-89 under name Magma, is a Soviet and Russian government standard symmetric key block cipher.\n\nDeveloped in the 1970s, the standard had been marked "Top Secret" and then downgraded to "Secret" in 1990. It was a Soviet alternative to the United States standard algorithm, DES.</string>
- <string lang="en" key="KUZNYECHIK_HELP">Kuznyechik is a block cipher first published in 2015 and defined in the National Standard of the Russian Federation GOST R 34.12-2015 and also in RFC 7801. 256-bit key, 128-bit block. Mode of operation is XTS.</string>
- <string lang="en" key="CAMELLIA_HELP">Jointly developed by Mitsubishi Electric and NTT of Japan. First published on 2000. 256-bit key, 128-bit block. Mode of operation is XTS. It has been approved for use by the ISO/IEC, the European Union's NESSIE project and the Japanese CRYPTREC project.</string>
- <string lang="en" key="TIME">Time</string>
- <string lang="en" key="ITERATIONS">Iterations</string>
- <string lang="en" key="PRE-BOOT">Pre-Boot</string>
- <string lang="en" key="RESCUE_DISK_EFI_INFO">Before you can encrypt the partition, you must create a VeraCrypt Rescue Disk (VRD), which serves the following purposes:\n\n- If the VeraCrypt Boot Loader, master key, or other critical data gets damaged, the VRD allows you to restore it (note, however, that you will still have to enter the correct password then).\n\n- If Windows gets damaged and cannot start, the VRD allows you to permanently decrypt the partition before Windows starts.\n\n- The VRD will contain a backup of the present EFI boot loader and will allow you to restore it if necessary.\n\nThe VeraCrypt Rescue Disk ZIP image will be created in the location specified below.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you need to extract it to a USB stick that is formatted as FAT/FAT32.\n\n%lsAfter you create the Rescue Disk, click Next to verify that it has been correctly created.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">The Rescue Disk ZIP image has been created and stored in this file:\n%s\n\nNow you should either extract the image to a USB stick that is formatted as FAT/FAT32 or move it to a safe location for later use.\n\n%lsClick Next to continue.</string>
- <string lang="en" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">IMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\n</string>
- <string lang="en" key="RESCUE_DISK_EFI_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk, please eject and reinsert the USB stick; then click Next to try again. If this does not help, please try another USB stick and/or another ZIP software.\n\nIf you have not extracted the Rescue Disk yet, please do so, and then click Next.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created before you started this wizard, please note that such Rescue Disk cannot be used, because it was created for a different master key. You need to extract the newly generated Rescue Disk ZIP image.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Cannot verify that the Rescue Disk has been correctly extracted.\n\nIf you have extracted the Rescue Disk image to a USB stick, please eject it and reinsert it; then try again. If this does not help, please try other ZIP software and/or medium.\n\nIf you attempted to verify a VeraCrypt Rescue Disk created for a different master key, password, salt, etc., please note that such Rescue Disk will always fail this verification. To create a new Rescue Disk fully compatible with your current configuration, select 'System' > 'Create Rescue Disk'.</string>
- <string lang="en" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">The Rescue Disk image has been created and stored in this file:\n%s\n\nNow you need to extract the Rescue Disk image to a USB stick that is formatted as FAT/FAT32.\n\nIMPORTANT: Note that the zip file must be extracted directly to the root of the USB stick. For example, if the drive letter of the USB stick is E: then extracting the zip file should create a folder E:\\EFI on the USB stick.\n\nAfter you create the Rescue Disk, select 'System' > 'Verify Rescue Disk' to verify that it has been correctly created.</string>
+ <control lang="ru" key="IDT_VOLUME_ID">ID тома:</control>
+ <string lang="ru" key="VOLUME_ID">ID тома</string>
+ <control lang="ru" key="IDC_FAVORITE_USE_VOLUME_ID">Применять ID тома для монтирования избранного</control>
+ <string lang="ru" key="VOLUME_ID_INVALID">Неверное значение ID тома</string>
+ <string lang="ru" key="VOLUME_ID_NOT_FOUND">В системе нет тома с указанным идентификатором (ID)</string>
+ <string lang="ru" key="IDPM_COPY_VALUE_TO_CLIPBOARD">Скопировать значение в буфер обмена...</string>
+ <control lang="ru" key="IDC_DISABLE_BOOT_LOADER_PIM_PROMPT">Не спрашивать PIM на экране дозагрузочной аутентификации (PIM хранится незашифрованным на диске)</control>
+ <string lang="ru" key="DISABLE_BOOT_LOADER_PIM_PROMPT">ВНИМАНИЕ: Если включить эту опцию, то значение PIM будет храниться на диске в незашифрованном виде.\n\nВы действительно хотите включить эту опцию?</string>
+ <string lang="ru" key="PIM_TOO_BIG">Максимальное значение PIM (персонального умножителя итераций) равно 2147468.</string>
+ <control lang="ru" key="IDC_SKIP_RESCUE_VERIFICATION">Не проверять диск восстановления</control>
+ <control lang="ru" key="IDC_HIDE_WAITING_DIALOG">Не показывать окно ожидания во время операций</control>
+ <control lang="ru" key="IDC_DISABLE_BOOT_LOADER_HASH_PROMPT">Не спрашивать алгоритм хеширования на экране дозагрузочной аутентификации</control>
+ <string lang="ru" key="GOST89_HELP">Советский и российский государственный стандартный блочный шифр GOST с симметричным ключом, опубликованный в стандарте ГОСТ 28147-89 под названием "Магма".\nРазработан в 1970-х годах под грифом "Совершенно секретно", позже изменён на "Секретно". Советская альтернатива американскому алгоритму DES.</string>
+ <string lang="ru" key="KUZNYECHIK_HELP">Блочный шифр "Кузнечик" (Kuznyechik) был впервые опубликован в 2015 году и утверждён в качестве российского стандарта GOST R 34.12-2015 и также RFC 7801. 256-бит ключ, 128-бит блок. Режим работы: XTS.</string>
+ <string lang="ru" key="CAMELLIA_HELP">Совместная разработка японских компаний Mitsubishi Electric и NTT. Впервые опубликован в 2000 г. 256-бит ключ, 128-бит блок. Режим работы: XTS. Одобрен для использования ISO/IEC, проектом Евросоюза NESSIE и японским проектом CRYPTREC.</string>
+ <string lang="ru" key="TIME">Время</string>
+ <string lang="ru" key="ITERATIONS">Итерации</string>
+ <string lang="ru" key="PRE-BOOT">До загрузки</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_INFO">Перед шифрованием раздела необходимо создать диск восстановления (VeraCrypt Rescue Disk, VRD), который служит следующим целям:\n\n- При повреждении загрузчика VeraCrypt, мастер-ключа или других критических данных диск VRD позволяет их восстановить (при этом всё равно понадобится ввести правильный пароль).\n\n- При повреждении и невозможности загрузки Windows диск VRD позволяет перманентно расшифровать раздел до старта Windows.\n\n- VRD будет содержать резервную копию текущего загрузчика EFI и позволит при необходимости его восстановить.\n\nZip-образ диска восстановления VeraCrypt будет создан в указанном ниже месте.</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_EXTRACT_INFO">Zip-образ диска восстановления создан и сохранён в этом файле:\n%s\n\nСейчас вам нужно распаковать его на USB-флэшку, отформатированную в FAT/FAT32.\n\n%lsПосле создания диска восстановления нажмите "Далее", чтобы проверить, правильно ли он был создан.</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_EXTRACT_INFO_NO_CHECK">Zip-образ диска восстановления создан и сохранён в этом файле:\n%s\n\nСейчас вам следует либо распаковать его на USB-флэшку, отформатированную в FAT/FAT32, либо перенести его в надёжное место для использования в будущем.\n\n%lsНажмите "Далее" для продолжения.</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_EXTRACT_INFO_NOTE">ВАЖНО: Zip-файл нужно распаковать непосредственно в корневую папку USB-флэшки. Например, если флэшка имеет букву E:, то при распаковке Zip-файла на USB-флэшке должна быть создана папка E:\\EFI.\n\n</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_CHECK_FAILED">Невозможно проверить правильность распаковки диска восстановления.\n\nЕсли вы уже распаковали диск восстановления, выньте и снова вставьте USB-флэшку; затем нажмите "Далее", чтобы повторить попытку. Если это не поможет, используйте другую флэшку и/или другую Zip-программу.\n\nЕсли вы ещё не распаковали диск восстановления, сделайте это и затем нажмите "Далее".\n\nЕсли вы пытались проверить диск восстановления VeraCrypt до запуска этого мастера, учтите, что такой диск нельзя использовать, поскольку он был создан с другим мастер-ключом. Вам нужно распаковать вновь созданный Zip-образ диска восстановления.</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_NON_WIZARD_CHECK_FAILED">Невозможно проверить правильность распаковки диска восстановления.\n\nЕсли вы уже распаковали диск восстановления на USB-флэшку, выньте её и снова вставьте; затем повторите попытку. Если это не поможет, используйте другую Zip-программу и/или носитель.\n\nЕсли вы пытались проверить диск восстановления VeraCrypt, созданный с другим мастер-ключом, паролем, солью и т.д., учтите, что проверка такого диска будет всегда выдавать ошибку. Чтобы создать новый диск восстановления, полностью совместимый с текущей конфигурацией, выберите 'Система' > 'Создать диск восстановления'.</string>
+ <string lang="ru" key="RESCUE_DISK_EFI_NON_WIZARD_CREATION">Образ диска восстановления создан и сохранён в этом файле:\n%s\n\nСейчас вам нужно распаковать образ диска на USB-флэшку, отформатированную в FAT/FAT32.\n\nВАЖНО: Zip-файл нужно распаковать непосредственно в корневую папку USB-флэшки. Например, если флэшка имеет букву E:, то при распаковке Zip-файла на USB-флэшке должна быть создана папка E:\\EFI.\n\nПосле создания диска восстановления выберите 'Система' > 'Проверить диск восстановления', чтобы убедиться, что диск создан правильно.</string>
</localization>
<!-- XML Schema -->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
diff --git a/Translations/Language.sk.xml b/Translations/Language.sk.xml
index 945508b..c1533ac 100644
--- a/Translations/Language.sk.xml
+++ b/Translations/Language.sk.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="sk" name="Slovenčina" en-name="Slovak" version="0.1.0" translators="Kamil David" />
<!-- Fonts -->
diff --git a/Translations/Language.sl.xml b/Translations/Language.sl.xml
index d3b97fb..9a54345 100644
--- a/Translations/Language.sl.xml
+++ b/Translations/Language.sl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="sl" name="Slovenščina" en-name="Slovenian" version="0.1.0" translators="Erik David Salam" />
<!-- Fonts -->
diff --git a/Translations/Language.sv.xml b/Translations/Language.sv.xml
index b011dd1..0a9749a 100644
--- a/Translations/Language.sv.xml
+++ b/Translations/Language.sv.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="sv" name="Svenska" en-name="Swedish" version="1.0.0" translators="Peter Runesson" />
<!-- Fonts -->
diff --git a/Translations/Language.tr.xml b/Translations/Language.tr.xml
index e74492c..9413ee4 100644
--- a/Translations/Language.tr.xml
+++ b/Translations/Language.tr.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="tr" name="Türkçe" en-name="Turkish" version="0.1.0" translators="Ali İskender Turan, Zeynel Abidin Öztürk" />
<!-- Fonts -->
diff --git a/Translations/Language.uk.xml b/Translations/Language.uk.xml
index ca73519..4d72eeb 100644
--- a/Translations/Language.uk.xml
+++ b/Translations/Language.uk.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="uk" name="Українська" en-name="Ukrainian" version="1.0.0" translators="Kravchuk Olexandr, Babchuk Volodymyr" />
<!-- Fonts -->
diff --git a/Translations/Language.uz.xml b/Translations/Language.uz.xml
index 3c88d66..f77d9b6 100644
--- a/Translations/Language.uz.xml
+++ b/Translations/Language.uz.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="uz" name="Ўзбекча" en-name="Uzbek (Cyrillic)" version="0.1.0" translators="Abdurauf Azizov, Dmitry Yerokhin" />
<!-- Fonts -->
diff --git a/Translations/Language.vi.xml b/Translations/Language.vi.xml
index aa9af0c..671ecce 100644
--- a/Translations/Language.vi.xml
+++ b/Translations/Language.vi.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="vi" name="Tiếng Việt" en-name="Vietnamese" version="0.1.0" translators="Nguyễn Kim Huy" />
<!-- Fonts -->
diff --git a/Translations/Language.zh-cn.xml b/Translations/Language.zh-cn.xml
index efa33fb..74e7cac 100644
--- a/Translations/Language.zh-cn.xml
+++ b/Translations/Language.zh-cn.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="zh-cn" name="简体中文" en-name="Chinese (Simplified)" version="1.0.0" translators="Barney Li and Zhangjintao" />
<!-- Fonts -->
diff --git a/Translations/Language.zh-hk.xml b/Translations/Language.zh-hk.xml
index f579cb5..4845e85 100644
--- a/Translations/Language.zh-hk.xml
+++ b/Translations/Language.zh-hk.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="zh-hk" name="繁體中文" en-name="Chinese (Hong Kong)" version="0.1.0" translators="PUN Chi Ho" />
<!-- Fonts -->
diff --git a/Translations/Language.zh-tw.xml b/Translations/Language.zh-tw.xml
index 792ed10..b905edb 100644
--- a/Translations/Language.zh-tw.xml
+++ b/Translations/Language.zh-tw.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<VeraCrypt>
- <localization prog-version="1.18">
+ <localization prog-version="1.19">
<!-- Languages -->
<language langid="zh-tw" name="繁體中文" en-name="Chinese (Taiwan)" version="0.1.0" translators="Barney Li, Simon Ma, ChangMing Hsu" />
<!-- Fonts -->
diff --git a/doc/VeraCrypt User Guide.odt b/doc/VeraCrypt User Guide.odt
index 6e3cbac..ef4f3f3 100644
--- a/doc/VeraCrypt User Guide.odt
+++ b/doc/VeraCrypt User Guide.odt
Binary files differ
diff --git a/src/Boot/EFI/DcsBml32.efi b/src/Boot/EFI/DcsBml32.efi
new file mode 100644
index 0000000..8b3df11
--- /dev/null
+++ b/src/Boot/EFI/DcsBml32.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsBoot.efi b/src/Boot/EFI/DcsBoot.efi
index 03f1563..d6703d2 100644
--- a/src/Boot/EFI/DcsBoot.efi
+++ b/src/Boot/EFI/DcsBoot.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsBoot32.efi b/src/Boot/EFI/DcsBoot32.efi
new file mode 100644
index 0000000..93806f2
--- /dev/null
+++ b/src/Boot/EFI/DcsBoot32.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsCfg.efi b/src/Boot/EFI/DcsCfg.efi
index f836112..36b2b20 100644
--- a/src/Boot/EFI/DcsCfg.efi
+++ b/src/Boot/EFI/DcsCfg.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsCfg32.efi b/src/Boot/EFI/DcsCfg32.efi
new file mode 100644
index 0000000..e551771
--- /dev/null
+++ b/src/Boot/EFI/DcsCfg32.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsInt.efi b/src/Boot/EFI/DcsInt.efi
index a1fae2b..19ba53a 100644
--- a/src/Boot/EFI/DcsInt.efi
+++ b/src/Boot/EFI/DcsInt.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsInt32.efi b/src/Boot/EFI/DcsInt32.efi
new file mode 100644
index 0000000..05caedb
--- /dev/null
+++ b/src/Boot/EFI/DcsInt32.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsRe.efi b/src/Boot/EFI/DcsRe.efi
index 5c35b9c..822fa62 100644
--- a/src/Boot/EFI/DcsRe.efi
+++ b/src/Boot/EFI/DcsRe.efi
Binary files differ
diff --git a/src/Boot/EFI/DcsRe32.efi b/src/Boot/EFI/DcsRe32.efi
new file mode 100644
index 0000000..08ec484
--- /dev/null
+++ b/src/Boot/EFI/DcsRe32.efi
Binary files differ
diff --git a/src/Boot/EFI/LegacySpeaker32.efi b/src/Boot/EFI/LegacySpeaker32.efi
new file mode 100644
index 0000000..e92ec41
--- /dev/null
+++ b/src/Boot/EFI/LegacySpeaker32.efi
Binary files differ
diff --git a/src/Boot/Windows/Boot.vcproj b/src/Boot/Windows/Boot.vcproj
index c73b099..d53b320 100644
--- a/src/Boot/Windows/Boot.vcproj
+++ b/src/Boot/Windows/Boot.vcproj
@@ -1,250 +1,250 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Boot"
- ProjectGUID="{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
- RootNamespace="Boot"
- Keyword="MakeFileProj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;md Release_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA&#x0D;&#x0A;&#x0D;&#x0A;md Release_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
- ReBuildCommandLine="del /q /s Release &gt;NUL:&#x0D;&#x0A;md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES &gt;NUL:&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent &gt;NUL:&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish &gt;NUL:&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Camellia &gt;NUL:&#x0D;&#x0A;md Release_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue &gt;NUL:&#x0D;&#x0A;md Rescue 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_AES &gt;NUL:&#x0D;&#x0A;md Rescue_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_AES_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Serpent &gt;NUL:&#x0D;&#x0A;md Rescue_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Serpent_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Twofish &gt;NUL:&#x0D;&#x0A;md Rescue_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Twofish_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Camellia &gt;NUL:&#x0D;&#x0A;md Rescue_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
- CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish Release_Camellia Rescue Rescue_AES Rescue_Serpent Rescue_Twofish Rescue_Camellia &gt;NUL:&#x0D;&#x0A;del /q /s Release_SHA2 Release_AES_SHA2 Release_Serpent_SHA2 Release_Twofish_SHA2 Release_Camellia_SHA2 Rescue_SHA2 Rescue_AES_SHA2 Rescue_Serpent_SHA2 Rescue_Twofish_SHA2 Rescue_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;"
- Output="Release\BootLoader.com"
- PreprocessorDefinitions="WIN32;NDEBUG"
- IncludeSearchPath="&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(MSVC16_ROOT)\Include&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Release Loader|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
- ReBuildCommandLine="del /q /s Release &gt;NUL:&#x0D;&#x0A;md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES &gt;NUL:&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent &gt;NUL:&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish &gt;NUL:&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
- CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish &gt;NUL:"
- Output="Release\BootLoader.com"
- PreprocessorDefinitions="WIN32;NDEBUG"
- IncludeSearchPath="&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(MSVC16_ROOT)\Include&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\BootConfig.cpp"
- >
- </File>
- <File
- RelativePath=".\BootConsoleIo.cpp"
- >
- </File>
- <File
- RelativePath=".\BootCrt.asm"
- >
- </File>
- <File
- RelativePath=".\BootDebug.cpp"
- >
- </File>
- <File
- RelativePath=".\BootDiskIo.cpp"
- >
- </File>
- <File
- RelativePath=".\BootEncryptedIo.cpp"
- >
- </File>
- <File
- RelativePath=".\BootMain.cpp"
- >
- </File>
- <File
- RelativePath=".\BootMemory.cpp"
- >
- </File>
- <File
- RelativePath=".\BootSector.asm"
- >
- </File>
- <File
- RelativePath=".\Decompressor.c"
- >
- </File>
- <File
- RelativePath=".\IntFilter.cpp"
- >
- </File>
- <File
- RelativePath=".\Platform.cpp"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\..\Common\Crypto.c"
- >
- </File>
- <File
- RelativePath="..\..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\..\Common\Pkcs5.c"
- >
- </File>
- <File
- RelativePath="..\..\Common\Volumes.c"
- >
- </File>
- <File
- RelativePath="..\..\Common\Xts.c"
- >
- </File>
- </Filter>
- <Filter
- Name="Crypto"
- >
- <File
- RelativePath="..\..\Crypto\Aes_hw_cpu.asm"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\AesSmall.c"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\AesSmall_x86.asm"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\CamelliaSmall.c"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\Rmd160.c"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\Serpent.c"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\Sha2Small.c"
- >
- </File>
- <File
- RelativePath="..\..\Crypto\Twofish.c"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\Bios.h"
- >
- </File>
- <File
- RelativePath=".\BootCommon.h"
- >
- </File>
- <File
- RelativePath=".\BootConfig.h"
- >
- </File>
- <File
- RelativePath=".\BootConsoleIo.h"
- >
- </File>
- <File
- RelativePath=".\BootDebug.h"
- >
- </File>
- <File
- RelativePath=".\BootDefs.h"
- >
- </File>
- <File
- RelativePath=".\BootDiskIo.h"
- >
- </File>
- <File
- RelativePath=".\BootEncryptedIo.h"
- >
- </File>
- <File
- RelativePath=".\BootMain.h"
- >
- </File>
- <File
- RelativePath=".\BootMemory.h"
- >
- </File>
- <File
- RelativePath=".\BootStrings.h"
- >
- </File>
- <File
- RelativePath=".\IntFilter.h"
- >
- </File>
- <File
- RelativePath=".\Platform.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Build Files"
- >
- <File
- RelativePath=".\Makefile"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Boot"
+ ProjectGUID="{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
+ RootNamespace="Boot"
+ Keyword="MakeFileProj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;md Release_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Release_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA&#x0D;&#x0A;&#x0D;&#x0A;md Release_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;md Rescue_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
+ ReBuildCommandLine="del /q /s Release &gt;NUL:&#x0D;&#x0A;md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES &gt;NUL:&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent &gt;NUL:&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish &gt;NUL:&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Camellia &gt;NUL:&#x0D;&#x0A;md Release_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;md Release_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue &gt;NUL:&#x0D;&#x0A;md Rescue 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_AES &gt;NUL:&#x0D;&#x0A;md Rescue_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_AES_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_AES_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Serpent &gt;NUL:&#x0D;&#x0A;md Rescue_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Serpent_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Serpent_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Twofish &gt;NUL:&#x0D;&#x0A;md Rescue_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Twofish_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Twofish_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH RESCUE_DISK=1 SINGLE_PRF=SHA2&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Camellia &gt;NUL:&#x0D;&#x0A;md Rescue_Camellia 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Rescue_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;md Rescue_Camellia_SHA2 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=CAMELLIA RESCUE_DISK=1 SINGLE_PRF=SHA2"
+ CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish Release_Camellia Rescue Rescue_AES Rescue_Serpent Rescue_Twofish Rescue_Camellia &gt;NUL:&#x0D;&#x0A;del /q /s Release_SHA2 Release_AES_SHA2 Release_Serpent_SHA2 Release_Twofish_SHA2 Release_Camellia_SHA2 Rescue_SHA2 Rescue_AES_SHA2 Rescue_Serpent_SHA2 Rescue_Twofish_SHA2 Rescue_Camellia_SHA2 &gt;NUL:&#x0D;&#x0A;"
+ Output="Release\BootLoader.com"
+ PreprocessorDefinitions="WIN32;NDEBUG"
+ IncludeSearchPath="&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(MSVC16_ROOT)\Include&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Loader|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
+ ReBuildCommandLine="del /q /s Release &gt;NUL:&#x0D;&#x0A;md Release 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_AES &gt;NUL:&#x0D;&#x0A;md Release_AES 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=AES&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Serpent &gt;NUL:&#x0D;&#x0A;md Release_Serpent 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=SERPENT&#x0D;&#x0A;&#x0D;&#x0A;del /q /s Release_Twofish &gt;NUL:&#x0D;&#x0A;md Release_Twofish 2&gt;NUL:&#x0D;&#x0A;nmake.exe /nologo RELEASE=1 SINGLE_CIPHER=TWOFISH"
+ CleanCommandLine="del /q /s Release Release_AES Release_Serpent Release_Twofish &gt;NUL:"
+ Output="Release\BootLoader.com"
+ PreprocessorDefinitions="WIN32;NDEBUG"
+ IncludeSearchPath="&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(MSVC16_ROOT)\Include&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\BootConfig.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootConsoleIo.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootCrt.asm"
+ >
+ </File>
+ <File
+ RelativePath=".\BootDebug.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootDiskIo.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootEncryptedIo.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootMain.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootMemory.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\BootSector.asm"
+ >
+ </File>
+ <File
+ RelativePath=".\Decompressor.c"
+ >
+ </File>
+ <File
+ RelativePath=".\IntFilter.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\Platform.cpp"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Common\Crypto.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Common\Pkcs5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Common\Volumes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Common\Xts.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Crypto"
+ >
+ <File
+ RelativePath="..\..\Crypto\Aes_hw_cpu.asm"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\AesSmall.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\AesSmall_x86.asm"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\CamelliaSmall.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\Rmd160.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\Serpent.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\Sha2Small.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\Crypto\Twofish.c"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\Bios.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootCommon.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootConfig.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootConsoleIo.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootDebug.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootDefs.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootDiskIo.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootEncryptedIo.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootMain.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootMemory.h"
+ >
+ </File>
+ <File
+ RelativePath=".\BootStrings.h"
+ >
+ </File>
+ <File
+ RelativePath=".\IntFilter.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Platform.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Build Files"
+ >
+ <File
+ RelativePath=".\Makefile"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Boot/Windows/BootCommon.h b/src/Boot/Windows/BootCommon.h
index 1054395..5d099a2 100644
--- a/src/Boot/Windows/BootCommon.h
+++ b/src/Boot/Windows/BootCommon.h
@@ -17,7 +17,7 @@
#include "BootDefs.h"
// The user will be advised to upgrade the rescue disk if upgrading from the following or any previous version
-#define TC_RESCUE_DISK_UPGRADE_NOTICE_MAX_VERSION 0x0117
+#define TC_RESCUE_DISK_UPGRADE_NOTICE_MAX_VERSION 0x0118
#define TC_BOOT_LOADER_AREA_SIZE (TC_BOOT_LOADER_AREA_SECTOR_COUNT * TC_SECTOR_SIZE_BIOS)
diff --git a/src/Boot/Windows/BootConsoleIo.cpp b/src/Boot/Windows/BootConsoleIo.cpp
index 2fee84f..60305ea 100644
--- a/src/Boot/Windows/BootConsoleIo.cpp
+++ b/src/Boot/Windows/BootConsoleIo.cpp
@@ -299,6 +299,12 @@ void ClearBiosKeystrokeBuffer ()
mov cx, 32
cld
rep stosb
+
+ // reset position pointers at 0x41A and 0x41C to the begining
+ // of keyboard buffer to avoid revealing password/PIM length
+ mov ax, 0x001e
+ mov es:[0x41a], ax
+ mov es:[0x41c], ax
pop es
}
}
diff --git a/src/Boot/Windows/BootMain.cpp b/src/Boot/Windows/BootMain.cpp
index 57697a4..acae03a 100644
--- a/src/Boot/Windows/BootMain.cpp
+++ b/src/Boot/Windows/BootMain.cpp
@@ -581,7 +581,9 @@ err:
crypto_close (BootCryptoInfo);
BootCryptoInfo = NULL;
}
-
+#ifndef TC_WINDOWS_BOOT_RESCUE_DISK_MODE
+ PimValueOrHiddenVolumeStartUnitNo.LowPart = -1;
+#endif
EncryptedVirtualPartition.Drive = TC_INVALID_BIOS_DRIVE;
EraseMemory ((void *) TC_BOOT_LOADER_ARGS_OFFSET, sizeof (BootArguments));
@@ -801,6 +803,7 @@ err:
GetKeyboardChar();
ret:
+ PimValueOrHiddenVolumeStartUnitNo.LowPart = -1;
EraseMemory ((void *) TC_BOOT_LOADER_ARGS_OFFSET, sizeof (BootArguments));
return status;
}
diff --git a/src/Boot/Windows/Makefile b/src/Boot/Windows/Makefile
index c0f5d62..1e6e21a 100644
--- a/src/Boot/Windows/Makefile
+++ b/src/Boot/Windows/Makefile
@@ -197,7 +197,7 @@ $(LIBS)
del $(PROJ).crf $(PROJ).crf2
# Compress the Rescue Disk botloader for Cascades and Serpent since it is too big (size > 31232 bytes)
-!if DEFINED(RESCUE_DISK) && (!DEFINED (SINGLE_CIPHER) || ("$(SINGLE_CIPHER)" == "SERPENT"))
+!if DEFINED(RESCUE_DISK) && (!DEFINED (SINGLE_CIPHER) || ("$(SINGLE_CIPHER)" == "SERPENT") || ("$(SINGLE_CIPHER)" == "CAMELLIA"))
upx $(PROJ).$(TARGETEXT)
!endif
gzip.exe -c -n --best $(PROJ).$(TARGETEXT) >$(PROJ).$(TARGETEXT).gz
diff --git a/src/Build/Resources/MacOSX/Info.plist.xml b/src/Build/Resources/MacOSX/Info.plist.xml
index 193bba6..3fa2ee0 100644
--- a/src/Build/Resources/MacOSX/Info.plist.xml
+++ b/src/Build/Resources/MacOSX/Info.plist.xml
@@ -27,7 +27,7 @@
<string>TRUE</string>
<key>CFBundleVersion</key>
- <string>1.18.13</string>
+ <string>1.19.4</string>
<key>CFBundleShortVersionString</key>
<string>_VERSION_</string>
diff --git a/src/Build/Tools/MacOSX/yasm b/src/Build/Tools/MacOSX/yasm
new file mode 100755
index 0000000..d17889a
--- /dev/null
+++ b/src/Build/Tools/MacOSX/yasm
Binary files differ
diff --git a/src/Common/Apidrvr.h b/src/Common/Apidrvr.h
index 36233d7..07a8448 100644
--- a/src/Common/Apidrvr.h
+++ b/src/Common/Apidrvr.h
@@ -124,6 +124,8 @@
#define TC_IOCTL_LEGACY_GET_DRIVER_VERSION 466968
#define TC_IOCTL_LEGACY_GET_MOUNTED_VOLUMES 466948
+// Undocumented IOCTL sent by Windows 10 when handling EFS data on volumes
+#define IOCTL_UNKNOWN_WINDOWS10_EFS_ACCESS 0x455610D8
/* Start of driver interface structures, the size of these structures may
change between versions; so make sure you first send DRIVER_VERSION to
diff --git a/src/Common/BootEncryption.cpp b/src/Common/BootEncryption.cpp
index 984402d..cd7ea79 100644
--- a/src/Common/BootEncryption.cpp
+++ b/src/Common/BootEncryption.cpp
@@ -29,8 +29,7 @@
#include "Registry.h"
#include "Volumes.h"
#include "Xml.h"
-#include "XZip.h"
-#include "XUnzip.h"
+#include "zip.h"
#ifdef VOLFORMAT
#include "Format/FormatCom.h"
@@ -40,6 +39,22 @@
#include <Strsafe.h>
+bool ZipAdd (zip_t *z, const char* name, const unsigned char* pbData, DWORD cbData)
+{
+ zip_error_t zerr;
+ zip_source_t* zin = zip_source_buffer_create (pbData, cbData, 0, &zerr);
+ if (!zin)
+ return false;
+
+ if (-1 == zip_file_add (z, name, zin, 0))
+ {
+ zip_source_free (zin);
+ return false;
+ }
+
+ return true;
+}
+
namespace VeraCrypt
{
#if !defined (SETUP)
@@ -2336,7 +2351,7 @@ namespace VeraCrypt
}
- void EfiBoot::SaveFile(wchar_t* name, byte* data, DWORD size) {
+ void EfiBoot::SaveFile(const wchar_t* name, byte* data, DWORD size) {
wstring path = EfiBootPartPath;
path += name;
File f(path, false, true);
@@ -2374,7 +2389,7 @@ namespace VeraCrypt
throw_sys_if (!::CopyFileW (path.c_str(), targetPath.c_str(), FALSE));
}
- BOOL EfiBoot::RenameFile(wchar_t* name, wchar_t* nameNew, BOOL bForce) {
+ BOOL EfiBoot::RenameFile(const wchar_t* name, wchar_t* nameNew, BOOL bForce) {
wstring path = EfiBootPartPath;
path += name;
wstring pathNew = EfiBootPartPath;
@@ -2382,13 +2397,13 @@ namespace VeraCrypt
return MoveFileExW(path.c_str(), pathNew.c_str(), bForce? MOVEFILE_REPLACE_EXISTING : 0);
}
- BOOL EfiBoot::DelFile(wchar_t* name) {
+ BOOL EfiBoot::DelFile(const wchar_t* name) {
wstring path = EfiBootPartPath;
path += name;
return DeleteFile(path.c_str());
}
- BOOL EfiBoot::MkDir(wchar_t* name, bool& bAlreadyExists) {
+ BOOL EfiBoot::MkDir(const wchar_t* name, bool& bAlreadyExists) {
wstring path = EfiBootPartPath;
path += name;
bAlreadyExists = false;
@@ -2401,7 +2416,13 @@ namespace VeraCrypt
return bRet;
}
- BOOL EfiBoot::ReadConfig (wchar_t* name, EfiBootConf& conf)
+ BOOL EfiBoot::DelDir(const wchar_t* name) {
+ wstring path = EfiBootPartPath;
+ path += name;
+ return DeleteDirectory (path.c_str());
+ }
+
+ BOOL EfiBoot::ReadConfig (const wchar_t* name, EfiBootConf& conf)
{
wstring path = EfiBootPartPath;
path += name;
@@ -2409,7 +2430,7 @@ namespace VeraCrypt
return conf.Load (path.c_str());
}
- BOOL EfiBoot::UpdateConfig (wchar_t* name, int pim, int hashAlgo, HWND hwndDlg)
+ BOOL EfiBoot::UpdateConfig (const wchar_t* name, int pim, int hashAlgo, HWND hwndDlg)
{
BOOL bRet = FALSE;
EfiBootConf conf;
@@ -2446,7 +2467,7 @@ namespace VeraCrypt
return bRet;
}
- BOOL EfiBoot::WriteConfig (wchar_t* name, bool preserveUserConfig, int pim, int hashAlgo, const char* passPromptMsg, HWND hwndDlg)
+ BOOL EfiBoot::WriteConfig (const wchar_t* name, bool preserveUserConfig, int pim, int hashAlgo, const char* passPromptMsg, HWND hwndDlg)
{
EfiBootConf conf;
wstring path = EfiBootPartPath;
@@ -2522,23 +2543,23 @@ namespace VeraCrypt
}
}
DWORD sizeDcsBoot;
- byte *dcsBootImg = MapResource(L"BIN", IDR_EFI_DCSBOOT, &sizeDcsBoot);
+ byte *dcsBootImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSBOOT : IDR_EFI_DCSBOOT32, &sizeDcsBoot);
if (!dcsBootImg)
throw ErrorException(L"Out of resource DcsBoot", SRC_POS);
DWORD sizeDcsInt;
- byte *dcsIntImg = MapResource(L"BIN", IDR_EFI_DCSINT, &sizeDcsInt);
+ byte *dcsIntImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSINT: IDR_EFI_DCSINT32, &sizeDcsInt);
if (!dcsIntImg)
throw ErrorException(L"Out of resource DcsInt", SRC_POS);
DWORD sizeDcsCfg;
- byte *dcsCfgImg = MapResource(L"BIN", IDR_EFI_DCSCFG, &sizeDcsCfg);
+ byte *dcsCfgImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSCFG: IDR_EFI_DCSCFG32, &sizeDcsCfg);
if (!dcsCfgImg)
throw ErrorException(L"Out of resource DcsCfg", SRC_POS);
DWORD sizeLegacySpeaker;
- byte *LegacySpeakerImg = MapResource(L"BIN", IDR_EFI_LEGACYSPEAKER, &sizeLegacySpeaker);
+ byte *LegacySpeakerImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_LEGACYSPEAKER: IDR_EFI_LEGACYSPEAKER32, &sizeLegacySpeaker);
if (!LegacySpeakerImg)
throw ErrorException(L"Out of resource LegacySpeaker", SRC_POS);
DWORD sizeBootMenuLocker;
- byte *BootMenuLockerImg = MapResource(L"BIN", IDR_EFI_DCSBML, &sizeBootMenuLocker);
+ byte *BootMenuLockerImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSBML: IDR_EFI_DCSBML32, &sizeBootMenuLocker);
if (!BootMenuLockerImg)
throw ErrorException(L"Out of resource DcsBml", SRC_POS);
@@ -2552,7 +2573,7 @@ namespace VeraCrypt
EfiBootInst.MkDir(L"\\EFI\\VeraCrypt", bAlreadyExist);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsBoot.efi", dcsBootImg, sizeDcsBoot);
- EfiBootInst.SaveFile(L"\\EFI\\Boot\\bootx64.efi", dcsBootImg, sizeDcsBoot);
+ EfiBootInst.SaveFile(Is64BitOs()? L"\\EFI\\Boot\\bootx64.efi": L"\\EFI\\Boot\\bootia32.efi", dcsBootImg, sizeDcsBoot);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsInt.dcs", dcsIntImg, sizeDcsInt);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\DcsCfg.dcs", dcsCfgImg, sizeDcsCfg);
EfiBootInst.SaveFile(L"\\EFI\\VeraCrypt\\LegacySpeaker.dcs", LegacySpeakerImg, sizeLegacySpeaker);
@@ -2566,7 +2587,10 @@ namespace VeraCrypt
// move the original bootloader backup from old location (if it exists) to new location
// we don't force the move operation if the new location already exists
- EfiBootInst.RenameFile (L"\\EFI\\Boot\\original_bootx64_vc_backup.efi", L"\\EFI\\Boot\\original_bootx64.vc_backup", FALSE);
+ if (Is64BitOs())
+ EfiBootInst.RenameFile (L"\\EFI\\Boot\\original_bootx64_vc_backup.efi", L"\\EFI\\Boot\\original_bootx64.vc_backup", FALSE);
+ else
+ EfiBootInst.RenameFile (L"\\EFI\\Boot\\original_bootia32_vc_backup.efi", L"\\EFI\\Boot\\original_bootia32.vc_backup", FALSE);
// Clean beta9
EfiBootInst.DelFile(L"\\DcsBoot.efi");
@@ -2715,49 +2739,56 @@ namespace VeraCrypt
{
// create EFI disk structure
DWORD sizeDcsBoot;
- byte *dcsBootImg = MapResource(L"BIN", IDR_EFI_DCSBOOT, &sizeDcsBoot);
+ byte *dcsBootImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSBOOT: IDR_EFI_DCSBOOT32, &sizeDcsBoot);
if (!dcsBootImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsInt;
- byte *dcsIntImg = MapResource(L"BIN", IDR_EFI_DCSINT, &sizeDcsInt);
+ byte *dcsIntImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSINT: IDR_EFI_DCSINT32, &sizeDcsInt);
if (!dcsIntImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsCfg;
- byte *dcsCfgImg = MapResource(L"BIN", IDR_EFI_DCSCFG, &sizeDcsCfg);
+ byte *dcsCfgImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSCFG: IDR_EFI_DCSCFG32, &sizeDcsCfg);
if (!dcsCfgImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeLegacySpeaker;
- byte *LegacySpeakerImg = MapResource(L"BIN", IDR_EFI_LEGACYSPEAKER, &sizeLegacySpeaker);
+ byte *LegacySpeakerImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_LEGACYSPEAKER: IDR_EFI_LEGACYSPEAKER32, &sizeLegacySpeaker);
if (!LegacySpeakerImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeBootMenuLocker;
- byte *BootMenuLockerImg = MapResource(L"BIN", IDR_EFI_DCSBML, &sizeBootMenuLocker);
+ byte *BootMenuLockerImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSBML: IDR_EFI_DCSBML32, &sizeBootMenuLocker);
if (!BootMenuLockerImg)
throw ParameterIncorrect (SRC_POS);
DWORD sizeDcsRescue;
- byte *DcsRescueImg = MapResource(L"BIN", IDR_EFI_DCSRE, &sizeDcsRescue);
+ byte *DcsRescueImg = MapResource(L"BIN", Is64BitOs()? IDR_EFI_DCSRE: IDR_EFI_DCSRE32, &sizeDcsRescue);
if (!DcsRescueImg)
throw ParameterIncorrect (SRC_POS);
- unsigned int maxRescueZipSize = 4 * 1024 * 1024;
- ZRESULT res;
- HZIP hz = CreateZip (0, maxRescueZipSize, ZIP_MEMORY);
- if (!hz)
+ char szTmpPath[MAX_PATH + 1], szTmpFilePath[MAX_PATH + 1];
+ if (!GetTempPathA (MAX_PATH, szTmpPath))
+ throw SystemException (SRC_POS);
+ if (!GetTempFileNameA (szTmpPath, "_vrd", 0, szTmpFilePath))
+ throw SystemException (SRC_POS);
+
+ finally_do_arg (char*, szTmpFilePath, { DeleteFileA (finally_arg);});
+
+ int ierr;
+ zip_t* z = zip_open (szTmpFilePath, ZIP_CREATE | ZIP_TRUNCATE | ZIP_CHECKCONS, &ierr);
+ if (!z)
throw ParameterIncorrect (SRC_POS);
- finally_do_arg (HZIP, hz, { CloseZip (finally_arg); });
+ finally_do_arg (zip_t**, &z, { if (*finally_arg) zip_discard (*finally_arg);});
- if (ZR_OK != ZipAdd (hz, L"EFI/Boot/bootx64.efi", DcsRescueImg, sizeDcsRescue, ZIP_MEMORY))
+ if (!ZipAdd (z, Is64BitOs()? "EFI/Boot/bootx64.efi": "EFI/Boot/bootia32.efi", DcsRescueImg, sizeDcsRescue))
throw ParameterIncorrect (SRC_POS);
- if (ZR_OK !=ZipAdd (hz, L"EFI/VeraCrypt/DcsBml.dcs", BootMenuLockerImg, sizeBootMenuLocker, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/DcsBml.dcs", BootMenuLockerImg, sizeBootMenuLocker))
throw ParameterIncorrect (SRC_POS);
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/DcsBoot.efi", dcsBootImg, sizeDcsBoot, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/DcsBoot.efi", dcsBootImg, sizeDcsBoot))
throw ParameterIncorrect (SRC_POS);
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/DcsCfg.dcs", dcsCfgImg, sizeDcsCfg, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/DcsCfg.dcs", dcsCfgImg, sizeDcsCfg))
throw ParameterIncorrect (SRC_POS);
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/DcsInt.dcs", dcsIntImg, sizeDcsInt, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/DcsInt.dcs", dcsIntImg, sizeDcsInt))
throw ParameterIncorrect (SRC_POS);
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/LegacySpeaker.dcs", LegacySpeakerImg, sizeLegacySpeaker, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/LegacySpeaker.dcs", LegacySpeakerImg, sizeLegacySpeaker))
throw ParameterIncorrect (SRC_POS);
Buffer volHeader(TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE);
@@ -2778,20 +2809,21 @@ namespace VeraCrypt
bootDevice.Read (volHeader.Ptr (), TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE);
}
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/svh_bak", volHeader.Ptr (), TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/svh_bak", volHeader.Ptr (), TC_BOOT_ENCRYPTION_VOLUME_HEADER_SIZE))
throw ParameterIncorrect (SRC_POS);
// Original system loader
- res = ZR_WRITE;
+ Buffer fileBuf (0);
+ bool bLoadAdded = false;
try
{
DWORD fileSize = 0;
File sysBakFile (GetSystemLoaderBackupPath(), true);
sysBakFile.CheckOpened (SRC_POS);
sysBakFile.GetFileSize(fileSize);
- Buffer fileBuf ((DWORD) fileSize);
+ fileBuf.Resize ((DWORD) fileSize);
DWORD sizeLoader = sysBakFile.Read (fileBuf.Ptr (), fileSize);
- res = ZipAdd (hz, L"EFI/Boot/original_bootx64.vc_backup", fileBuf.Ptr (), sizeLoader, ZIP_MEMORY);
+ bLoadAdded = ZipAdd (z, Is64BitOs()? "EFI/Boot/original_bootx64.vc_backup": "EFI/Boot/original_bootia32.vc_backup", fileBuf.Ptr (), sizeLoader);
}
catch (Exception &e)
{
@@ -2799,10 +2831,11 @@ namespace VeraCrypt
Warning ("SYS_LOADER_UNAVAILABLE_FOR_RESCUE_DISK", ParentWindow);
}
- if (res != ZR_OK)
+ if (!bLoadAdded)
throw ParameterIncorrect (SRC_POS);
EfiBootConf conf;
+ Buffer propBuf (0);
wstring dcsPropFileName = GetTempPathString() + L"_dcsproprescue";
finally_do_arg (wstring, dcsPropFileName, { DeleteFileW (finally_arg.c_str()); });
if (conf.Save(dcsPropFileName.c_str(), ParentWindow))
@@ -2811,24 +2844,40 @@ namespace VeraCrypt
File propFile (dcsPropFileName, true, false);
propFile.CheckOpened (SRC_POS);
propFile.GetFileSize(fileSize);
- Buffer propBuf (fileSize);
+ propBuf.Resize (fileSize);
DWORD sizeDcsProp = propFile.Read (propBuf.Ptr (), fileSize);
- if (ZR_OK != ZipAdd (hz, L"EFI/VeraCrypt/DcsProp", propBuf.Ptr (), sizeDcsProp, ZIP_MEMORY))
+ if (!ZipAdd (z, "EFI/VeraCrypt/DcsProp", propBuf.Ptr (), sizeDcsProp))
throw ParameterIncorrect (SRC_POS);
}
else
throw ParameterIncorrect (SRC_POS);
- void* pZipContent = NULL;
- unsigned long ulZipSize = 0;
- if (ZR_OK != ZipGetMemory (hz, &pZipContent, &ulZipSize))
+ // flush the zip content to the temporary file
+ if (zip_close (z) < 0)
throw ParameterIncorrect (SRC_POS);
-
+
+ z = NULL;
+
+ // read the zip data from the temporary file
+ FILE* ftmpFile = fopen (szTmpFilePath, "rb");
+ if (!ftmpFile)
+ throw ParameterIncorrect (SRC_POS);
+
+ finally_do_arg (FILE*, ftmpFile, { fclose (finally_arg); });
+
+ unsigned long ulZipSize = (unsigned long) _filelength (_fileno (ftmpFile));
RescueZipData = new byte[ulZipSize];
if (!RescueZipData)
throw bad_alloc();
- memcpy (RescueZipData, pZipContent, ulZipSize);
+
+ if (ulZipSize != fread (RescueZipData, 1, ulZipSize, ftmpFile))
+ {
+ delete [] RescueZipData;
+ RescueZipData = NULL;
+ throw ParameterIncorrect (SRC_POS);
+ }
+
RescueZipSize = ulZipSize;
if (!isoImagePath.empty())
@@ -2989,7 +3038,7 @@ namespace VeraCrypt
if (bIsGPT)
{
- const wchar_t* efiFiles[] = {
+ const wchar_t* efi64Files[] = {
L"EFI/Boot/bootx64.efi",
L"EFI/VeraCrypt/DcsBml.dcs",
L"EFI/VeraCrypt/DcsBoot.efi",
@@ -2999,12 +3048,30 @@ namespace VeraCrypt
L"EFI/VeraCrypt/svh_bak",
L"EFI/Boot/original_bootx64.vc_backup"
};
+
+ const wchar_t* efi32Files[] = {
+ L"EFI/Boot/bootia32.efi",
+ L"EFI/VeraCrypt/DcsBml.dcs",
+ L"EFI/VeraCrypt/DcsBoot.efi",
+ L"EFI/VeraCrypt/DcsCfg.dcs",
+ L"EFI/VeraCrypt/DcsInt.dcs",
+ L"EFI/VeraCrypt/LegacySpeaker.dcs",
+ L"EFI/VeraCrypt/svh_bak",
+ L"EFI/Boot/original_bootia32.vc_backup"
+ };
- ZRESULT res;
- HZIP hz = OpenZip(RescueZipData, RescueZipSize, ZIP_MEMORY);
- if (!hz)
+ zip_error_t zerr;
+ zip_source_t* zsrc = zip_source_buffer_create (RescueZipData, RescueZipSize, 0, &zerr);
+ if (!zsrc)
+ throw ParameterIncorrect (SRC_POS);
+ zip_t* z = zip_open_from_source (zsrc, ZIP_CHECKCONS | ZIP_RDONLY, &zerr);
+ if (!z)
+ {
+ zip_source_free (zsrc);
throw ParameterIncorrect (SRC_POS);
- finally_do_arg (HZIP, hz, { CloseZip (finally_arg); });
+ }
+
+ finally_do_arg (zip_t*, z, { zip_close (finally_arg); });
for (WCHAR drive = L'Z'; drive >= L'C'; --drive)
{
@@ -3019,42 +3086,50 @@ namespace VeraCrypt
if (GetVolumeInformationW (rootPath, NULL, 0, NULL, NULL, NULL, szNameBuffer, ARRAYSIZE(szNameBuffer))
&& !wcsncmp (szNameBuffer, L"FAT", 3))
{
- int index, i;
- ZIPENTRYW ze;
- for (i = 0; i < ARRAYSIZE(efiFiles); i++)
+ int i;
+ const wchar_t** efiFiles = Is64BitOs()? efi64Files: efi32Files;
+ int efiFilesSize = Is64BitOs()? ARRAYSIZE(efi64Files): ARRAYSIZE(efi32Files);
+ for (i = 0; i < efiFilesSize; i++)
{
bool bMatch = false;
- res = FindZipItemW (hz, efiFiles[i], true, &index, &ze);
- if ((res == ZR_OK) && (index >= 0))
+ zip_int64_t index = zip_name_locate (z, WideToUtf8String (efiFiles[i]).c_str(), ZIP_FL_NOCASE);
+ if (index >= 0)
{
- // check that the file exists on the disk and that it has the same content
- StringCbCopyW (szNameBuffer, sizeof (szNameBuffer), rootPath);
- StringCbCatW (szNameBuffer, sizeof (szNameBuffer), efiFiles[i]);
-
- try
+ zip_stat_t stat;
+ if ((0 == zip_stat_index (z, index, ZIP_FL_NOCASE, &stat)) && (stat.valid & ZIP_STAT_SIZE))
{
- DWORD dwSize = 0;
- File diskFile (szNameBuffer, true);
- diskFile.CheckOpened (SRC_POS);
- diskFile.GetFileSize (dwSize);
- if (dwSize == (DWORD) ze.unc_size)
+ // check that the file exists on the disk and that it has the same content
+ StringCbCopyW (szNameBuffer, sizeof (szNameBuffer), rootPath);
+ StringCbCatW (szNameBuffer, sizeof (szNameBuffer), efiFiles[i]);
+
+ try
{
- Buffer fileBuf (dwSize);
- if (dwSize == diskFile.Read (fileBuf.Ptr (), dwSize))
+ DWORD dwSize = 0;
+ File diskFile (szNameBuffer, true);
+ diskFile.CheckOpened (SRC_POS);
+ diskFile.GetFileSize (dwSize);
+ if (dwSize == (DWORD) stat.size)
{
- Buffer efiBuf (dwSize);
- res = UnzipItem (hz, ze.index, efiBuf.Ptr (), dwSize, ZIP_MEMORY);
- if (res == ZR_OK)
+ Buffer fileBuf (dwSize);
+ if (dwSize == diskFile.Read (fileBuf.Ptr (), dwSize))
{
- bMatch = (memcmp (efiBuf.Ptr(), fileBuf.Ptr(), dwSize) == 0);
+ Buffer efiBuf (dwSize);
+ zip_file_t* zf = zip_fopen_index (z, index, 0);
+ if (zf)
+ {
+ if (0 < zip_fread (zf, efiBuf.Ptr (), stat.size))
+ {
+ bMatch = (memcmp (efiBuf.Ptr(), fileBuf.Ptr(), dwSize) == 0);
+ }
+ zip_fclose (zf);
+ }
}
- }
- }
- }
- catch (...)
- {
+ }
+ }
+ catch (...)
+ {
+ }
}
-
}
else
{
@@ -3066,7 +3141,7 @@ namespace VeraCrypt
break;
}
- if (i == ARRAYSIZE(efiFiles))
+ if (i == efiFilesSize)
{
// All entries processed
return true;
@@ -3129,70 +3204,112 @@ namespace VeraCrypt
if (dwSize == rescueFile.Read (rescueData.Ptr (), dwSize))
{
- ZRESULT res;
- HZIP hzFile = OpenZip(rescueData.Ptr (), dwSize, ZIP_MEMORY);
- if (hzFile)
+ zip_error_t zerr;
+ zip_source_t* zsrc = zip_source_buffer_create (rescueData.Ptr (), dwSize, 0, &zerr);
+ if (!zsrc)
+ return false;
+ zip_t* zFile = zip_open_from_source (zsrc, ZIP_CHECKCONS | ZIP_RDONLY, &zerr);
+ if (!zFile)
{
- finally_do_arg (HZIP, hzFile, { CloseZip (finally_arg); });
- HZIP hzMem = OpenZip(RescueZipData, RescueZipSize, ZIP_MEMORY);
- if (hzMem)
- {
- finally_do_arg (HZIP, hzMem, { CloseZip (finally_arg); });
- const wchar_t* efiFiles[] = {
- L"EFI/Boot/bootx64.efi",
- L"EFI/VeraCrypt/DcsBml.dcs",
- L"EFI/VeraCrypt/DcsBoot.efi",
- L"EFI/VeraCrypt/DcsCfg.dcs",
- L"EFI/VeraCrypt/DcsInt.dcs",
- L"EFI/VeraCrypt/LegacySpeaker.dcs",
- L"EFI/VeraCrypt/svh_bak",
- L"EFI/Boot/original_bootx64.vc_backup"
- };
-
- int index, i;
- ZIPENTRYW zeFile, zeMem;
- for (i = 0; i < ARRAYSIZE(efiFiles); i++)
+ zip_source_free (zsrc);
+ throw ParameterIncorrect (SRC_POS);
+ }
+
+ finally_do_arg (zip_t*, zFile, { zip_close (finally_arg); });
+
+ zsrc = zip_source_buffer_create (RescueZipData, RescueZipSize, 0, &zerr);
+ if (!zsrc)
+ return false;
+ zip_t* zMem = zip_open_from_source (zsrc, ZIP_CHECKCONS | ZIP_RDONLY, &zerr);
+ if (!zMem)
+ {
+ zip_source_free (zsrc);
+ throw ParameterIncorrect (SRC_POS);
+ }
+
+ finally_do_arg (zip_t*, zMem, { zip_close (finally_arg); });
+
+ const wchar_t* efi64Files[] = {
+ L"EFI/Boot/bootx64.efi",
+ L"EFI/VeraCrypt/DcsBml.dcs",
+ L"EFI/VeraCrypt/DcsBoot.efi",
+ L"EFI/VeraCrypt/DcsCfg.dcs",
+ L"EFI/VeraCrypt/DcsInt.dcs",
+ L"EFI/VeraCrypt/LegacySpeaker.dcs",
+ L"EFI/VeraCrypt/svh_bak",
+ L"EFI/Boot/original_bootx64.vc_backup"
+ };
+
+ const wchar_t* efi32Files[] = {
+ L"EFI/Boot/bootia32.efi",
+ L"EFI/VeraCrypt/DcsBml.dcs",
+ L"EFI/VeraCrypt/DcsBoot.efi",
+ L"EFI/VeraCrypt/DcsCfg.dcs",
+ L"EFI/VeraCrypt/DcsInt.dcs",
+ L"EFI/VeraCrypt/LegacySpeaker.dcs",
+ L"EFI/VeraCrypt/svh_bak",
+ L"EFI/Boot/original_bootia32.vc_backup"
+ };
+
+ int i;
+ zip_stat_t statMem, statFile;
+ zip_int64_t indexMem, indexFile;
+ const wchar_t** efiFiles = Is64BitOs()? efi64Files: efi32Files;
+ int efiFilesSize = Is64BitOs()? ARRAYSIZE(efi64Files): ARRAYSIZE(efi32Files);
+ for (i = 0; i < efiFilesSize; i++)
+ {
+ bool bMatch = false;
+ indexMem = zip_name_locate (zMem, WideToUtf8String (efiFiles[i]).c_str(), ZIP_FL_NOCASE);
+ if (indexMem >= 0)
+ {
+ if ((0 == zip_stat_index (zMem, indexMem, ZIP_FL_NOCASE, &statMem)) && (statMem.valid & ZIP_STAT_SIZE))
{
- bool bMatch = false;
- res = FindZipItemW (hzMem, efiFiles[i], true, &index, &zeMem);
- if ((res == ZR_OK) && (index >= 0))
+ indexFile = zip_name_locate (zFile, WideToUtf8String (efiFiles[i]).c_str(), ZIP_FL_NOCASE);
+ if (indexFile >= 0)
{
- res = FindZipItemW (hzFile, efiFiles[i], true, &index, &zeFile);
- if ((res == ZR_OK) && (index >= 0) && (zeMem.unc_size == zeFile.unc_size))
+ if ((0 == zip_stat_index (zFile, indexFile, ZIP_FL_NOCASE, &statFile)) && (statFile.valid & ZIP_STAT_SIZE))
{
- Buffer fileBuf (zeFile.unc_size);
- Buffer memBuf (zeFile.unc_size);
-
- res = UnzipItem (hzMem, zeMem.index, memBuf.Ptr (), zeMem.unc_size, ZIP_MEMORY);
- if (res == ZR_OK)
+ if (statMem.size == statFile.size)
{
- res = UnzipItem (hzFile, zeFile.index, fileBuf.Ptr (), zeFile.unc_size, ZIP_MEMORY);
- if (res == ZR_OK)
+ Buffer fileBuf ((size_t) statFile.size);
+ Buffer memBuf ((size_t) statMem.size);
+
+ zip_file_t* zfMem = zip_fopen_index (zMem, indexMem, 0);
+ if (zfMem)
{
- bMatch = (memcmp (memBuf.Ptr (), fileBuf.Ptr (), zeMem.unc_size) == 0);
+ if (0 < zip_fread (zfMem, memBuf.Ptr (), statMem.size))
+ {
+ zip_file_t* zfFile = zip_fopen_index (zFile, indexFile, 0);
+ if (zfFile)
+ {
+ if (0 < zip_fread (zfFile, fileBuf.Ptr (), statFile.size))
+ {
+ bMatch = (memcmp (memBuf.Ptr(), fileBuf.Ptr(), (size_t) statFile.size) == 0);
+ }
+ zip_fclose (zfFile);
+ }
+ }
+ zip_fclose (zfMem);
}
}
}
-
- }
- else
- {
- // entry not found in our internal Rescue ZIP image. Skip it.
- bMatch = true;
}
-
- if (!bMatch)
- break;
- }
-
- if (i == ARRAYSIZE(efiFiles))
- {
- // All entries processed
- return true;
}
+ }
+ else
+ {
+ // entry not found in our internal Rescue ZIP image. Skip it.
+ bMatch = true;
+ }
+ if (!bMatch)
+ break;
+ }
- }
+ if (i == efiFilesSize)
+ {
+ // All entries processed
+ return true;
}
}
}
@@ -3319,11 +3436,11 @@ namespace VeraCrypt
EfiBootInst.MountBootPartition(0);
- EfiBootInst.GetFileSize(L"\\EFI\\Boot\\bootx64.efi", loaderSize);
+ EfiBootInst.GetFileSize(Is64BitOs()? L"\\EFI\\Boot\\bootx64.efi" : L"\\EFI\\Boot\\bootia32.efi", loaderSize);
std::vector<byte> bootLoaderBuf ((size_t) loaderSize);
- EfiBootInst.ReadFile(L"\\EFI\\Boot\\bootx64.efi", &bootLoaderBuf[0], (DWORD) loaderSize);
+ EfiBootInst.ReadFile(Is64BitOs()? L"\\EFI\\Boot\\bootx64.efi": L"\\EFI\\Boot\\bootia32.efi", &bootLoaderBuf[0], (DWORD) loaderSize);
// Prevent VeraCrypt EFI loader from being backed up
for (size_t i = 0; i < (size_t) loaderSize - (wcslen (VC_EFI_BOOTLOADER_NAME) * 2); ++i)
@@ -3336,8 +3453,16 @@ namespace VeraCrypt
}
}
- EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootx64.efi", GetSystemLoaderBackupPath().c_str());
- EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootx64.efi", L"\\EFI\\Boot\\original_bootx64.vc_backup");
+ if (Is64BitOs())
+ {
+ EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootx64.efi", GetSystemLoaderBackupPath().c_str());
+ EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootx64.efi", L"\\EFI\\Boot\\original_bootx64.vc_backup");
+ }
+ else
+ {
+ EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootia32.efi", GetSystemLoaderBackupPath().c_str());
+ EfiBootInst.CopyFile(L"\\EFI\\Boot\\bootia32.efi", L"\\EFI\\Boot\\original_bootia32.vc_backup");
+ }
}
else
{
@@ -3386,7 +3511,10 @@ namespace VeraCrypt
EfiBootInst.MountBootPartition(0);
EfiBootInst.DeleteStartExec();
- EfiBootInst.RenameFile(L"\\EFI\\Boot\\original_bootx64.vc_backup", L"\\EFI\\Boot\\bootx64.efi", TRUE);
+ if (Is64BitOs())
+ EfiBootInst.RenameFile(L"\\EFI\\Boot\\original_bootx64.vc_backup", L"\\EFI\\Boot\\bootx64.efi", TRUE);
+ else
+ EfiBootInst.RenameFile(L"\\EFI\\Boot\\original_bootia32.vc_backup", L"\\EFI\\Boot\\bootia32.efi", TRUE);
EfiBootInst.DelFile(L"\\DcsBoot.efi");
EfiBootInst.DelFile(L"\\DcsInt.efi");
@@ -3401,6 +3529,7 @@ namespace VeraCrypt
EfiBootInst.DelFile(L"\\EFI\\VeraCrypt\\DcsBml.dcs");
EfiBootInst.DelFile(L"\\EFI\\VeraCrypt\\DcsBoot");
EfiBootInst.DelFile(L"\\EFI\\VeraCrypt\\DcsProp");
+ EfiBootInst.DelDir (L"\\EFI\\VeraCrypt");
}
else
{
@@ -3864,9 +3993,6 @@ namespace VeraCrypt
SystemDriveConfiguration config = GetSystemDriveConfiguration ();
- if (config.SystemPartition.IsGPT && !Is64BitOs())
- throw ErrorException ("GPT_BOOT_DRIVE_UNSUPPORTED", SRC_POS);
-
if (SystemDriveIsDynamic())
throw ErrorException ("SYSENC_UNSUPPORTED_FOR_DYNAMIC_DISK", SRC_POS);
@@ -4486,8 +4612,8 @@ namespace VeraCrypt
}
}
- bool BootEncryption::RestartComputer (void)
+ bool BootEncryption::RestartComputer (BOOL bShutdown)
{
- return (::RestartComputer() != FALSE);
+ return (::RestartComputer(bShutdown) != FALSE);
}
}
diff --git a/src/Common/BootEncryption.h b/src/Common/BootEncryption.h
index c8c9e29..f7f2ec1 100644
--- a/src/Common/BootEncryption.h
+++ b/src/Common/BootEncryption.h
@@ -82,6 +82,19 @@ namespace VeraCrypt
~Buffer () { delete[] DataPtr; }
byte *Ptr () const { return DataPtr; }
size_t Size () const { return DataSize; }
+ void Resize (size_t newSize)
+ {
+ if (newSize > DataSize)
+ {
+ byte *tmp = new byte[newSize];
+ if (!tmp)
+ throw bad_alloc();
+ memcpy (tmp, DataPtr, DataSize);
+ delete [] DataPtr;
+ DataPtr = tmp;
+ }
+ DataSize = newSize;
+ }
protected:
byte *DataPtr;
@@ -183,17 +196,18 @@ namespace VeraCrypt
void DeleteStartExec(uint16 statrtOrderNum = 0xDC5B, wchar_t* type = NULL);
void SetStartExec(wstring description, wstring execPath, uint16 statrtOrderNum = 0xDC5B, wchar_t* type = NULL, uint32 attr = 1);
- void SaveFile(wchar_t* name, byte* data, DWORD size);
+ void SaveFile(const wchar_t* name, byte* data, DWORD size);
void GetFileSize(const wchar_t* name, unsigned __int64& size);
void ReadFile(const wchar_t* name, byte* data, DWORD size);
void CopyFile(const wchar_t* name, const wchar_t* targetName);
- BOOL RenameFile(wchar_t* name, wchar_t* nameNew, BOOL bForce);
- BOOL DelFile(wchar_t* name);
- BOOL MkDir(wchar_t* name, bool& bAlreadyExists);
- BOOL ReadConfig (wchar_t* name, EfiBootConf& conf);
- BOOL UpdateConfig (wchar_t* name, int pim, int hashAlgo, HWND hwndDlg);
- BOOL WriteConfig (wchar_t* name, bool preserveUserConfig, int pim, int hashAlgo, const char* passPromptMsg, HWND hwndDlg);
+ BOOL RenameFile(const wchar_t* name, wchar_t* nameNew, BOOL bForce);
+ BOOL DelFile(const wchar_t* name);
+ BOOL MkDir(const wchar_t* name, bool& bAlreadyExists);
+ BOOL ReadConfig (const wchar_t* name, EfiBootConf& conf);
+ BOOL UpdateConfig (const wchar_t* name, int pim, int hashAlgo, HWND hwndDlg);
+ BOOL WriteConfig (const wchar_t* name, bool preserveUserConfig, int pim, int hashAlgo, const char* passPromptMsg, HWND hwndDlg);
+ BOOL DelDir(const wchar_t* name);
PSTORAGE_DEVICE_NUMBER GetStorageDeviceNumber () { return &sdn;}
@@ -263,7 +277,7 @@ namespace VeraCrypt
void RegisterSystemFavoritesService (BOOL registerService, BOOL noFileHandling);
void UpdateSystemFavoritesService ();
void RenameDeprecatedSystemLoaderBackup ();
- bool RestartComputer (void);
+ bool RestartComputer (BOOL bShutdown = FALSE);
void InitialSecurityChecksForHiddenOS ();
void RestrictPagingFilesToSystemPartition ();
void SetDriverConfigurationFlag (uint32 flag, bool state);
diff --git a/src/Common/Common.rc b/src/Common/Common.rc
index c3dd808..7f0a497 100644
--- a/src/Common/Common.rc
+++ b/src/Common/Common.rc
@@ -1,622 +1,628 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_ABOUT_DLG DIALOGEX 31, 51, 292, 199
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "About VeraCrypt"
-CLASS "VeraCryptSplashDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_ABOUT_CREDITS,7,111,277,45,ES_MULTILINE | WS_VSCROLL | NOT WS_TABSTOP
- DEFPUSHBUTTON "OK",IDOK,230,178,52,14
- LTEXT "",IDC_HOMEPAGE,18,87,117,9,SS_NOTIFY
- LTEXT "",IDT_ABOUT_RELEASE,18,71,235,8
- CONTROL IDB_TEXTUAL_LOGO_BKG,IDC_ABOUT_BKG,"Static",SS_BITMAP,0,0,12,11,WS_EX_STATICEDGE
- LTEXT "",IDT_ABOUT_VERSION,18,61,161,8
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,167,291,1,WS_EX_STATICEDGE
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,169,291,1,WS_EX_STATICEDGE
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,107,291,1,WS_EX_STATICEDGE
- CONTROL "",IDC_ABOUT_LOGO_AREA,"Static",SS_GRAYRECT | NOT WS_VISIBLE,0,0,293,50,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
- CONTROL IDB_TEXTUAL_LOGO_96DPI,IDC_TEXTUAL_LOGO_IMG,"Static",SS_BITMAP,12,26,157,16
-END
-
-IDD_COMMANDHELP_DLG DIALOGEX 0, 0, 249, 289
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Command Line Help"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,93,267,59,14
- LTEXT "",IDC_COMMANDHELP_TEXT,20,7,208,256
-END
-
-IDD_RAWDEVICES_DLG DIALOGEX 0, 0, 305, 209
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Select a Partition or Device"
-FONT 8, "MS Shell Dlg", 400, 0, 0x0
-BEGIN
- CONTROL "",IDC_DEVICELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,291,178
- DEFPUSHBUTTON "OK",IDOK,192,190,50,14
- PUSHBUTTON "Cancel",IDCANCEL,248,190,50,14
-END
-
-IDD_MOUNT_OPTIONS DIALOGEX 0, 0, 277, 231
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Mount Options"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Mount volume as read-&only",IDC_MOUNT_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,11,194,10
- CONTROL "Mount volume as removable &medium",IDC_MOUNT_REMOVABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,25,195,10
- CONTROL "Use backup header embedded in &volume if available",IDC_USE_EMBEDDED_HEADER_BAK,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,39,257,11
- CONTROL "Mount partition &using system encryption without pre-boot authentication",IDC_MOUNT_SYSENC_PART_WITHOUT_PBA,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,53,259,11
- EDITTEXT IDC_VOLUME_LABEL,112,67,150,14,ES_AUTOHSCROLL
- CONTROL "&Protect hidden volume against damage caused by writing to outer volume",IDC_PROTECT_HIDDEN_VOL,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,97,252,10
- EDITTEXT IDC_PASSWORD_PROT_HIDVOL,112,115,151,14,ES_PASSWORD | ES_AUTOHSCROLL
- COMBOBOX IDC_PKCS5_PRF_ID,112,136,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
- EDITTEXT IDC_PIM,112,156,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,161,97,10
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,158,159,112,8,NOT WS_VISIBLE
- CONTROL "&Display password",IDC_SHOW_PASSWORD_MO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,174,90,10
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE_HIDVOL_PROT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,187,90,10
- PUSHBUTTON "&Keyfiles...",IDC_KEYFILES_HIDVOL_PROT,204,183,60,14
- DEFPUSHBUTTON "OK",IDOK,211,7,60,14
- PUSHBUTTON "Cancel",IDCANCEL,211,24,60,14
- LTEXT "What is hidden volume protection?",IDC_LINK_HIDVOL_PROTECTION_INFO,16,202,247,10,SS_NOTIFY
- RTEXT "P&assword to hidden volume:\n(if empty, cache is used)",IDT_HIDDEN_PROT_PASSWD,15,114,91,17,0,WS_EX_RIGHT
- GROUPBOX "Hidden Volume Protection",IDT_HIDDEN_VOL_PROTECTION,6,83,265,136
- RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,15,137,91,17
- RTEXT "Volume PIM:",IDT_PIM,15,159,91,17,NOT WS_VISIBLE
- LTEXT "Volume Label in Windows:",IDT_VOLUME_LABEL,12,70,95,8
-END
-
-IDD_KEYFILES DIALOGEX 0, 0, 363, 251
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Keyfiles"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_KEYLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,8,275,118
- PUSHBUTTON "Add &Files...",IDC_KEYADD,7,132,61,14
- PUSHBUTTON "Add &Path...",IDC_ADD_KEYFILE_PATH,79,132,61,14
- PUSHBUTTON "Add &Token Files...",IDC_TOKEN_FILES_ADD,151,132,65,14
- PUSHBUTTON "&Remove",IDC_KEYREMOVE,227,132,61,14
- PUSHBUTTON "Remove &All",IDC_KEYREMOVEALL,299,132,61,14
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,232,105,11
- PUSHBUTTON "&Generate Random Keyfile...",IDC_GENERATE_KEYFILE,237,230,123,14
- DEFPUSHBUTTON "OK",IDOK,290,8,70,14
- PUSHBUTTON "Cancel",IDCANCEL,290,25,70,14
- LTEXT "",IDT_KEYFILES_NOTE,10,161,346,41,0,WS_EX_TRANSPARENT
- LTEXT "WARNING: If you lose a keyfile or if any bit of its first 1024 kilobytes changes, it will be impossible to mount volumes that use the keyfile!",IDT_KEYFILE_WARNING,290,44,69,85,0,WS_EX_TRANSPARENT
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,154,361,1,WS_EX_STATICEDGE
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,209,361,1,WS_EX_STATICEDGE
- LTEXT "More information on keyfiles",IDC_LINK_KEYFILES_INFO,119,233,113,10,SS_NOTIFY
- CONTROL "Try first to mount with an empty password",IDC_KEYFILES_TRY_EMPTY_PASSWORD,
- "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,7,217,310,10
-END
-
-IDD_LANGUAGE DIALOGEX 0, 0, 209, 183
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Language"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LISTBOX IDC_LANGLIST,6,7,197,67,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_LANGPACK_CREDITS,6,108,197,28,ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
- CTEXT "Download language pack",IDC_GET_LANG_PACKS,2,146,205,10,SS_NOTIFY
- DEFPUSHBUTTON "OK",IDOK,97,165,50,14
- PUSHBUTTON "Cancel",IDCANCEL,153,165,50,14
- LTEXT "Translated by:",IDT_LANGPACK_AUTHORS,6,99,101,9,SS_NOTIFY,WS_EX_TRANSPARENT
- RTEXT "",IDC_LANGPACK_VERSION,79,86,118,11
- GROUPBOX "Active language pack",IDT_ACTIVE_LANG_PACK,0,77,209,65
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,158,208,1,WS_EX_STATICEDGE
-END
-
-IDD_BENCHMARK_DLG DIALOGEX 0, 0, 330, 247
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Algorithms Benchmark"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- COMBOBOX IDC_BENCHMARK_LIST,55,11,87,53,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- COMBOBOX IDC_BENCHMARK_BUFFER_SIZE,209,11,87,129,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_PIM,209,11,42,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Pre-Boot",IDC_BENCHMARK_PREBOOT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,258,14,71,10
- COMBOBOX IDC_BENCHMARK_SORT_METHOD,55,40,139,74,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- DEFPUSHBUTTON "Benchmark",IDC_PERFORM_BENCHMARK,265,60,58,14
- PUSHBUTTON "Close",IDCLOSE,265,79,58,14
- CONTROL "",IDC_RESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,60,249,160
- LTEXT "Hardware-accelerated AES:",IDC_HW_AES_LABEL_LINK,148,233,108,9,SS_NOTIFY,WS_EX_RIGHT
- CONTROL "",IDC_HW_AES,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,262,232,57,11,WS_EX_STATICEDGE
- LTEXT "Parallelization:",IDC_PARALLELIZATION_LABEL_LINK,4,233,67,9,SS_NOTIFY,WS_EX_RIGHT
- CONTROL "",IDC_PARALLELIZATION,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,77,232,57,11,WS_EX_STATICEDGE
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,32,328,1,WS_EX_STATICEDGE
- LTEXT "Buffer Size:",IDT_BUFFER_SIZE,154,14,53,8,0,WS_EX_RIGHT
- LTEXT "Sort Method:",IDT_SORT_METHOD,0,42,53,8,0,WS_EX_RIGHT
- LTEXT "Speed is affected by CPU load and storage device characteristics.\n\nThese tests take place in RAM.",IDT_BOX_BENCHMARK_INFO,266,107,57,100
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,228,328,1,WS_EX_STATICEDGE
- LTEXT "Benchmark: ",IDT_BENCHMARK,0,14,53,8,0,WS_EX_RIGHT
- RTEXT "Volume PIM:",IDT_PIM,154,14,53,8,NOT WS_VISIBLE
-END
-
-IDD_CIPHER_TEST_DLG DIALOGEX 0, 0, 326, 249
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Test Vectors"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_CIPHER,109,10,104,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_KEY,8,36,309,14,ES_AUTOHSCROLL
- COMBOBOX IDC_KEY_SIZE,67,55,42,68,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_SECONDARY_KEY,8,93,309,14,ES_AUTOHSCROLL
- EDITTEXT IDC_TEST_DATA_UNIT_NUMBER,8,118,84,14,ES_AUTOHSCROLL
- CONTROL "XTS mode",IDC_XTS_MODE_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,12,95,10
- EDITTEXT IDC_PLAINTEXT,8,151,159,14,ES_AUTOHSCROLL
- COMBOBOX IDC_PLAINTEXT_SIZE,258,151,36,30,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_CIPHERTEXT,8,185,159,14,ES_AUTOHSCROLL
- DEFPUSHBUTTON "&Encrypt",IDC_ENCRYPT,8,229,52,14
- PUSHBUTTON "&Decrypt",IDC_DECRYPT,65,229,52,14
- PUSHBUTTON "&Auto-Test All",IDC_AUTO,129,229,67,14,BS_MULTILINE
- PUSHBUTTON "&Reset",IDC_RESET,208,229,52,14
- PUSHBUTTON "Close",IDCLOSE,266,229,52,14
- GROUPBOX "Key (hexadecimal)",IDT_TEST_KEY,1,26,323,49
- GROUPBOX "Plaintext (hexadecimal)",IDT_TEST_PLAINTEXT,1,140,323,33
- GROUPBOX "Ciphertext (hexadecimal)",IDT_TEST_CIPHERTEXT,1,174,323,33
- RTEXT "",IDC_TESTS_MESSAGE,50,213,178,10
- CONTROL "",IDC_REDTICK,"VCREDTICK",0x0,234,214,10,8
- RTEXT "Key size:",IDT_KEY,8,57,56,8
- RTEXT "Plaintext size:",IDT_PLAINTEXT,174,153,79,8
- LTEXT "bits",IDT_KEY_UNIT,114,57,45,8
- RTEXT "Cipher:",IDT_CIPHER,38,13,68,8
- LTEXT "bits",IDT_PLAINTEXT_SIZE_UNIT,298,153,22,8
- GROUPBOX "XTS mode",IDT_XTS_MODE,1,75,323,65
- LTEXT "Secondary key (hexadecimal)",IDT_SECONDARY_KEY,8,84,187,8
- LTEXT "Data unit number (64-bit hexadecimal, data unit size is 512 bytes)",IDT_TEST_DATA_UNIT_NUMBER,8,109,308,8
- RTEXT "Block number:",IDT_TEST_BLOCK_NUMBER,134,122,119,8
- COMBOBOX IDC_TEST_BLOCK_NUMBER,258,119,36,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
-END
-
-IDD_TEXT_INFO_DIALOG_BOX_DLG DIALOGEX 0, 0, 372, 220
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,305,200,58,14
- PUSHBUTTON "&Print",IDC_PRINT,156,200,58,14
- CONTROL "",IDC_INFO_BOX_TEXT,"RichEdit20W",ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,5,6,361,188
-END
-
-IDD_KEYFILE_GENERATOR DIALOGEX 0, 0, 357, 362
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Keyfile Generator"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "Close",IDCLOSE,291,10,59,14
- COMBOBOX IDC_PRF_ID,97,49,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
- CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,51,141,10
- EDITTEXT IDC_NUMBER_KEYFILES,124,278,51,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
- EDITTEXT IDC_KEYFILES_SIZE,124,298,51,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
- CONTROL "Random size ( 64 <-> 1048576 )",IDC_KEYFILES_RANDOM_SIZE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,181,300,174,10
- EDITTEXT IDC_KEYFILES_BASE_NAME,124,318,141,14,ES_AUTOHSCROLL
- PUSHBUTTON "Generate and Save Keyfile...",IDC_GENERATE_AND_SAVE_KEYFILE,124,336,141,14
- LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the keyfile.",IDT_KEYFILE_GENERATOR_NOTE,11,5,271,33
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,40,356,1,WS_EX_STATICEDGE
- RTEXT "Mixing PRF:",IDT_PRF,7,51,85,10,SS_CENTERIMAGE
- GROUPBOX "Current Pool Content",IDT_POOL_CONTENTS,6,70,344,170
- CTEXT "",IDC_POOL_CONTENTS,16,83,323,148,0,WS_EX_TRANSPARENT
- RTEXT "Number of keyfiles:",IDT_NUMBER_KEYFILES,9,281,110,8
- RTEXT "Keyfiles base name:",IDT_KEYFILES_BASE_NAME,9,321,110,8
- RTEXT "Keyfiles size (in Bytes):",IDT_KEYFILES_SIZE,9,300,110,8
- CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,18,255,321,12
- GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,6,244,344,29
-END
-
-IDD_MULTI_CHOICE_DLG DIALOGEX 0, 0, 167, 322
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "",IDC_CHOICE10,7,292,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE9,7,268,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE8,7,244,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE7,7,220,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE6,7,196,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE5,7,172,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE4,7,148,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE3,7,124,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE2,7,100,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- PUSHBUTTON "",IDC_CHOICE1,7,76,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
- LTEXT "",IDC_MULTI_CHOICE_MSG,7,7,153,56,0,WS_EX_TRANSPARENT
- CONTROL "",IDC_MC_DLG_HR2,"Static",SS_ETCHEDHORZ,0,69,168,1,WS_EX_STATICEDGE
- CONTROL "",IDC_MC_DLG_HR1,"Static",SS_ETCHEDHORZ,0,1,168,1,WS_EX_STATICEDGE
-END
-
-IDD_AUXILIARY_DLG DIALOGEX 0, 0, 426, 296
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | WS_POPUP
-EXSTYLE WS_EX_TRANSPARENT
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_ASPECT_RATIO_CALIBRATION_BOX,3,2,282,282,WS_DISABLED
-END
-
-IDD_TOKEN_PASSWORD DIALOGEX 0, 0, 281, 47
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Security token password/PIN required"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- EDITTEXT IDC_TOKEN_PASSWORD,8,20,199,14,ES_PASSWORD | ES_AUTOHSCROLL
- DEFPUSHBUTTON "OK",IDOK,215,7,59,14
- PUSHBUTTON "Cancel",IDCANCEL,215,25,59,14
- LTEXT "",IDT_TOKEN_PASSWORD_INFO,9,8,196,8
-END
-
-IDD_TOKEN_KEYFILES DIALOGEX 0, 0, 337, 185
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Security Token Keyfiles"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_TOKEN_FILE_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,256,152
- PUSHBUTTON "&Export...",IDC_EXPORT,7,164,55,14
- PUSHBUTTON "&Delete",IDC_DELETE,66,164,55,14
- PUSHBUTTON "&Import Keyfile to Token...",IDC_IMPORT_KEYFILE,126,164,137,14
- DEFPUSHBUTTON "OK",IDOK,271,7,59,14
- PUSHBUTTON "Cancel",IDCANCEL,271,25,59,14
-END
-
-IDD_NEW_TOKEN_KEYFILE DIALOGEX 0, 0, 239, 82
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "New Security Token Keyfile Properties"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,128,61,50,14
- PUSHBUTTON "Cancel",IDCANCEL,183,61,50,14
- COMBOBOX IDC_SELECTED_TOKEN,77,13,140,43,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
- LTEXT "Security token:",IDT_SECURITY_TOKEN,11,15,62,8,0,WS_EX_RIGHT
- LTEXT "Keyfile name:",IDT_TOKEN_KEYFILE_NAME,12,34,61,8,0,WS_EX_RIGHT
- EDITTEXT IDC_TOKEN_KEYFILE_NAME,77,32,140,13,ES_AUTOHSCROLL
- GROUPBOX "",IDC_STATIC,5,2,228,51
-END
-
-IDD_RANDOM_POOL_ENRICHMENT DIALOGEX 0, 0, 308, 301
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Random Pool Enrichment"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "&Continue",IDC_CONTINUE,119,278,71,14
- COMBOBOX IDC_PRF_ID,79,49,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
- LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases security. When done, click 'Continue'.",IDT_RANDOM_POOL_ENRICHMENT_NOTE,11,6,282,25
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,37,307,1,WS_EX_STATICEDGE
- RTEXT "Mixing PRF:",IDT_PRF,6,51,67,10,SS_CENTERIMAGE
- GROUPBOX "Current Pool Content",IDT_POOL_CONTENTS,6,70,296,170
- CONTROL "",IDC_POOL_CONTENTS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,16,83,282,148,WS_EX_TRANSPARENT
- CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,51,111,10
- CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,16,255,275,12
- GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,7,244,294,29
-END
-
-IDD_STATIC_MODELESS_WAIT_DLG DIALOGEX 0, 0, 292, 42
-STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
-EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW
-CAPTION "VeraCrypt"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "Please wait. This process may take a long time...",IDT_STATIC_MODELESS_WAIT_DLG_INFO,9,8,274,9
-END
-
-IDD_STATIC_MODAL_WAIT_DLG DIALOGEX 0, 0, 292, 74
-STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
-CAPTION "VeraCrypt"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- CTEXT "Please wait...\nThis process may take a long time and VeraCrypt may seem unresponsive.",IDT_STATIC_MODAL_WAIT_DLG_INFO,9,11,274,33
- CONTROL "",IDC_WAIT_PROGRESS_BAR,"msctls_progress32",WS_BORDER,7,49,278,14
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_ABOUT_DLG, DIALOG
- BEGIN
- END
-
- IDD_COMMANDHELP_DLG, DIALOG
- BEGIN
- BOTTOMMARGIN, 281
- END
-
- IDD_RAWDEVICES_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 298
- TOPMARGIN, 7
- BOTTOMMARGIN, 205
- END
-
- IDD_MOUNT_OPTIONS, DIALOG
- BEGIN
- LEFTMARGIN, 7
- TOPMARGIN, 7
- BOTTOMMARGIN, 225
- END
-
- IDD_KEYFILES, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 345
- TOPMARGIN, 7
- BOTTOMMARGIN, 244
- END
-
- IDD_LANGUAGE, DIALOG
- BEGIN
- LEFTMARGIN, 6
- RIGHTMARGIN, 202
- TOPMARGIN, 7
- BOTTOMMARGIN, 176
- END
-
- IDD_BENCHMARK_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 323
- TOPMARGIN, 7
- BOTTOMMARGIN, 240
- END
-
- IDD_CIPHER_TEST_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 319
- TOPMARGIN, 7
- BOTTOMMARGIN, 242
- END
-
- IDD_TEXT_INFO_DIALOG_BOX_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 365
- TOPMARGIN, 7
- BOTTOMMARGIN, 213
- END
-
- IDD_KEYFILE_GENERATOR, DIALOG
- BEGIN
- LEFTMARGIN, 7
- TOPMARGIN, 7
- BOTTOMMARGIN, 358
- END
-
- IDD_MULTI_CHOICE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 160
- TOPMARGIN, 7
- BOTTOMMARGIN, 316
- END
-
- IDD_AUXILIARY_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 419
- TOPMARGIN, 7
- BOTTOMMARGIN, 289
- END
-
- IDD_TOKEN_PASSWORD, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 274
- TOPMARGIN, 7
- BOTTOMMARGIN, 40
- END
-
- IDD_TOKEN_KEYFILES, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 330
- TOPMARGIN, 7
- BOTTOMMARGIN, 178
- END
-
- IDD_NEW_TOKEN_KEYFILE, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 232
- TOPMARGIN, 7
- BOTTOMMARGIN, 75
- END
-
- IDD_RANDOM_POOL_ENRICHMENT, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 301
- TOPMARGIN, 7
- BOTTOMMARGIN, 298
- END
-
- IDD_STATIC_MODELESS_WAIT_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 285
- TOPMARGIN, 7
- BOTTOMMARGIN, 35
- END
-
- IDD_STATIC_MODAL_WAIT_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 285
- TOPMARGIN, 7
- BOTTOMMARGIN, 67
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// BIN
-//
-
-IDR_BOOT_SECTOR BIN "..\\Boot\\Windows\\Release\\BootSector.bin"
-IDR_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Release_AES\\BootSector.bin"
-IDR_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootSector.bin"
-IDR_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootSector.bin"
-IDR_BOOT_SECTOR_CAMELLIA BIN "..\\Boot\\Windows\\Release_Camellia\\BootSector.bin"
-IDR_BOOT_LOADER_DECOMPRESSOR BIN "..\\Boot\\Windows\\Release\\Decompressor.com"
-IDR_BOOT_LOADER BIN "..\\Boot\\Windows\\Release\\BootLoader.com.gz"
-IDR_BOOT_LOADER_AES BIN "..\\Boot\\Windows\\Release_AES\\BootLoader.com.gz"
-IDR_BOOT_LOADER_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootLoader.com.gz"
-IDR_BOOT_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootLoader.com.gz"
-IDR_BOOT_LOADER_CAMELLIA BIN "..\\Boot\\Windows\\Release_Camellia\\BootLoader.com.gz"
-
-IDR_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootSector.bin"
-IDR_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootSector.bin"
-IDR_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootSector.bin"
-IDR_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootSector.bin"
-IDR_BOOT_SECTOR_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Release_Camellia_SHA2\\BootSector.bin"
-IDR_BOOT_LOADER_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootLoader.com.gz"
-IDR_BOOT_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootLoader.com.gz"
-IDR_BOOT_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootLoader.com.gz"
-IDR_BOOT_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootLoader.com.gz"
-IDR_BOOT_LOADER_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Release_Camellia_SHA2\\BootLoader.com.gz"
-
-
-IDR_RESCUE_BOOT_SECTOR BIN "..\\Boot\\Windows\\Rescue\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_CAMELLIA BIN "..\\Boot\\Windows\\Rescue_Camellia\\BootSector.bin"
-IDR_RESCUE_LOADER BIN "..\\Boot\\Windows\\Rescue\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_CAMELLIA BIN "..\\Boot\\Windows\\Rescue_Camellia\\BootLoader.com.gz"
-
-IDR_RESCUE_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootSector.bin"
-IDR_RESCUE_BOOT_SECTOR_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Rescue_Camellia_SHA2\\BootSector.bin"
-IDR_RESCUE_LOADER_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootLoader.com.gz"
-IDR_RESCUE_LOADER_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Rescue_Camellia_SHA2\\BootLoader.com.gz"
-IDR_EFI_DCSBOOT BIN "..\\Boot\\EFI\\DcsBoot.efi"
-IDR_EFI_DCSINT BIN "..\\Boot\\EFI\\DcsInt.efi"
-IDR_EFI_DCSCFG BIN "..\\Boot\\EFI\\DcsCfg.efi"
-IDR_EFI_LEGACYSPEAKER BIN "..\\Boot\\EFI\\LegacySpeaker.efi"
-IDR_EFI_DCSBML BIN "..\\Boot\\EFI\\DcsBml.efi"
-IDR_EFI_DCSRE BIN "..\\Boot\\EFI\\DcsRe.efi"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// XML
-//
-
-IDR_LANGUAGE XML "..\\Common\\Language.xml"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HEADER
-//
-
-IDR_COMMON_RSRC_HEADER HEADER "..\\Common\\Resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXT
-//
-
-IDR_LICENSE TEXT "..\\Resources\\Texts\\License.rtf"
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_TRUECRYPT_ICON ICON "..\\Common\\VeraCrypt.ico"
-IDI_TRUECRYPT_VOL_ICON ICON "..\\Common\\VeraCrypt_volume.ico"
-IDI_TRUECRYPT_MOUNTED_ICON ICON "..\\Common\\VeraCrypt_mounted.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_TEXTUAL_LOGO_BKG BITMAP "..\\Common\\Textual_logo_background.bmp"
-IDB_TEXTUAL_LOGO_96DPI BITMAP "..\\Common\\Textual_logo_96dpi.bmp"
-IDB_TEXTUAL_LOGO_288DPI BITMAP "..\\Common\\Textual_logo_288dpi.bmp"
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_ABOUT_DLG DIALOGEX 31, 51, 292, 199
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "About VeraCrypt"
+CLASS "VeraCryptSplashDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_ABOUT_CREDITS,7,111,277,45,ES_MULTILINE | WS_VSCROLL | NOT WS_TABSTOP
+ DEFPUSHBUTTON "OK",IDOK,230,178,52,14
+ LTEXT "",IDC_HOMEPAGE,18,87,117,9,SS_NOTIFY
+ LTEXT "",IDT_ABOUT_RELEASE,18,71,235,8
+ CONTROL IDB_TEXTUAL_LOGO_BKG,IDC_ABOUT_BKG,"Static",SS_BITMAP,0,0,12,11,WS_EX_STATICEDGE
+ LTEXT "",IDT_ABOUT_VERSION,18,61,161,8
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,167,291,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,169,291,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,107,291,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_ABOUT_LOGO_AREA,"Static",SS_GRAYRECT | NOT WS_VISIBLE,0,0,293,50,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
+ CONTROL IDB_TEXTUAL_LOGO_96DPI,IDC_TEXTUAL_LOGO_IMG,"Static",SS_BITMAP,12,26,157,16
+END
+
+IDD_COMMANDHELP_DLG DIALOGEX 0, 0, 249, 289
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Command Line Help"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,93,267,59,14
+ LTEXT "",IDC_COMMANDHELP_TEXT,20,7,208,256
+END
+
+IDD_RAWDEVICES_DLG DIALOGEX 0, 0, 305, 209
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Select a Partition or Device"
+FONT 8, "MS Shell Dlg", 400, 0, 0x0
+BEGIN
+ CONTROL "",IDC_DEVICELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,291,178
+ DEFPUSHBUTTON "OK",IDOK,192,190,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,248,190,50,14
+END
+
+IDD_MOUNT_OPTIONS DIALOGEX 0, 0, 277, 231
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Mount Options"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Mount volume as read-&only",IDC_MOUNT_READONLY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,11,194,10
+ CONTROL "Mount volume as removable &medium",IDC_MOUNT_REMOVABLE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,25,195,10
+ CONTROL "Use backup header embedded in &volume if available",IDC_USE_EMBEDDED_HEADER_BAK,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,39,257,11
+ CONTROL "Mount partition &using system encryption without pre-boot authentication",IDC_MOUNT_SYSENC_PART_WITHOUT_PBA,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,53,259,11
+ EDITTEXT IDC_VOLUME_LABEL,112,67,150,14,ES_AUTOHSCROLL
+ CONTROL "&Protect hidden volume against damage caused by writing to outer volume",IDC_PROTECT_HIDDEN_VOL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,97,252,10
+ EDITTEXT IDC_PASSWORD_PROT_HIDVOL,112,115,151,14,ES_PASSWORD | ES_AUTOHSCROLL
+ COMBOBOX IDC_PKCS5_PRF_ID,112,136,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ EDITTEXT IDC_PIM,112,156,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,161,97,10
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,158,159,112,8,NOT WS_VISIBLE
+ CONTROL "&Display password",IDC_SHOW_PASSWORD_MO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,174,90,10
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE_HIDVOL_PROT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,187,90,10
+ PUSHBUTTON "&Keyfiles...",IDC_KEYFILES_HIDVOL_PROT,204,183,60,14
+ DEFPUSHBUTTON "OK",IDOK,211,7,60,14
+ PUSHBUTTON "Cancel",IDCANCEL,211,24,60,14
+ LTEXT "What is hidden volume protection?",IDC_LINK_HIDVOL_PROTECTION_INFO,16,202,247,10,SS_NOTIFY
+ RTEXT "P&assword to hidden volume:\n(if empty, cache is used)",IDT_HIDDEN_PROT_PASSWD,15,114,91,17,0,WS_EX_RIGHT
+ GROUPBOX "Hidden Volume Protection",IDT_HIDDEN_VOL_PROTECTION,6,83,265,136
+ RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,15,137,91,17
+ RTEXT "Volume PIM:",IDT_PIM,15,159,91,17,NOT WS_VISIBLE
+ LTEXT "Volume Label in Windows:",IDT_VOLUME_LABEL,12,70,95,8
+END
+
+IDD_KEYFILES DIALOGEX 0, 0, 363, 251
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Keyfiles"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_KEYLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,8,275,118
+ PUSHBUTTON "Add &Files...",IDC_KEYADD,7,132,61,14
+ PUSHBUTTON "Add &Path...",IDC_ADD_KEYFILE_PATH,79,132,61,14
+ PUSHBUTTON "Add &Token Files...",IDC_TOKEN_FILES_ADD,151,132,65,14
+ PUSHBUTTON "&Remove",IDC_KEYREMOVE,227,132,61,14
+ PUSHBUTTON "Remove &All",IDC_KEYREMOVEALL,299,132,61,14
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,232,100,11
+ PUSHBUTTON "&Generate Random Keyfile...",IDC_GENERATE_KEYFILE,237,230,123,14
+ DEFPUSHBUTTON "OK",IDOK,290,8,70,14
+ PUSHBUTTON "Cancel",IDCANCEL,290,25,70,14
+ LTEXT "",IDT_KEYFILES_NOTE,10,161,346,41,0,WS_EX_TRANSPARENT
+ LTEXT "WARNING: If you lose a keyfile or if any bit of its first 1024 kilobytes changes, it will be impossible to mount volumes that use the keyfile!",IDT_KEYFILE_WARNING,290,44,69,85,0,WS_EX_TRANSPARENT
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,154,361,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,209,361,1,WS_EX_STATICEDGE
+ LTEXT "More information on keyfiles",IDC_LINK_KEYFILES_INFO,111,233,124,10,SS_NOTIFY
+ CONTROL "Try first to mount with an empty password",IDC_KEYFILES_TRY_EMPTY_PASSWORD,
+ "Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,7,217,310,10
+END
+
+IDD_LANGUAGE DIALOGEX 0, 0, 209, 183
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Language"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LISTBOX IDC_LANGLIST,6,7,197,67,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_LANGPACK_CREDITS,6,108,197,28,ES_MULTILINE | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
+ CTEXT "Download language pack",IDC_GET_LANG_PACKS,2,146,205,10,SS_NOTIFY
+ DEFPUSHBUTTON "OK",IDOK,97,165,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,153,165,50,14
+ LTEXT "Translated by:",IDT_LANGPACK_AUTHORS,6,99,101,9,SS_NOTIFY,WS_EX_TRANSPARENT
+ RTEXT "",IDC_LANGPACK_VERSION,79,86,118,11
+ GROUPBOX "Active language pack",IDT_ACTIVE_LANG_PACK,0,77,209,65
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,158,208,1,WS_EX_STATICEDGE
+END
+
+IDD_BENCHMARK_DLG DIALOGEX 0, 0, 330, 247
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Algorithms Benchmark"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ COMBOBOX IDC_BENCHMARK_LIST,55,11,87,53,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_BENCHMARK_BUFFER_SIZE,209,11,87,129,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_PIM,209,11,42,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Pre-Boot",IDC_BENCHMARK_PREBOOT,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,258,14,71,10
+ COMBOBOX IDC_BENCHMARK_SORT_METHOD,55,40,139,74,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ DEFPUSHBUTTON "Benchmark",IDC_PERFORM_BENCHMARK,265,60,58,14
+ PUSHBUTTON "Close",IDCLOSE,265,79,58,14
+ CONTROL "",IDC_RESULTS,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,60,249,160
+ LTEXT "Hardware-accelerated AES:",IDC_HW_AES_LABEL_LINK,148,233,108,9,SS_NOTIFY,WS_EX_RIGHT
+ CONTROL "",IDC_HW_AES,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,262,232,57,11,WS_EX_STATICEDGE
+ LTEXT "Parallelization:",IDC_PARALLELIZATION_LABEL_LINK,4,233,67,9,SS_NOTIFY,WS_EX_RIGHT
+ CONTROL "",IDC_PARALLELIZATION,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,77,232,57,11,WS_EX_STATICEDGE
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,32,328,1,WS_EX_STATICEDGE
+ LTEXT "Buffer Size:",IDT_BUFFER_SIZE,154,14,53,8,0,WS_EX_RIGHT
+ LTEXT "Sort Method:",IDT_SORT_METHOD,0,42,53,8,0,WS_EX_RIGHT
+ LTEXT "Speed is affected by CPU load and storage device characteristics.\n\nThese tests take place in RAM.",IDT_BOX_BENCHMARK_INFO,266,107,57,100
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,228,328,1,WS_EX_STATICEDGE
+ LTEXT "Benchmark: ",IDT_BENCHMARK,0,14,53,8,0,WS_EX_RIGHT
+ RTEXT "Volume PIM:",IDT_PIM,154,14,53,8,NOT WS_VISIBLE
+END
+
+IDD_CIPHER_TEST_DLG DIALOGEX 0, 0, 326, 249
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Test Vectors"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_CIPHER,109,10,104,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_KEY,8,36,309,14,ES_AUTOHSCROLL
+ COMBOBOX IDC_KEY_SIZE,67,55,42,68,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_SECONDARY_KEY,8,93,309,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_TEST_DATA_UNIT_NUMBER,8,118,84,14,ES_AUTOHSCROLL
+ CONTROL "XTS mode",IDC_XTS_MODE_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,221,12,95,10
+ EDITTEXT IDC_PLAINTEXT,8,151,159,14,ES_AUTOHSCROLL
+ COMBOBOX IDC_PLAINTEXT_SIZE,258,151,36,30,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
+ EDITTEXT IDC_CIPHERTEXT,8,185,159,14,ES_AUTOHSCROLL
+ DEFPUSHBUTTON "&Encrypt",IDC_ENCRYPT,8,229,52,14
+ PUSHBUTTON "&Decrypt",IDC_DECRYPT,65,229,52,14
+ PUSHBUTTON "&Auto-Test All",IDC_AUTO,129,229,67,14,BS_MULTILINE
+ PUSHBUTTON "&Reset",IDC_RESET,208,229,52,14
+ PUSHBUTTON "Close",IDCLOSE,266,229,52,14
+ GROUPBOX "Key (hexadecimal)",IDT_TEST_KEY,1,26,323,49
+ GROUPBOX "Plaintext (hexadecimal)",IDT_TEST_PLAINTEXT,1,140,323,33
+ GROUPBOX "Ciphertext (hexadecimal)",IDT_TEST_CIPHERTEXT,1,174,323,33
+ RTEXT "",IDC_TESTS_MESSAGE,50,213,178,10
+ CONTROL "",IDC_REDTICK,"VCREDTICK",0x0,234,214,10,8
+ RTEXT "Key size:",IDT_KEY,8,57,56,8
+ RTEXT "Plaintext size:",IDT_PLAINTEXT,174,153,79,8
+ LTEXT "bits",IDT_KEY_UNIT,114,57,45,8
+ RTEXT "Cipher:",IDT_CIPHER,38,13,68,8
+ LTEXT "bits",IDT_PLAINTEXT_SIZE_UNIT,298,153,22,8
+ GROUPBOX "XTS mode",IDT_XTS_MODE,1,75,323,65
+ LTEXT "Secondary key (hexadecimal)",IDT_SECONDARY_KEY,8,84,187,8
+ LTEXT "Data unit number (64-bit hexadecimal, data unit size is 512 bytes)",IDT_TEST_DATA_UNIT_NUMBER,8,109,308,8
+ RTEXT "Block number:",IDT_TEST_BLOCK_NUMBER,134,122,119,8
+ COMBOBOX IDC_TEST_BLOCK_NUMBER,258,119,36,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+END
+
+IDD_TEXT_INFO_DIALOG_BOX_DLG DIALOGEX 0, 0, 372, 220
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,305,200,58,14
+ PUSHBUTTON "&Print",IDC_PRINT,156,200,58,14
+ CONTROL "",IDC_INFO_BOX_TEXT,"RichEdit20W",ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,5,6,361,188
+END
+
+IDD_KEYFILE_GENERATOR DIALOGEX 0, 0, 357, 362
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Keyfile Generator"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "Close",IDCLOSE,291,10,59,14
+ COMBOBOX IDC_PRF_ID,97,49,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,209,51,141,10
+ EDITTEXT IDC_NUMBER_KEYFILES,124,278,51,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
+ EDITTEXT IDC_KEYFILES_SIZE,124,298,51,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
+ CONTROL "Random size ( 64 <-> 1048576 )",IDC_KEYFILES_RANDOM_SIZE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,181,300,174,10
+ EDITTEXT IDC_KEYFILES_BASE_NAME,124,318,141,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Generate and Save Keyfile...",IDC_GENERATE_AND_SAVE_KEYFILE,124,336,141,14
+ LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the keyfile.",IDT_KEYFILE_GENERATOR_NOTE,11,5,271,33
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,40,356,1,WS_EX_STATICEDGE
+ RTEXT "Mixing PRF:",IDT_PRF,7,51,85,10,SS_CENTERIMAGE
+ GROUPBOX "Current Pool Content",IDT_POOL_CONTENTS,6,70,344,170
+ CTEXT "",IDC_POOL_CONTENTS,16,83,323,148,0,WS_EX_TRANSPARENT
+ RTEXT "Number of keyfiles:",IDT_NUMBER_KEYFILES,9,281,110,8
+ RTEXT "Keyfiles base name:",IDT_KEYFILES_BASE_NAME,9,321,110,8
+ RTEXT "Keyfiles size (in Bytes):",IDT_KEYFILES_SIZE,9,300,110,8
+ CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,18,255,321,12
+ GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,6,244,344,29
+END
+
+IDD_MULTI_CHOICE_DLG DIALOGEX 0, 0, 167, 322
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "",IDC_CHOICE10,7,292,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE9,7,268,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE8,7,244,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE7,7,220,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE6,7,196,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE5,7,172,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE4,7,148,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE3,7,124,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE2,7,100,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ PUSHBUTTON "",IDC_CHOICE1,7,76,153,24,BS_CENTER | BS_MULTILINE,WS_EX_STATICEDGE
+ LTEXT "",IDC_MULTI_CHOICE_MSG,7,7,153,56,0,WS_EX_TRANSPARENT
+ CONTROL "",IDC_MC_DLG_HR2,"Static",SS_ETCHEDHORZ,0,69,168,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_MC_DLG_HR1,"Static",SS_ETCHEDHORZ,0,1,168,1,WS_EX_STATICEDGE
+END
+
+IDD_AUXILIARY_DLG DIALOGEX 0, 0, 426, 296
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | WS_POPUP
+EXSTYLE WS_EX_TRANSPARENT
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_ASPECT_RATIO_CALIBRATION_BOX,3,2,282,282,WS_DISABLED
+END
+
+IDD_TOKEN_PASSWORD DIALOGEX 0, 0, 281, 47
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Security token password/PIN required"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ EDITTEXT IDC_TOKEN_PASSWORD,8,20,199,14,ES_PASSWORD | ES_AUTOHSCROLL
+ DEFPUSHBUTTON "OK",IDOK,215,7,59,14
+ PUSHBUTTON "Cancel",IDCANCEL,215,25,59,14
+ LTEXT "",IDT_TOKEN_PASSWORD_INFO,9,8,196,8
+END
+
+IDD_TOKEN_KEYFILES DIALOGEX 0, 0, 337, 185
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Security Token Keyfiles"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_TOKEN_FILE_LIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_EDITLABELS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,256,152
+ PUSHBUTTON "&Export...",IDC_EXPORT,7,164,55,14
+ PUSHBUTTON "&Delete",IDC_DELETE,66,164,55,14
+ PUSHBUTTON "&Import Keyfile to Token...",IDC_IMPORT_KEYFILE,126,164,137,14
+ DEFPUSHBUTTON "OK",IDOK,271,7,59,14
+ PUSHBUTTON "Cancel",IDCANCEL,271,25,59,14
+END
+
+IDD_NEW_TOKEN_KEYFILE DIALOGEX 0, 0, 239, 82
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "New Security Token Keyfile Properties"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,128,61,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,183,61,50,14
+ COMBOBOX IDC_SELECTED_TOKEN,77,13,140,43,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Security token:",IDT_SECURITY_TOKEN,11,15,62,8,0,WS_EX_RIGHT
+ LTEXT "Keyfile name:",IDT_TOKEN_KEYFILE_NAME,12,34,61,8,0,WS_EX_RIGHT
+ EDITTEXT IDC_TOKEN_KEYFILE_NAME,77,32,140,13,ES_AUTOHSCROLL
+ GROUPBOX "",IDC_STATIC,5,2,228,51
+END
+
+IDD_RANDOM_POOL_ENRICHMENT DIALOGEX 0, 0, 308, 301
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Random Pool Enrichment"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "&Continue",IDC_CONTINUE,119,278,71,14
+ COMBOBOX IDC_PRF_ID,79,49,91,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases security. When done, click 'Continue'.",IDT_RANDOM_POOL_ENRICHMENT_NOTE,11,6,282,25
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,37,307,1,WS_EX_STATICEDGE
+ RTEXT "Mixing PRF:",IDT_PRF,6,51,67,10,SS_CENTERIMAGE
+ GROUPBOX "Current Pool Content",IDT_POOL_CONTENTS,6,70,296,170
+ CONTROL "",IDC_POOL_CONTENTS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,16,83,282,148,WS_EX_TRANSPARENT
+ CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,191,51,111,10
+ CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,16,255,275,12
+ GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,7,244,294,29
+END
+
+IDD_STATIC_MODELESS_WAIT_DLG DIALOGEX 0, 0, 292, 42
+STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
+EXSTYLE WS_EX_TOPMOST | WS_EX_TOOLWINDOW
+CAPTION "VeraCrypt"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ LTEXT "Please wait. This process may take a long time...",IDT_STATIC_MODELESS_WAIT_DLG_INFO,9,8,274,9
+END
+
+IDD_STATIC_MODAL_WAIT_DLG DIALOGEX 0, 0, 292, 74
+STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION
+CAPTION "VeraCrypt"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ CTEXT "Please wait...\nThis process may take a long time and VeraCrypt may seem unresponsive.",IDT_STATIC_MODAL_WAIT_DLG_INFO,9,11,274,33
+ CONTROL "",IDC_WAIT_PROGRESS_BAR,"msctls_progress32",WS_BORDER,7,49,278,14
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_ABOUT_DLG, DIALOG
+ BEGIN
+ END
+
+ IDD_COMMANDHELP_DLG, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 281
+ END
+
+ IDD_RAWDEVICES_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 298
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 205
+ END
+
+ IDD_MOUNT_OPTIONS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 225
+ END
+
+ IDD_KEYFILES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 345
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 244
+ END
+
+ IDD_LANGUAGE, DIALOG
+ BEGIN
+ LEFTMARGIN, 6
+ RIGHTMARGIN, 202
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 176
+ END
+
+ IDD_BENCHMARK_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 323
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 240
+ END
+
+ IDD_CIPHER_TEST_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 319
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 242
+ END
+
+ IDD_TEXT_INFO_DIALOG_BOX_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 365
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 213
+ END
+
+ IDD_KEYFILE_GENERATOR, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 358
+ END
+
+ IDD_MULTI_CHOICE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 160
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 316
+ END
+
+ IDD_AUXILIARY_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 419
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 289
+ END
+
+ IDD_TOKEN_PASSWORD, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 274
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 40
+ END
+
+ IDD_TOKEN_KEYFILES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 330
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 178
+ END
+
+ IDD_NEW_TOKEN_KEYFILE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 232
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 75
+ END
+
+ IDD_RANDOM_POOL_ENRICHMENT, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 301
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 298
+ END
+
+ IDD_STATIC_MODELESS_WAIT_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 285
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 35
+ END
+
+ IDD_STATIC_MODAL_WAIT_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 285
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 67
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// BIN
+//
+
+IDR_BOOT_SECTOR BIN "..\\Boot\\Windows\\Release\\BootSector.bin"
+IDR_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Release_AES\\BootSector.bin"
+IDR_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootSector.bin"
+IDR_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootSector.bin"
+IDR_BOOT_SECTOR_CAMELLIA BIN "..\\Boot\\Windows\\Release_Camellia\\BootSector.bin"
+IDR_BOOT_LOADER_DECOMPRESSOR BIN "..\\Boot\\Windows\\Release\\Decompressor.com"
+IDR_BOOT_LOADER BIN "..\\Boot\\Windows\\Release\\BootLoader.com.gz"
+IDR_BOOT_LOADER_AES BIN "..\\Boot\\Windows\\Release_AES\\BootLoader.com.gz"
+IDR_BOOT_LOADER_SERPENT BIN "..\\Boot\\Windows\\Release_Serpent\\BootLoader.com.gz"
+IDR_BOOT_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Release_Twofish\\BootLoader.com.gz"
+IDR_BOOT_LOADER_CAMELLIA BIN "..\\Boot\\Windows\\Release_Camellia\\BootLoader.com.gz"
+
+IDR_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootSector.bin"
+IDR_BOOT_SECTOR_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Release_Camellia_SHA2\\BootSector.bin"
+IDR_BOOT_LOADER_SHA2 BIN "..\\Boot\\Windows\\Release_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Release_AES_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Release_Serpent_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Release_Twofish_SHA2\\BootLoader.com.gz"
+IDR_BOOT_LOADER_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Release_Camellia_SHA2\\BootLoader.com.gz"
+
+
+IDR_RESCUE_BOOT_SECTOR BIN "..\\Boot\\Windows\\Rescue\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_CAMELLIA BIN "..\\Boot\\Windows\\Rescue_Camellia\\BootSector.bin"
+IDR_RESCUE_LOADER BIN "..\\Boot\\Windows\\Rescue\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_AES BIN "..\\Boot\\Windows\\Rescue_AES\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_SERPENT BIN "..\\Boot\\Windows\\Rescue_Serpent\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_TWOFISH BIN "..\\Boot\\Windows\\Rescue_Twofish\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_CAMELLIA BIN "..\\Boot\\Windows\\Rescue_Camellia\\BootLoader.com.gz"
+
+IDR_RESCUE_BOOT_SECTOR_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootSector.bin"
+IDR_RESCUE_BOOT_SECTOR_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Rescue_Camellia_SHA2\\BootSector.bin"
+IDR_RESCUE_LOADER_SHA2 BIN "..\\Boot\\Windows\\Rescue_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_AES_SHA2 BIN "..\\Boot\\Windows\\Rescue_AES_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_SERPENT_SHA2 BIN "..\\Boot\\Windows\\Rescue_Serpent_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_TWOFISH_SHA2 BIN "..\\Boot\\Windows\\Rescue_Twofish_SHA2\\BootLoader.com.gz"
+IDR_RESCUE_LOADER_CAMELLIA_SHA2 BIN "..\\Boot\\Windows\\Rescue_Camellia_SHA2\\BootLoader.com.gz"
+IDR_EFI_DCSBOOT BIN "..\\Boot\\EFI\\DcsBoot.efi"
+IDR_EFI_DCSINT BIN "..\\Boot\\EFI\\DcsInt.efi"
+IDR_EFI_DCSCFG BIN "..\\Boot\\EFI\\DcsCfg.efi"
+IDR_EFI_LEGACYSPEAKER BIN "..\\Boot\\EFI\\LegacySpeaker.efi"
+IDR_EFI_DCSBML BIN "..\\Boot\\EFI\\DcsBml.efi"
+IDR_EFI_DCSRE BIN "..\\Boot\\EFI\\DcsRe.efi"
+IDR_EFI_DCSBOOT32 BIN "..\\Boot\\EFI\\DcsBoot32.efi"
+IDR_EFI_DCSINT32 BIN "..\\Boot\\EFI\\DcsInt32.efi"
+IDR_EFI_DCSCFG32 BIN "..\\Boot\\EFI\\DcsCfg32.efi"
+IDR_EFI_LEGACYSPEAKER32 BIN "..\\Boot\\EFI\\LegacySpeaker32.efi"
+IDR_EFI_DCSBML32 BIN "..\\Boot\\EFI\\DcsBml32.efi"
+IDR_EFI_DCSRE32 BIN "..\\Boot\\EFI\\DcsRe32.efi"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// XML
+//
+
+IDR_LANGUAGE XML "..\\Common\\Language.xml"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HEADER
+//
+
+IDR_COMMON_RSRC_HEADER HEADER "..\\Common\\Resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXT
+//
+
+IDR_LICENSE TEXT "..\\Resources\\Texts\\License.rtf"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_TRUECRYPT_ICON ICON "..\\Common\\VeraCrypt.ico"
+IDI_TRUECRYPT_VOL_ICON ICON "..\\Common\\VeraCrypt_volume.ico"
+IDI_TRUECRYPT_MOUNTED_ICON ICON "..\\Common\\VeraCrypt_mounted.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_TEXTUAL_LOGO_BKG BITMAP "..\\Common\\Textual_logo_background.bmp"
+IDB_TEXTUAL_LOGO_96DPI BITMAP "..\\Common\\Textual_logo_96dpi.bmp"
+IDB_TEXTUAL_LOGO_288DPI BITMAP "..\\Common\\Textual_logo_288dpi.bmp"
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Common/Crypto.c b/src/Common/Crypto.c
index 3c52ef7..f0b3759 100644
--- a/src/Common/Crypto.c
+++ b/src/Common/Crypto.c
@@ -79,7 +79,7 @@ static EncryptionAlgorithm EncryptionAlgorithms[] =
{ { TWOFISH, 0 }, { XTS, 0 }, 1, 1 },
{ { CAMELLIA, 0 }, { XTS, 0 }, 1, 1 },
#if defined(CIPHER_GOST89)
- { { GOST89, 0 }, { XTS, 0 }, 0, 1 },
+ { { GOST89, 0 }, { XTS, 0 }, 0, 0 },
#endif // defined(CIPHER_GOST89)
{ { KUZNYECHIK, 0 }, { XTS, 0 }, 0, 1 },
{ { TWOFISH, AES, 0 }, { XTS, 0 }, 1, 1 },
@@ -158,7 +158,7 @@ int CipherInit (int cipher, unsigned char *key, unsigned __int8 *ks)
#if !defined(TC_WINDOWS_BOOT)
#if defined(CIPHER_GOST89)
case GOST89:
- gost_set_key(key, (gost_kds*)ks);
+ gost_set_key(key, (gost_kds*)ks, 1);
break;
#endif // && defined(CIPHER_GOST89)
case KUZNYECHIK:
@@ -232,6 +232,21 @@ void EncipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount)
KeRestoreFloatingPointState (&floatingPointState);
#endif
}
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
+ else if (cipher == SERPENT
+ && (blockCount >= 4)
+ && HasSSE2()
+#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
+ && NT_SUCCESS (KeSaveFloatingPointState (&floatingPointState))
+#endif
+ )
+ {
+ serpent_encrypt_blocks (data, data, blockCount, ks);
+#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
+ KeRestoreFloatingPointState (&floatingPointState);
+#endif
+ }
+#endif
else if (cipher == GOST89) {
gost_encrypt(data, data, ks, (int)blockCount);
}
@@ -312,6 +327,21 @@ void DecipherBlocks (int cipher, void *dataPtr, void *ks, size_t blockCount)
KeRestoreFloatingPointState (&floatingPointState);
#endif
}
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
+ else if (cipher == SERPENT
+ && (blockCount >= 4)
+ && HasSSE2()
+#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
+ && NT_SUCCESS (KeSaveFloatingPointState (&floatingPointState))
+#endif
+ )
+ {
+ serpent_decrypt_blocks (data, data, blockCount, ks);
+#if defined (TC_WINDOWS_DRIVER) && !defined (_WIN64)
+ KeRestoreFloatingPointState (&floatingPointState);
+#endif
+ }
+#endif
else if (cipher == GOST89) {
gost_decrypt(data, data, ks, (int)blockCount);
}
@@ -383,8 +413,12 @@ int CipherGetKeyScheduleSize (int cipherId)
BOOL CipherSupportsIntraDataUnitParallelization (int cipher)
{
- return cipher == AES && IsAesHwCpuSupported() ||
- cipher == GOST89;
+ return (cipher == AES && IsAesHwCpuSupported())
+ || (cipher == GOST89)
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE && !defined (_UEFI)
+ || (cipher == SERPENT && HasSSE2())
+#endif
+ ;
}
#endif
diff --git a/src/Common/Crypto.h b/src/Common/Crypto.h
index 6a943ed..8e8bace 100644
--- a/src/Common/Crypto.h
+++ b/src/Common/Crypto.h
@@ -193,7 +193,11 @@ typedef struct
#endif
#include "Aes_hw_cpu.h"
-#include "Serpent.h"
+#if !defined (TC_WINDOWS_BOOT) && !defined (_UEFI)
+# include "SerpentFast.h"
+#else
+# include "Serpent.h"
+#endif
#include "Twofish.h"
#include "Rmd160.h"
diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c
index c2e1539..04fec47 100644
--- a/src/Common/Dlgcode.c
+++ b/src/Common/Dlgcode.c
@@ -1214,10 +1214,11 @@ BOOL CALLBACK AboutDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam
L"Copyright \xA9 2003-2012 TrueCrypt Developers Association. All Rights Reserved.\r\n"
L"Copyright \xA9 1998-2000 Paul Le Roux. All Rights Reserved.\r\n"
L"Copyright \xA9 1998-2008 Brian Gladman. All Rights Reserved.\r\n"
- L"Copyright \xA9 2002-2004 Mark Adler. All Rights Reserved.\r\n"
+ L"Copyright \xA9 1995-2013 Jean-loup Gailly and Mark Adler.\r\n"
L"Copyright \xA9 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov.\r\n"
- L"Copyright \xA9 1990-2002 Info-ZIP. All rights reserved.\r\n"
- L"Copyright \xA9 2013, Alexey Degtyarev. All rights reserved.\r\n\r\n"
+ L"Copyright \xA9 Dieter Baron and Thomas Klausner.\r\n"
+ L"Copyright \xA9 2013, Alexey Degtyarev. All rights reserved.\r\n"
+ L"Copyright \xA9 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.\r\n\r\n"
L"This software as a whole:\r\n"
L"Copyright \xA9 2013-2016 IDRIX. All rights reserved.\r\n\r\n"
@@ -10017,7 +10018,7 @@ BOOL EnableWow64FsRedirection (BOOL enable)
}
-BOOL RestartComputer (void)
+BOOL RestartComputer (BOOL bShutdown)
{
TOKEN_PRIVILEGES tokenPrivil;
HANDLE hTkn;
@@ -10038,7 +10039,7 @@ BOOL RestartComputer (void)
return false;
}
- if (!ExitWindowsEx (EWX_REBOOT,
+ if (!ExitWindowsEx (bShutdown? EWX_POWEROFF: EWX_REBOOT,
SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED))
{
CloseHandle(hTkn);
@@ -12202,4 +12203,25 @@ BOOL RaisePrivileges(void)
SetLastError (dwLastError);
return bRet;
-} \ No newline at end of file
+}
+
+BOOL DeleteDirectory (const wchar_t* szDirName)
+{
+ BOOL bStatus = RemoveDirectory (szDirName);
+ if (!bStatus)
+ {
+ /* force removal of the non empty directory */
+ wchar_t szOpPath[TC_MAX_PATH + 1] = {0};
+ SHFILEOPSTRUCTW op;
+
+ StringCchCopyW(szOpPath, ARRAYSIZE(szOpPath)-1, szDirName);
+ ZeroMemory(&op, sizeof(op));
+ op.wFunc = FO_DELETE;
+ op.pFrom = szOpPath;
+ op.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
+
+ if ((0 == SHFileOperation(&op)) && (!op.fAnyOperationsAborted))
+ bStatus = TRUE;
+ }
+ return bStatus;
+}
diff --git a/src/Common/Dlgcode.h b/src/Common/Dlgcode.h
index 9ae9d5b..86afbe0 100644
--- a/src/Common/Dlgcode.h
+++ b/src/Common/Dlgcode.h
@@ -443,7 +443,7 @@ BOOL Is64BitOs ();
BOOL IsServerOS ();
BOOL IsHiddenOSRunning (void);
BOOL EnableWow64FsRedirection (BOOL enable);
-BOOL RestartComputer (void);
+BOOL RestartComputer (BOOL bShutdown);
void Applink (char *dest, BOOL bSendOS, char *extraOutput);
wchar_t *RelativePath2Absolute (wchar_t *szFileName);
void HandleDriveNotReadyError (HWND hwnd);
@@ -513,6 +513,7 @@ BOOL CopyTextToClipboard (const wchar_t* txtValue);
BOOL LaunchElevatedProcess (HWND hwndDlg, const wchar_t* szModPath, const wchar_t* args);
BOOL GetFreeDriveLetter(WCHAR* pCh);
BOOL RaisePrivileges(void);
+BOOL DeleteDirectory (const wchar_t* szDirName);
#ifdef __cplusplus
}
diff --git a/src/Common/Format.c b/src/Common/Format.c
index 4df27c1..ead6546 100644
--- a/src/Common/Format.c
+++ b/src/Common/Format.c
@@ -568,7 +568,7 @@ begin_format:
{
BOOL bUpdateBackup = FALSE;
- nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, dataAreaSize, FALSE, FALSE, FALSE);
+ nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, dataAreaSize, FALSE, FALSE);
if (nStatus != ERR_SUCCESS)
goto error;
diff --git a/src/Common/Keyfiles.c b/src/Common/Keyfiles.c
index 14d415f..96e1cd7 100644
--- a/src/Common/Keyfiles.c
+++ b/src/Common/Keyfiles.c
@@ -519,6 +519,11 @@ BOOL CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
LoadKeyList (hwndDlg, param->FirstKeyFile);
kf = (KeyFile *) malloc (sizeof (KeyFile));
+ if (!kf)
+ {
+ Warning ("ERR_MEM_ALLOC", hwndDlg);
+ break;
+ }
}
} while (SelectMultipleFilesNext (kf->FileName, sizeof(kf->FileName)));
@@ -528,7 +533,8 @@ BOOL CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
}
}
- free (kf);
+ if (kf)
+ free (kf);
}
return 1;
}
@@ -536,16 +542,22 @@ BOOL CALLBACK KeyFilesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa
if (lw == IDC_ADD_KEYFILE_PATH)
{
KeyFile *kf = (KeyFile *) malloc (sizeof (KeyFile));
-
- if (BrowseDirectories (hwndDlg,"SELECT_KEYFILE_PATH", kf->FileName))
- {
- param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
- LoadKeyList (hwndDlg, param->FirstKeyFile);
- }
- else
- {
- free (kf);
- }
+ if (kf)
+ {
+ if (BrowseDirectories (hwndDlg,"SELECT_KEYFILE_PATH", kf->FileName))
+ {
+ param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
+ LoadKeyList (hwndDlg, param->FirstKeyFile);
+ }
+ else
+ {
+ free (kf);
+ }
+ }
+ else
+ {
+ Warning ("ERR_MEM_ALLOC", hwndDlg);
+ }
return 1;
}
@@ -716,13 +728,19 @@ BOOL KeyfilesPopupMenu (HWND hwndDlg, POINT popupPosition, KeyFilesDlgParam *par
{
param->FirstKeyFile = KeyFileAdd (param->FirstKeyFile, kf);
kf = (KeyFile *) malloc (sizeof (KeyFile));
+ if (!kf)
+ {
+ Warning ("ERR_MEM_ALLOC", hwndDlg);
+ break;
+ }
} while (SelectMultipleFilesNext (kf->FileName, sizeof(kf->FileName)));
param->EnableKeyFiles = TRUE;
status = TRUE;
}
- free (kf);
+ if (kf)
+ free (kf);
}
}
break;
@@ -743,6 +761,10 @@ BOOL KeyfilesPopupMenu (HWND hwndDlg, POINT popupPosition, KeyFilesDlgParam *par
free (kf);
}
}
+ else
+ {
+ Warning ("ERR_MEM_ALLOC", hwndDlg);
+ }
}
break;
@@ -762,6 +784,11 @@ BOOL KeyfilesPopupMenu (HWND hwndDlg, POINT popupPosition, KeyFilesDlgParam *par
param->EnableKeyFiles = TRUE;
status = TRUE;
}
+ else
+ {
+ Warning ("ERR_MEM_ALLOC", hwndDlg);
+ break;
+ }
}
}
}
diff --git a/src/Common/Password.c b/src/Common/Password.c
index b0f4438..1c9083a 100644
--- a/src/Common/Password.c
+++ b/src/Common/Password.c
@@ -440,7 +440,7 @@ int ChangePwd (const wchar_t *lpszVolume, Password *oldPassword, int old_pkcs5,
PCRYPTO_INFO dummyInfo = NULL;
LARGE_INTEGER hiddenOffset;
- nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, cryptoInfo->VolumeSize.Value, !backupHeader, backupHeader, FALSE);
+ nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, cryptoInfo->VolumeSize.Value, !backupHeader, backupHeader);
if (nStatus != ERR_SUCCESS)
goto error;
diff --git a/src/Common/Pkcs5.c b/src/Common/Pkcs5.c
index 3dbfd32..753c49b 100644
--- a/src/Common/Pkcs5.c
+++ b/src/Common/Pkcs5.c
@@ -61,8 +61,6 @@ typedef struct hmac_sha256_ctx_struct
void hmac_sha256_internal
(
- char *k, /* secret key. It's ensured to be always <= 32 bytes */
- int lk, /* length of the key in bytes */
char *d, /* input data. d pointer is guaranteed to be at least 32-bytes long */
int ld, /* length of input data in bytes */
hmac_sha256_ctx* hmac /* HMAC-SHA256 context which holds temporary variables */
@@ -140,14 +138,14 @@ void hmac_sha256
sha256_hash ((unsigned char *) buf, SHA256_BLOCKSIZE, ctx);
- hmac_sha256_internal(k, lk, d, ld, &hmac);
+ hmac_sha256_internal(d, ld, &hmac);
/* Prevent leaks */
burn(&hmac, sizeof(hmac));
burn(key, sizeof(key));
}
#endif
-static void derive_u_sha256 (char *pwd, int pwd_len, char *salt, int salt_len, uint32 iterations, int b, hmac_sha256_ctx* hmac)
+static void derive_u_sha256 (char *salt, int salt_len, uint32 iterations, int b, hmac_sha256_ctx* hmac)
{
char* k = hmac->k;
char* u = hmac->u;
@@ -173,16 +171,22 @@ static void derive_u_sha256 (char *pwd, int pwd_len, char *salt, int salt_len, u
memcpy (k, salt, salt_len); /* salt */
/* big-endian block number */
+#ifdef TC_WINDOWS_BOOT
+ /* specific case of 16-bit bootloader: b is a 16-bit integer that is always < 256 */
memset (&k[salt_len], 0, 3);
k[salt_len + 3] = (char) b;
+#else
+ b = bswap_32 (b);
+ memcpy (&k[salt_len], &b, 4);
+#endif
- hmac_sha256_internal (pwd, pwd_len, k, salt_len + 4, hmac);
+ hmac_sha256_internal (k, salt_len + 4, hmac);
memcpy (u, k, SHA256_DIGESTSIZE);
/* remaining iterations */
while (c > 1)
{
- hmac_sha256_internal (pwd, pwd_len, k, SHA256_DIGESTSIZE, hmac);
+ hmac_sha256_internal (k, SHA256_DIGESTSIZE, hmac);
for (i = 0; i < SHA256_DIGESTSIZE; i++)
{
u[i] ^= k[i];
@@ -254,13 +258,13 @@ void derive_key_sha256 (char *pwd, int pwd_len, char *salt, int salt_len, uint32
/* first l - 1 blocks */
for (b = 1; b < l; b++)
{
- derive_u_sha256 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_sha256 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, SHA256_DIGESTSIZE);
dk += SHA256_DIGESTSIZE;
}
/* last block */
- derive_u_sha256 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_sha256 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, r);
@@ -280,14 +284,12 @@ typedef struct hmac_sha512_ctx_struct
sha512_ctx ctx;
sha512_ctx inner_digest_ctx; /*pre-computed inner digest context */
sha512_ctx outer_digest_ctx; /*pre-computed outer digest context */
- char k[PKCS5_SALT_SIZE + 4]; /* enough to hold (salt_len + 4) and also the SHA512 hash */
+ char k[SHA512_BLOCKSIZE]; /* enough to hold (salt_len + 4) and also the SHA512 hash */
char u[SHA512_DIGESTSIZE];
} hmac_sha512_ctx;
void hmac_sha512_internal
(
- char *k, /* secret key */
- int lk, /* length of the key in bytes */
char *d, /* data and also output buffer of at least 64 bytes */
int ld, /* length of data in bytes */
hmac_sha512_ctx* hmac
@@ -322,9 +324,7 @@ void hmac_sha512
{
hmac_sha512_ctx hmac;
sha512_ctx* ctx;
- char* buf = hmac.k; /* there is enough space to hold SHA512_BLOCKSIZE (128) bytes
- * because k is followed by u in hmac_sha512_ctx
- */
+ char* buf = hmac.k;
int b;
char key[SHA512_DIGESTSIZE];
@@ -367,14 +367,14 @@ void hmac_sha512
sha512_hash ((unsigned char *) buf, SHA512_BLOCKSIZE, ctx);
- hmac_sha512_internal (k, lk, d, ld, &hmac);
+ hmac_sha512_internal (d, ld, &hmac);
/* Prevent leaks */
burn (&hmac, sizeof(hmac));
burn (key, sizeof(key));
}
-static void derive_u_sha512 (char *pwd, int pwd_len, char *salt, int salt_len, uint32 iterations, int b, hmac_sha512_ctx* hmac)
+static void derive_u_sha512 (char *salt, int salt_len, uint32 iterations, int b, hmac_sha512_ctx* hmac)
{
char* k = hmac->k;
char* u = hmac->u;
@@ -383,16 +383,16 @@ static void derive_u_sha512 (char *pwd, int pwd_len, char *salt, int salt_len, u
/* iteration 1 */
memcpy (k, salt, salt_len); /* salt */
/* big-endian block number */
- memset (&k[salt_len], 0, 3);
- k[salt_len + 3] = (char) b;
+ b = bswap_32 (b);
+ memcpy (&k[salt_len], &b, 4);
- hmac_sha512_internal (pwd, pwd_len, k, salt_len + 4, hmac);
+ hmac_sha512_internal (k, salt_len + 4, hmac);
memcpy (u, k, SHA512_DIGESTSIZE);
/* remaining iterations */
for (c = 1; c < iterations; c++)
{
- hmac_sha512_internal (pwd, pwd_len, k, SHA512_DIGESTSIZE, hmac);
+ hmac_sha512_internal (k, SHA512_DIGESTSIZE, hmac);
for (i = 0; i < SHA512_DIGESTSIZE; i++)
{
u[i] ^= k[i];
@@ -405,9 +405,7 @@ void derive_key_sha512 (char *pwd, int pwd_len, char *salt, int salt_len, uint32
{
hmac_sha512_ctx hmac;
sha512_ctx* ctx;
- char* buf = hmac.k; /* there is enough space to hold SHA512_BLOCKSIZE (128) bytes
- * because k is followed by u in hmac_sha512_ctx
- */
+ char* buf = hmac.k;
int b, l, r;
char key[SHA512_DIGESTSIZE];
@@ -464,13 +462,13 @@ void derive_key_sha512 (char *pwd, int pwd_len, char *salt, int salt_len, uint32
/* first l - 1 blocks */
for (b = 1; b < l; b++)
{
- derive_u_sha512 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_sha512 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, SHA512_DIGESTSIZE);
dk += SHA512_DIGESTSIZE;
}
/* last block */
- derive_u_sha512 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_sha512 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, r);
@@ -492,7 +490,7 @@ typedef struct hmac_ripemd160_ctx_struct
char u[RIPEMD160_DIGESTSIZE];
} hmac_ripemd160_ctx;
-void hmac_ripemd160_internal (char *key, int keylen, char *input_digest, int len, hmac_ripemd160_ctx* hmac)
+void hmac_ripemd160_internal (char *input_digest, int len, hmac_ripemd160_ctx* hmac)
{
RMD160_CTX* context = &(hmac->context);
@@ -561,7 +559,7 @@ void hmac_ripemd160 (char *key, int keylen, char *input_digest, int len)
RMD160Init(ctx); /* init context for 2nd pass */
RMD160Update(ctx, k_pad, RIPEMD160_BLOCKSIZE); /* start with outer pad */
- hmac_ripemd160_internal (key, keylen, input_digest, len, &hmac);
+ hmac_ripemd160_internal (input_digest, len, &hmac);
burn (&hmac, sizeof(hmac));
burn (tk, sizeof(tk));
@@ -569,7 +567,7 @@ void hmac_ripemd160 (char *key, int keylen, char *input_digest, int len)
#endif
-static void derive_u_ripemd160 (char *pwd, int pwd_len, char *salt, int salt_len, uint32 iterations, int b, hmac_ripemd160_ctx* hmac)
+static void derive_u_ripemd160 (char *salt, int salt_len, uint32 iterations, int b, hmac_ripemd160_ctx* hmac)
{
char* k = hmac->k;
char* u = hmac->u;
@@ -595,16 +593,22 @@ static void derive_u_ripemd160 (char *pwd, int pwd_len, char *salt, int salt_len
memcpy (k, salt, salt_len); /* salt */
/* big-endian block number */
+#ifdef TC_WINDOWS_BOOT
+ /* specific case of 16-bit bootloader: b is a 16-bit integer that is always < 256*/
memset (&k[salt_len], 0, 3);
k[salt_len + 3] = (char) b;
+#else
+ b = bswap_32 (b);
+ memcpy (&k[salt_len], &b, 4);
+#endif
- hmac_ripemd160_internal (pwd, pwd_len, k, salt_len + 4, hmac);
+ hmac_ripemd160_internal (k, salt_len + 4, hmac);
memcpy (u, k, RIPEMD160_DIGESTSIZE);
/* remaining iterations */
while ( c > 1)
{
- hmac_ripemd160_internal (pwd, pwd_len, k, RIPEMD160_DIGESTSIZE, hmac);
+ hmac_ripemd160_internal (k, RIPEMD160_DIGESTSIZE, hmac);
for (i = 0; i < RIPEMD160_DIGESTSIZE; i++)
{
u[i] ^= k[i];
@@ -676,13 +680,13 @@ void derive_key_ripemd160 (char *pwd, int pwd_len, char *salt, int salt_len, uin
/* first l - 1 blocks */
for (b = 1; b < l; b++)
{
- derive_u_ripemd160 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_ripemd160 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, RIPEMD160_DIGESTSIZE);
dk += RIPEMD160_DIGESTSIZE;
}
/* last block */
- derive_u_ripemd160 (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_ripemd160 (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, r);
@@ -707,8 +711,6 @@ typedef struct hmac_whirlpool_ctx_struct
void hmac_whirlpool_internal
(
- char *k, /* secret key */
- int lk, /* length of the key in bytes */
char *d, /* input/output data. d pointer is guaranteed to be at least 64-bytes long */
int ld, /* length of input data in bytes */
hmac_whirlpool_ctx* hmac /* HMAC-Whirlpool context which holds temporary variables */
@@ -791,7 +793,7 @@ void hmac_whirlpool
WHIRLPOOL_add ((unsigned char *) buf, WHIRLPOOL_BLOCKSIZE, ctx);
- hmac_whirlpool_internal(k, lk, d, ld, &hmac);
+ hmac_whirlpool_internal(d, ld, &hmac);
#if defined (DEVICE_DRIVER) && !defined (_WIN64)
if (NT_SUCCESS (saveStatus) && HasISSE())
@@ -801,7 +803,7 @@ void hmac_whirlpool
burn(&hmac, sizeof(hmac));
}
-static void derive_u_whirlpool (char *pwd, int pwd_len, char *salt, int salt_len, uint32 iterations, int b, hmac_whirlpool_ctx* hmac)
+static void derive_u_whirlpool (char *salt, int salt_len, uint32 iterations, int b, hmac_whirlpool_ctx* hmac)
{
char* u = hmac->u;
char* k = hmac->k;
@@ -810,16 +812,16 @@ static void derive_u_whirlpool (char *pwd, int pwd_len, char *salt, int salt_len
/* iteration 1 */
memcpy (k, salt, salt_len); /* salt */
/* big-endian block number */
- memset (&k[salt_len], 0, 3);
- k[salt_len + 3] = (char) b;
+ b = bswap_32 (b);
+ memcpy (&k[salt_len], &b, 4);
- hmac_whirlpool_internal (pwd, pwd_len, k, salt_len + 4, hmac);
+ hmac_whirlpool_internal (k, salt_len + 4, hmac);
memcpy (u, k, WHIRLPOOL_DIGESTSIZE);
/* remaining iterations */
for (c = 1; c < iterations; c++)
{
- hmac_whirlpool_internal (pwd, pwd_len, k, WHIRLPOOL_DIGESTSIZE, hmac);
+ hmac_whirlpool_internal (k, WHIRLPOOL_DIGESTSIZE, hmac);
for (i = 0; i < WHIRLPOOL_DIGESTSIZE; i++)
{
u[i] ^= k[i];
@@ -893,13 +895,13 @@ void derive_key_whirlpool (char *pwd, int pwd_len, char *salt, int salt_len, uin
/* first l - 1 blocks */
for (b = 1; b < l; b++)
{
- derive_u_whirlpool (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_whirlpool (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, WHIRLPOOL_DIGESTSIZE);
dk += WHIRLPOOL_DIGESTSIZE;
}
/* last block */
- derive_u_whirlpool (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_whirlpool (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, r);
#if defined (DEVICE_DRIVER) && !defined (_WIN64)
@@ -924,8 +926,6 @@ typedef struct hmac_streebog_ctx_struct
void hmac_streebog_internal
(
- char *k, /* secret key */
- int lk, /* length of the key in bytes */
char *d, /* input/output data. d pointer is guaranteed to be at least 64-bytes long */
int ld, /* length of input data in bytes */
hmac_streebog_ctx* hmac /* HMAC-Whirlpool context which holds temporary variables */
@@ -1008,7 +1008,7 @@ void hmac_streebog
STREEBOG_add (ctx, (unsigned char *) buf, STREEBOG_BLOCKSIZE);
- hmac_streebog_internal(k, lk, d, ld, &hmac);
+ hmac_streebog_internal(d, ld, &hmac);
#if defined (DEVICE_DRIVER) && !defined (_WIN64)
if (NT_SUCCESS (saveStatus) && (HasSSE2() || HasSSE41()))
@@ -1018,7 +1018,7 @@ void hmac_streebog
burn(&hmac, sizeof(hmac));
}
-static void derive_u_streebog (char *pwd, int pwd_len, char *salt, int salt_len, uint32 iterations, int b, hmac_streebog_ctx* hmac)
+static void derive_u_streebog (char *salt, int salt_len, uint32 iterations, int b, hmac_streebog_ctx* hmac)
{
char* u = hmac->u;
char* k = hmac->k;
@@ -1027,16 +1027,16 @@ static void derive_u_streebog (char *pwd, int pwd_len, char *salt, int salt_len,
/* iteration 1 */
memcpy (k, salt, salt_len); /* salt */
/* big-endian block number */
- memset (&k[salt_len], 0, 3);
- k[salt_len + 3] = (char) b;
+ b = bswap_32 (b);
+ memcpy (&k[salt_len], &b, 4);
- hmac_streebog_internal (pwd, pwd_len, k, salt_len + 4, hmac);
+ hmac_streebog_internal (k, salt_len + 4, hmac);
memcpy (u, k, STREEBOG_DIGESTSIZE);
/* remaining iterations */
for (c = 1; c < iterations; c++)
{
- hmac_streebog_internal (pwd, pwd_len, k, STREEBOG_DIGESTSIZE, hmac);
+ hmac_streebog_internal (k, STREEBOG_DIGESTSIZE, hmac);
for (i = 0; i < STREEBOG_DIGESTSIZE; i++)
{
u[i] ^= k[i];
@@ -1110,13 +1110,13 @@ void derive_key_streebog (char *pwd, int pwd_len, char *salt, int salt_len, uint
/* first l - 1 blocks */
for (b = 1; b < l; b++)
{
- derive_u_streebog (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_streebog (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, STREEBOG_DIGESTSIZE);
dk += STREEBOG_DIGESTSIZE;
}
/* last block */
- derive_u_streebog (pwd, pwd_len, salt, salt_len, iterations, b, &hmac);
+ derive_u_streebog (salt, salt_len, iterations, b, &hmac);
memcpy (dk, hmac.u, r);
#if defined (DEVICE_DRIVER) && !defined (_WIN64)
diff --git a/src/Common/Random.c b/src/Common/Random.c
index edc6acc..ba1691d 100644
--- a/src/Common/Random.c
+++ b/src/Common/Random.c
@@ -108,7 +108,7 @@ int Randinit ()
if (pRandPool == NULL)
{
- pRandPool = (unsigned char *) TCalloc (RANDOMPOOL_ALLOCSIZE);
+ pRandPool = (unsigned char *) _aligned_malloc (RANDOMPOOL_ALLOCSIZE, 16);
if (pRandPool == NULL)
goto error;
@@ -203,7 +203,7 @@ freePool:
if (pRandPool != NULL)
{
burn (pRandPool, RANDOMPOOL_ALLOCSIZE);
- TCfree (pRandPool);
+ _aligned_free (pRandPool);
pRandPool = NULL;
}
}
diff --git a/src/Common/Resource.h b/src/Common/Resource.h
index 12907c1..b8cd3d7 100644
--- a/src/Common/Resource.h
+++ b/src/Common/Resource.h
@@ -73,6 +73,12 @@
#define IDR_EFI_LEGACYSPEAKER 569
#define IDR_EFI_DCSBML 570
#define IDR_EFI_DCSRE 571
+#define IDR_EFI_DCSBOOT32 572
+#define IDR_EFI_DCSINT32 573
+#define IDR_EFI_DCSCFG32 574
+#define IDR_EFI_LEGACYSPEAKER32 575
+#define IDR_EFI_DCSBML32 576
+#define IDR_EFI_DCSRE32 577
#define IDC_HW_AES_LABEL_LINK 5000
#define IDC_HW_AES 5001
#define IDC_PARALLELIZATION_LABEL_LINK 5002
@@ -220,7 +226,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
-#define _APS_NEXT_RESOURCE_VALUE 572
+#define _APS_NEXT_RESOURCE_VALUE 578
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 5141
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/src/Common/Tcdefs.h b/src/Common/Tcdefs.h
index fc01145..e81cf1c 100644
--- a/src/Common/Tcdefs.h
+++ b/src/Common/Tcdefs.h
@@ -55,15 +55,15 @@ extern unsigned short _rotl16(unsigned short value, unsigned char shift);
#define TC_APP_NAME "VeraCrypt"
// Version displayed to user
-#define VERSION_STRING "1.18"
+#define VERSION_STRING "1.19"
// Version number to compare against driver
-#define VERSION_NUM 0x0118
+#define VERSION_NUM 0x0119
// Release date
-#define TC_STR_RELEASE_DATE L"August 17th, 2016"
+#define TC_STR_RELEASE_DATE L"October 17th, 2016"
#define TC_RELEASE_DATE_YEAR 2016
-#define TC_RELEASE_DATE_MONTH 8
+#define TC_RELEASE_DATE_MONTH 10
#define BYTES_PER_KB 1024LL
#define BYTES_PER_MB 1048576LL
diff --git a/src/Common/Tests.c b/src/Common/Tests.c
index bd15913..cf0c869 100644
--- a/src/Common/Tests.c
+++ b/src/Common/Tests.c
@@ -376,6 +376,71 @@ CAMELLIA_TEST camellia_vectors[CAMELLIA_TEST_COUNT] = {
0xAD, 0x5C, 0x4D, 0x84
}
};
+#if defined(CIPHER_GOST89)
+// GOST89 ECB test vectors
+#define GOST89_TEST_COUNT 1
+
+typedef struct {
+ unsigned char key[32];
+ unsigned char plaintext[16];
+ unsigned char ciphertext[16];
+ } GOST89_TEST;
+
+GOST89_TEST gost89_vectors[GOST89_TEST_COUNT] = {
+{
+ 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44,
+ 0x33, 0x22, 0x11, 0x00, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+ 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0xFE, 0xDC, 0xBA, 0x98,
+ 0x76, 0x54, 0x32, 0x10, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88,
+ 0x8F, 0xC6, 0xFE, 0xB8, 0x91, 0x51, 0x4C, 0x37, 0x4D, 0x51, 0x46, 0xEF,
+ 0x02, 0x9D, 0xBD, 0x9F
+}
+};
+#endif
+
+// Kuznyechik ECB test vectors
+#define KUZNYECHIK_TEST_COUNT 4
+
+typedef struct {
+ unsigned char key[32];
+ unsigned char plaintext[16];
+ unsigned char ciphertext[16];
+ } KUZNYECHIK_TEST;
+
+KUZNYECHIK_TEST kuznyechik_vectors[KUZNYECHIK_TEST_COUNT] = {
+{
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33,
+ 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x11, 0x22, 0x33, 0x44,
+ 0x55, 0x66, 0x77, 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88,
+ 0x7F, 0x67, 0x9D, 0x90, 0xBE, 0xBC, 0x24, 0x30, 0x5A, 0x46, 0x8D, 0x42,
+ 0xB9, 0xD4, 0xED, 0xCD
+},
+{
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33,
+ 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x00, 0x11, 0x22, 0x33,
+ 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A,
+ 0xB4, 0x29, 0x91, 0x2C, 0x6E, 0x00, 0x32, 0xF9, 0x28, 0x54, 0x52, 0xD7,
+ 0x67, 0x18, 0xD0, 0x8B
+},
+{
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33,
+ 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x11, 0x22, 0x33, 0x44,
+ 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A, 0x00,
+ 0xF0, 0xCA, 0x33, 0x54, 0x9D, 0x24, 0x7C, 0xEE, 0xF3, 0xF5, 0xA5, 0x31,
+ 0x3B, 0xD4, 0xB1, 0x57
+},
+{
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33,
+ 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x22, 0x33, 0x44, 0x55,
+ 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A, 0x00, 0x11,
+ 0xD0, 0xB0, 0x9C, 0xCD, 0xE8, 0x30, 0xB9, 0xEB, 0x3A, 0x02, 0xC4, 0xC5,
+ 0xAA, 0x8A, 0xDA, 0x98
+}
+};
/* Test vectors from FIPS 198a, RFC 4231, RFC 2104, RFC 2202, and other sources. */
@@ -781,6 +846,60 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
break;
}
}
+#if defined(CIPHER_GOST89)
+ else if (wcscmp (name, L"GOST89") == 0)
+ {
+ switch (testCase)
+ {
+ case 0:
+ if (crc != 0x12194ef5)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 1:
+ if (crc != 0xda8d429b)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 2:
+ if (crc != 0xdbf0b12e)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 3:
+ if (crc != 0xb986eb4a)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ }
+ }
+#endif
+ else if (wcscmp (name, L"Kuznyechik") == 0)
+ {
+ switch (testCase)
+ {
+ case 0:
+ if (crc != 0x6b86e72e)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 1:
+ if (crc != 0xa4f8637d)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 2:
+ if (crc != 0xfd83e76d)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ case 3:
+ if (crc != 0xb24fc47b)
+ return FALSE;
+ nTestsPerformed++;
+ break;
+ }
+ }
else if (wcscmp (name, L"AES-Twofish") == 0)
{
switch (testCase)
@@ -981,6 +1100,20 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
return FALSE;
nTestsPerformed++;
}
+#if defined(CIPHER_GOST89)
+ else if (wcscmp (name, L"GOST89") == 0)
+ {
+ if (crc != 0x9e8653cb)
+ return FALSE;
+ nTestsPerformed++;
+ }
+#endif
+ else if (wcscmp (name, L"Kuznyechik") == 0)
+ {
+ if (crc != 0xd6d39cdb)
+ return FALSE;
+ nTestsPerformed++;
+ }
else if (wcscmp (name, L"AES-Twofish") == 0)
{
if (crc != 0x14ce7385)
@@ -1023,9 +1156,9 @@ BOOL TestSectorBufEncryption (PCRYPTO_INFO ci)
nTestsPerformed++;
}
#if defined(CIPHER_GOST89)
- return (nTestsPerformed == 100);
+ return (nTestsPerformed == 110);
#else
- return (nTestsPerformed == 95);
+ return (nTestsPerformed == 105);
#endif
}
@@ -1149,6 +1282,47 @@ static BOOL DoAutoTestAlgorithms (void)
if (i != CAMELLIA_TEST_COUNT)
bFailed = TRUE;
+ /* Kuznyechik */
+
+ for (i = 0; i < KUZNYECHIK_TEST_COUNT; i++)
+ {
+ int cipher = KUZNYECHIK;
+ memcpy(key, kuznyechik_vectors[i].key, 32);
+ memcpy(tmp, kuznyechik_vectors[i].plaintext, 16);
+ CipherInit(cipher, key, ks_tmp);
+
+ EncipherBlock(cipher, tmp, ks_tmp);
+ if (memcmp(kuznyechik_vectors[i].ciphertext, tmp, 16) != 0)
+ break;
+
+ DecipherBlock(cipher, tmp, ks_tmp);
+ if (memcmp(kuznyechik_vectors[i].plaintext, tmp, 16) != 0)
+ break;
+ }
+ if (i != KUZNYECHIK_TEST_COUNT)
+ bFailed = TRUE;
+
+#if defined(CIPHER_GOST89)
+ /* GOST89 */
+
+ for (i = 0; i < GOST89_TEST_COUNT; i++)
+ {
+ int cipher = GOST89;
+ memcpy(key, gost89_vectors[i].key, 32);
+ memcpy(tmp, gost89_vectors[i].plaintext, 16);
+ gost_set_key(key, (gost_kds*)ks_tmp, 0);
+
+ EncipherBlock(cipher, tmp, ks_tmp);
+ if (memcmp(gost89_vectors[i].ciphertext, tmp, 16) != 0)
+ break;
+
+ DecipherBlock(cipher, tmp, ks_tmp);
+ if (memcmp(gost89_vectors[i].plaintext, tmp, 16) != 0)
+ break;
+ }
+ if (i != GOST89_TEST_COUNT)
+ bFailed = TRUE;
+#endif
/* PKCS #5 and HMACs */
if (!test_pkcs5 ())
diff --git a/src/Common/Volumes.c b/src/Common/Volumes.c
index 67b072d..d232176 100644
--- a/src/Common/Volumes.c
+++ b/src/Common/Volumes.c
@@ -249,6 +249,7 @@ int ReadVolumeHeader (BOOL bBoot, char *encryptedHeader, Password *password, int
#if !defined(DEVICE_DRIVER)
VirtualLock (&keyInfo, sizeof (keyInfo));
VirtualLock (&dk, sizeof (dk));
+ VirtualLock (&header, sizeof (header));
#endif
#endif // !defined(_UEFI)
@@ -571,10 +572,12 @@ err:
ret:
burn (&keyInfo, sizeof (keyInfo));
burn (dk, sizeof(dk));
+ burn (header, sizeof(header));
#if !defined(DEVICE_DRIVER) && !defined(_UEFI)
VirtualUnlock (&keyInfo, sizeof (keyInfo));
VirtualUnlock (&dk, sizeof (dk));
+ VirtualUnlock (&header, sizeof (header));
#endif
#if !defined(_UEFI)
@@ -620,9 +623,6 @@ void ComputeBootloaderFingerprint (byte *bootLoaderBuf, unsigned int bootLoaderS
WHIRLPOOL_add (bootLoaderBuf + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH, (TC_BOOT_SECTOR_USER_CONFIG_OFFSET - (TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)), &whirlpool);
sha512_hash (bootLoaderBuf + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH, (TC_BOOT_SECTOR_USER_CONFIG_OFFSET - (TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)), &sha2);
- WHIRLPOOL_add (bootLoaderBuf + TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1, (TC_MAX_MBR_BOOT_CODE_SIZE - (TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1)), &whirlpool);
- sha512_hash (bootLoaderBuf + TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1, (TC_MAX_MBR_BOOT_CODE_SIZE - (TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1)), &sha2);
-
WHIRLPOOL_add (bootLoaderBuf + TC_SECTOR_SIZE_BIOS, (bootLoaderSize - TC_SECTOR_SIZE_BIOS), &whirlpool);
sha512_hash (bootLoaderBuf + TC_SECTOR_SIZE_BIOS, (bootLoaderSize - TC_SECTOR_SIZE_BIOS), &sha2);
@@ -867,7 +867,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
#endif
{
crypto_close (cryptoInfo);
- return ERR_CIPHER_INIT_WEAK_KEY;
+ retVal = ERR_CIPHER_INIT_WEAK_KEY;
+ goto err;
}
}
else
@@ -909,7 +910,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
#endif
{
crypto_close (cryptoInfo);
- return ERR_CIPHER_INIT_WEAK_KEY;
+ retVal = ERR_CIPHER_INIT_WEAK_KEY;
+ goto err;
}
if (password)
@@ -958,7 +960,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
#endif
{
crypto_close (cryptoInfo);
- return ERR_CIPHER_INIT_WEAK_KEY;
+ retVal = ERR_CIPHER_INIT_WEAK_KEY;
+ goto err;
}
}
@@ -1042,14 +1045,15 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
if (retVal != ERR_SUCCESS)
{
crypto_close (cryptoInfo);
- return retVal;
+ goto err;
}
// Mode of operation
if (!EAInitMode (cryptoInfo))
{
crypto_close (cryptoInfo);
- return ERR_OUTOFMEMORY;
+ retVal = ERR_OUTOFMEMORY;
+ goto err;
}
@@ -1066,7 +1070,7 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
if (retVal != ERR_SUCCESS)
{
crypto_close (cryptoInfo);
- return retVal;
+ goto err;
}
memcpy (cryptoInfo->master_keydata, keyInfo.master_keydata, MASTER_KEYDATA_SIZE);
@@ -1083,7 +1087,8 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
if (!EAInitMode (cryptoInfo))
{
crypto_close (cryptoInfo);
- return ERR_OUTOFMEMORY;
+ retVal = ERR_OUTOFMEMORY;
+ goto err;
}
@@ -1129,10 +1134,16 @@ int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *header, int ea,
}
#endif // #ifdef VOLFORMAT
+ *retInfo = cryptoInfo;
+
+err:
burn (dk, sizeof(dk));
burn (&keyInfo, sizeof (keyInfo));
+#if !defined(_UEFI)
+ VirtualUnlock (&keyInfo, sizeof (keyInfo));
+ VirtualUnlock (&dk, sizeof (dk));
+#endif // !defined(_UEFI)
- *retInfo = cryptoInfo;
return 0;
}
@@ -1239,7 +1250,7 @@ BOOL WriteEffectiveVolumeHeader (BOOL device, HANDLE fileHandle, byte *header)
// Writes randomly generated data to unused/reserved header areas.
// When bPrimaryOnly is TRUE, then only the primary header area (not the backup header area) is filled with random data.
// When bBackupOnly is TRUE, only the backup header area (not the primary header area) is filled with random data.
-int WriteRandomDataToReservedHeaderAreas (HWND hwndDlg, HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly, BOOL bInPlaceEnc)
+int WriteRandomDataToReservedHeaderAreas (HWND hwndDlg, HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly)
{
char temporaryKey[MASTER_KEYDATA_SIZE];
char originalK2[MASTER_KEYDATA_SIZE];
@@ -1298,12 +1309,8 @@ int WriteRandomDataToReservedHeaderAreas (HWND hwndDlg, HANDLE dev, CRYPTO_INFO
goto final_seq;
}
- if (backupHeaders || !bInPlaceEnc)
- {
- // encrypt random data instead of existing data for better entropy, except in case of primary
- // header of an in-place encrypted disk
- RandgetBytesFull (hwndDlg, buf + TC_VOLUME_HEADER_EFFECTIVE_SIZE, sizeof (buf) - TC_VOLUME_HEADER_EFFECTIVE_SIZE, FALSE, TRUE);
- }
+ // encrypt random data instead of existing data for better entropy
+ RandgetBytesFull (hwndDlg, buf + TC_VOLUME_HEADER_EFFECTIVE_SIZE, sizeof (buf) - TC_VOLUME_HEADER_EFFECTIVE_SIZE, FALSE, TRUE);
EncryptBuffer (buf + TC_VOLUME_HEADER_EFFECTIVE_SIZE, sizeof (buf) - TC_VOLUME_HEADER_EFFECTIVE_SIZE, cryptoInfo);
diff --git a/src/Common/Volumes.h b/src/Common/Volumes.h
index 68ba672..3fe3a45 100644
--- a/src/Common/Volumes.h
+++ b/src/Common/Volumes.h
@@ -147,7 +147,7 @@ void ComputeBootloaderFingerprint (byte *bootLoaderBuf, unsigned int bootLoaderS
int CreateVolumeHeaderInMemory (HWND hwndDlg, BOOL bBoot, char *encryptedHeader, int ea, int mode, Password *password, int pkcs5_prf, int pim, char *masterKeydata, PCRYPTO_INFO *retInfo, unsigned __int64 volumeSize, unsigned __int64 hiddenVolumeSize, unsigned __int64 encryptedAreaStart, unsigned __int64 encryptedAreaLength, uint16 requiredProgramVersion, uint32 headerFlags, uint32 sectorSize, BOOL bWipeMode);
BOOL ReadEffectiveVolumeHeader (BOOL device, HANDLE fileHandle, byte *header, DWORD *bytesRead);
BOOL WriteEffectiveVolumeHeader (BOOL device, HANDLE fileHandle, byte *header);
-int WriteRandomDataToReservedHeaderAreas (HWND hwndDlg, HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly, BOOL bInPlaceEnc);
+int WriteRandomDataToReservedHeaderAreas (HWND hwndDlg, HANDLE dev, CRYPTO_INFO *cryptoInfo, uint64 dataAreaSize, BOOL bPrimaryOnly, BOOL bBackupOnly);
#endif
#endif // !TC_HEADER_Volume_VolumeHeader
diff --git a/src/Common/XUnzip.cpp b/src/Common/XUnzip.cpp
deleted file mode 100644
index 913f440..0000000
--- a/src/Common/XUnzip.cpp
+++ /dev/null
@@ -1,4405 +0,0 @@
-// XUnzip.cpp Version 1.3
-//
-// Authors: Mark Adler et al. (see below)
-//
-// Modified by: Lucian Wischik
-// lu@wischik.com
-//
-// Version 1.0 - Turned C files into just a single CPP file
-// - Made them compile cleanly as C++ files
-// - Gave them simpler APIs
-// - Added the ability to zip/unzip directly in memory without
-// any intermediate files
-//
-// Modified by: Hans Dietrich
-// hdietrich@gmail.com
-//
-// Version 1.3: - Corrected size bug introduced by 1.2
-//
-// Version 1.2: - Many bug fixes. See CodeProject article for list.
-//
-// Version 1.1: - Added Unicode support to CreateZip() and ZipAdd()
-// - Changed file names to avoid conflicts with Lucian's files
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lucian Wischik's comments:
-// --------------------------
-// THIS FILE is almost entirely based upon code by Info-ZIP.
-// It has been modified by Lucian Wischik.
-// The original code may be found at http://www.info-zip.org
-// The original copyright text follows.
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Original authors' comments:
-// ---------------------------
-// This is version 2002-Feb-16 of the Info-ZIP copyright and license. The
-// definitive version of this document should be available at
-// ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
-//
-// Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
-//
-// For the purposes of this copyright and license, "Info-ZIP" is defined as
-// the following set of individuals:
-//
-// Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
-// Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase,
-// Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
-// David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
-// Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
-// Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler,
-// Antoine Verheijen, Paul von Behren, Rich Wales, Mike White
-//
-// This software is provided "as is", without warranty of any kind, express
-// or implied. In no event shall Info-ZIP or its contributors be held liable
-// for any direct, indirect, incidental, special or consequential damages
-// arising out of the use of or inability to use this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// definition, disclaimer, and this list of conditions.
-//
-// 2. Redistributions in binary form (compiled executables) must reproduce
-// the above copyright notice, definition, disclaimer, and this list of
-// conditions in documentation and/or other materials provided with the
-// distribution. The sole exception to this condition is redistribution
-// of a standard UnZipSFX binary as part of a self-extracting archive;
-// that is permitted without inclusion of this license, as long as the
-// normal UnZipSFX banner has not been removed from the binary or disabled.
-//
-// 3. Altered versions--including, but not limited to, ports to new
-// operating systems, existing ports with new graphical interfaces, and
-// dynamic, shared, or static library versions--must be plainly marked
-// as such and must not be misrepresented as being the original source.
-// Such altered versions also must not be misrepresented as being
-// Info-ZIP releases--including, but not limited to, labeling of the
-// altered versions with the names "Info-ZIP" (or any variation thereof,
-// including, but not limited to, different capitalizations),
-// "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of
-// Info-ZIP. Such altered versions are further prohibited from
-// misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or
-// of the Info-ZIP URL(s).
-//
-// 4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip",
-// "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its
-// own source and binary releases.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WIN64
-#define _USE_32BIT_TIME_T //+++1.2
-#endif
-
-
-#define STRICT
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <time.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <tchar.h>
-#include "XUnzip.h"
-
-#pragma warning(disable : 4996) // disable bogus deprecation warning
-
-// THIS FILE is almost entirely based upon code by Jean-loup Gailly
-// and Mark Adler. It has been modified by Lucian Wischik.
-// The original code may be found at http://www.gzip.org/zlib/
-// The original copyright text follows.
-//
-//
-//
-// zlib.h -- interface of the 'zlib' general purpose compression library
-// version 1.1.3, July 9th, 1998
-//
-// Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not
-// claim that you wrote the original software. If you use this software
-// in a product, an acknowledgment in the product documentation would be
-// appreciated but is not required.
-// 2. Altered source versions must be plainly marked as such, and must not be
-// misrepresented as being the original software.
-// 3. This notice may not be removed or altered from any source distribution.
-//
-// Jean-loup Gailly Mark Adler
-// jloup@gzip.org madler@alumni.caltech.edu
-//
-//
-// The data format used by the zlib library is described by RFCs (Request for
-// Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
-// (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
-//
-//
-// The 'zlib' compression library provides in-memory compression and
-// decompression functions, including integrity checks of the uncompressed
-// data. This version of the library supports only one compression method
-// (deflation) but other algorithms will be added later and will have the same
-// stream interface.
-//
-// Compression can be done in a single step if the buffers are large
-// enough (for example if an input file is mmap'ed), or can be done by
-// repeated calls of the compression function. In the latter case, the
-// application must provide more input and/or consume the output
-// (providing more output space) before each call.
-//
-// The library also supports reading and writing files in gzip (.gz) format
-// with an interface similar to that of stdio.
-//
-// The library does not install any signal handler. The decoder checks
-// the consistency of the compressed data, so the library should never
-// crash even in case of corrupted input.
-//
-// for more info about .ZIP format, see ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip
-// PkWare has also a specification at ftp://ftp.pkware.com/probdesc.zip
-
-#define zmalloc(len) malloc(len)
-
-#define zfree(p) free(p)
-
-/*
-void *zmalloc(unsigned int len)
-{ char *buf = new char[len+32];
- for (int i=0; i<16; i++)
- { buf[i]=i;
- buf[len+31-i]=i;
- }
- *((unsigned int*)buf) = len;
- char c[1000]; wsprintf(c,"malloc 0x%lx - %lu",buf+16,len);
- OutputDebugString(c);
- return buf+16;
-}
-
-void zfree(void *buf)
-{ char c[1000]; wsprintf(c,"free 0x%lx",buf);
- OutputDebugString(c);
- char *p = ((char*)buf)-16;
- unsigned int len = *((unsigned int*)p);
- bool blown=false;
- for (int i=0; i<16; i++)
- { char lo = p[i];
- char hi = p[len+31-i];
- if (hi!=i || (lo!=i && i>4)) blown=true;
- }
- if (blown)
- { OutputDebugString("BLOWN!!!");
- }
- delete[] p;
-}
-*/
-
-#pragma warning(disable : 4702) // unreachable code
-
-static ZRESULT zopenerror = ZR_OK; //+++1.2
-
-typedef struct tm_unz_s
-{ unsigned int tm_sec; // seconds after the minute - [0,59]
- unsigned int tm_min; // minutes after the hour - [0,59]
- unsigned int tm_hour; // hours since midnight - [0,23]
- unsigned int tm_mday; // day of the month - [1,31]
- unsigned int tm_mon; // months since January - [0,11]
- unsigned int tm_year; // years - [1980..2044]
-} tm_unz;
-
-
-// unz_global_info structure contain global data about the ZIPfile
-typedef struct unz_global_info_s
-{ unsigned long number_entry; // total number of entries in the central dir on this disk
- unsigned long size_comment; // size of the global comment of the zipfile
-} unz_global_info;
-
-// unz_file_info contain information about a file in the zipfile
-typedef struct unz_file_info_s
-{ unsigned long version; // version made by 2 bytes
- unsigned long version_needed; // version needed to extract 2 bytes
- unsigned long flag; // general purpose bit flag 2 bytes
- unsigned long compression_method; // compression method 2 bytes
- unsigned long dosDate; // last mod file date in Dos fmt 4 bytes
- unsigned long crc; // crc-32 4 bytes
- unsigned long compressed_size; // compressed size 4 bytes
- unsigned long uncompressed_size; // uncompressed size 4 bytes
- unsigned long size_filename; // filename length 2 bytes
- unsigned long size_file_extra; // extra field length 2 bytes
- unsigned long size_file_comment; // file comment length 2 bytes
- unsigned long disk_num_start; // disk number start 2 bytes
- unsigned long internal_fa; // internal file attributes 2 bytes
- unsigned long external_fa; // external file attributes 4 bytes
- tm_unz tmu_date;
-} unz_file_info;
-
-
-#define UNZ_OK (0)
-#define UNZ_END_OF_LIST_OF_FILE (-100)
-#define UNZ_ERRNO (Z_ERRNO)
-#define UNZ_EOF (0)
-#define UNZ_PARAMERROR (-102)
-#define UNZ_BADZIPFILE (-103)
-#define UNZ_INTERNALERROR (-104)
-#define UNZ_CRCERROR (-105)
-
-
-
-
-
-
-
-#define ZLIB_VERSION "1.1.3"
-
-
-// Allowed flush values; see deflate() for details
-#define Z_NO_FLUSH 0
-#define Z_SYNC_FLUSH 2
-#define Z_FULL_FLUSH 3
-#define Z_FINISH 4
-
-
-// compression levels
-#define Z_NO_COMPRESSION 0
-#define Z_BEST_SPEED 1
-#define Z_BEST_COMPRESSION 9
-#define Z_DEFAULT_COMPRESSION (-1)
-
-// compression strategy; see deflateInit2() for details
-#define Z_FILTERED 1
-#define Z_HUFFMAN_ONLY 2
-#define Z_DEFAULT_STRATEGY 0
-
-// Possible values of the data_type field
-#define Z_BINARY 0
-#define Z_ASCII 1
-#define Z_UNKNOWN 2
-
-// The deflate compression method (the only one supported in this version)
-#define Z_DEFLATED 8
-
-// for initializing zalloc, zfree, opaque
-#define Z_NULL 0
-
-// case sensitivity when searching for filenames
-#define CASE_SENSITIVE 1
-#define CASE_INSENSITIVE 2
-
-
-// Return codes for the compression/decompression functions. Negative
-// values are errors, positive values are used for special but normal events.
-#define Z_OK 0
-#define Z_STREAM_END 1
-#define Z_NEED_DICT 2
-#define Z_ERRNO (-1)
-#define Z_STREAM_ERROR (-2)
-#define Z_DATA_ERROR (-3)
-#define Z_MEM_ERROR (-4)
-#define Z_BUF_ERROR (-5)
-#define Z_VERSION_ERROR (-6)
-
-
-
-// Basic data types
-typedef unsigned char Byte; // 8 bits
-typedef unsigned int uInt; // 16 bits or more
-typedef unsigned long uLong; // 32 bits or more
-typedef void *voidpf;
-typedef void *voidp;
-typedef long z_off_t;
-
-
-
-
-
-
-
-
-
-
-
-
-typedef voidpf (*alloc_func) (voidpf opaque, uInt items, uInt size);
-typedef void (*free_func) (voidpf opaque, voidpf address);
-
-struct internal_state;
-
-typedef struct z_stream_s {
- Byte *next_in; // next input byte
- uInt avail_in; // number of bytes available at next_in
- uLong total_in; // total nb of input bytes read so far
-
- Byte *next_out; // next output byte should be put there
- uInt avail_out; // remaining free space at next_out
- uLong total_out; // total nb of bytes output so far
-
- char *msg; // last error message, NULL if no error
- struct internal_state *state; // not visible by applications
-
- alloc_func zalloc; // used to allocate the internal state
- free_func zfree; // used to free the internal state
- voidpf opaque; // private data object passed to zalloc and zfree
-
- int data_type; // best guess about the data type: ascii or binary
- uLong adler; // adler32 value of the uncompressed data
- uLong reserved; // reserved for future use
-} z_stream;
-
-typedef z_stream *z_streamp;
-
-
-// The application must update next_in and avail_in when avail_in has
-// dropped to zero. It must update next_out and avail_out when avail_out
-// has dropped to zero. The application must initialize zalloc, zfree and
-// opaque before calling the init function. All other fields are set by the
-// compression library and must not be updated by the application.
-//
-// The opaque value provided by the application will be passed as the first
-// parameter for calls of zalloc and zfree. This can be useful for custom
-// memory management. The compression library attaches no meaning to the
-// opaque value.
-//
-// zalloc must return Z_NULL if there is not enough memory for the object.
-// If zlib is used in a multi-threaded application, zalloc and zfree must be
-// thread safe.
-//
-// The fields total_in and total_out can be used for statistics or
-// progress reports. After compression, total_in holds the total size of
-// the uncompressed data and may be saved for use in the decompressor
-// (particularly if the decompressor wants to decompress everything in
-// a single step).
-//
-
-
-// basic functions
-
-const char *zlibVersion ();
-// The application can compare zlibVersion and ZLIB_VERSION for consistency.
-// If the first character differs, the library code actually used is
-// not compatible with the zlib.h header file used by the application.
-// This check is automatically made by inflateInit.
-
-
-
-
-
-
-int inflate (z_streamp strm, int flush);
-//
-// inflate decompresses as much data as possible, and stops when the input
-// buffer becomes empty or the output buffer becomes full. It may some
-// introduce some output latency (reading input without producing any output)
-// except when forced to flush.
-//
-// The detailed semantics are as follows. inflate performs one or both of the
-// following actions:
-//
-// - Decompress more input starting at next_in and update next_in and avail_in
-// accordingly. If not all input can be processed (because there is not
-// enough room in the output buffer), next_in is updated and processing
-// will resume at this point for the next call of inflate().
-//
-// - Provide more output starting at next_out and update next_out and avail_out
-// accordingly. inflate() provides as much output as possible, until there
-// is no more input data or no more space in the output buffer (see below
-// about the flush parameter).
-//
-// Before the call of inflate(), the application should ensure that at least
-// one of the actions is possible, by providing more input and/or consuming
-// more output, and updating the next_* and avail_* values accordingly.
-// The application can consume the uncompressed output when it wants, for
-// example when the output buffer is full (avail_out == 0), or after each
-// call of inflate(). If inflate returns Z_OK and with zero avail_out, it
-// must be called again after making room in the output buffer because there
-// might be more output pending.
-//
-// If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
-// output as possible to the output buffer. The flushing behavior of inflate is
-// not specified for values of the flush parameter other than Z_SYNC_FLUSH
-// and Z_FINISH, but the current implementation actually flushes as much output
-// as possible anyway.
-//
-// inflate() should normally be called until it returns Z_STREAM_END or an
-// error. However if all decompression is to be performed in a single step
-// (a single call of inflate), the parameter flush should be set to
-// Z_FINISH. In this case all pending input is processed and all pending
-// output is flushed; avail_out must be large enough to hold all the
-// uncompressed data. (The size of the uncompressed data may have been saved
-// by the compressor for this purpose.) The next operation on this stream must
-// be inflateEnd to deallocate the decompression state. The use of Z_FINISH
-// is never required, but can be used to inform inflate that a faster routine
-// may be used for the single inflate() call.
-//
-// If a preset dictionary is needed at this point (see inflateSetDictionary
-// below), inflate sets strm-adler to the adler32 checksum of the
-// dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise
-// it sets strm->adler to the adler32 checksum of all output produced
-// so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
-// an error code as described below. At the end of the stream, inflate()
-// checks that its computed adler32 checksum is equal to that saved by the
-// compressor and returns Z_STREAM_END only if the checksum is correct.
-//
-// inflate() returns Z_OK if some progress has been made (more input processed
-// or more output produced), Z_STREAM_END if the end of the compressed data has
-// been reached and all uncompressed output has been produced, Z_NEED_DICT if a
-// preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
-// corrupted (input stream not conforming to the zlib format or incorrect
-// adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
-// (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
-// enough memory, Z_BUF_ERROR if no progress is possible or if there was not
-// enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
-// case, the application may then call inflateSync to look for a good
-// compression block.
-//
-
-
-int inflateEnd (z_streamp strm);
-//
-// All dynamically allocated data structures for this stream are freed.
-// This function discards any unprocessed input and does not flush any
-// pending output.
-//
-// inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
-// was inconsistent. In the error case, msg may be set but then points to a
-// static string (which must not be deallocated).
-
- // Advanced functions
-
-// The following functions are needed only in some special applications.
-
-
-
-
-
-int inflateSetDictionary (z_streamp strm,
- const Byte *dictionary,
- uInt dictLength);
-//
-// Initializes the decompression dictionary from the given uncompressed byte
-// sequence. This function must be called immediately after a call of inflate
-// if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
-// can be determined from the Adler32 value returned by this call of
-// inflate. The compressor and decompressor must use exactly the same
-// dictionary.
-//
-// inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
-// parameter is invalid (such as NULL dictionary) or the stream state is
-// inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
-// expected one (incorrect Adler32 value). inflateSetDictionary does not
-// perform any decompression: this will be done by subsequent calls of
-// inflate().
-
-
-int inflateSync (z_streamp strm);
-//
-// Skips invalid compressed data until a full flush point can be found, or until all
-// available input is skipped. No output is provided.
-//
-// inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
-// if no more input was provided, Z_DATA_ERROR if no flush point has been found,
-// or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
-// case, the application may save the current current value of total_in which
-// indicates where valid compressed data was found. In the error case, the
-// application may repeatedly call inflateSync, providing more input each time,
-// until success or end of the input data.
-
-
-int inflateReset (z_streamp strm);
-// This function is equivalent to inflateEnd followed by inflateInit,
-// but does not free and reallocate all the internal decompression state.
-// The stream will keep attributes that may have been set by inflateInit2.
-//
-// inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
-// stream state was inconsistent (such as zalloc or state being NULL).
-//
-
-
-
-// checksum functions
-// These functions are not related to compression but are exported
-// anyway because they might be useful in applications using the
-// compression library.
-
-uLong adler32 (uLong adler, const Byte *buf, uInt len);
-// Update a running Adler-32 checksum with the bytes buf[0..len-1] and
-// return the updated checksum. If buf is NULL, this function returns
-// the required initial value for the checksum.
-// An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
-// much faster. Usage example:
-//
-// uLong adler = adler32(0L, Z_NULL, 0);
-//
-// while (read_buffer(buffer, length) != EOF) {
-// adler = adler32(adler, buffer, length);
-// }
-// if (adler != original_adler) error();
-
-uLong ucrc32 (uLong crc, const Byte *buf, uInt len);
-// Update a running crc with the bytes buf[0..len-1] and return the updated
-// crc. If buf is NULL, this function returns the required initial value
-// for the crc. Pre- and post-conditioning (one's complement) is performed
-// within this function so it shouldn't be done by the application.
-// Usage example:
-//
-// uLong crc = crc32(0L, Z_NULL, 0);
-//
-// while (read_buffer(buffer, length) != EOF) {
-// crc = crc32(crc, buffer, length);
-// }
-// if (crc != original_crc) error();
-
-
-
-
-const char *zError (int err);
-int inflateSyncPoint (z_streamp z);
-const uLong *get_crc_table (void);
-
-
-
-typedef unsigned char uch;
-typedef uch uchf;
-typedef unsigned short ush;
-typedef ush ushf;
-typedef unsigned long ulg;
-
-
-
-const char * const z_errmsg[10] = { // indexed by 2-zlib_error
-"need dictionary", // Z_NEED_DICT 2
-"stream end", // Z_STREAM_END 1
-"", // Z_OK 0
-"file error", // Z_ERRNO (-1)
-"stream error", // Z_STREAM_ERROR (-2)
-"data error", // Z_DATA_ERROR (-3)
-"insufficient memory", // Z_MEM_ERROR (-4)
-"buffer error", // Z_BUF_ERROR (-5)
-"incompatible version",// Z_VERSION_ERROR (-6)
-""};
-
-
-#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
-
-#define ERR_RETURN(strm,err) \
- return (strm->msg = (char*)ERR_MSG(err), (err))
-// To be used only when the state is known to be valid
-
- // common constants
-
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES 2
-// The three kinds of block type
-
-#define MIN_MATCH 3
-#define MAX_MATCH 258
-// The minimum and maximum match lengths
-
-#define PRESET_DICT 0x20 // preset dictionary flag in zlib header
-
- // target dependencies
-
-#define OS_CODE 0x0b // Window 95 & Windows NT
-
-
-
- // functions
-
-#define zmemzero(dest, len) memset(dest, 0, len)
-
-// Diagnostic functions
-#undef Assert
-#undef Trace
-#undef Tracev
-#undef Tracevv
-#undef Tracec
-#undef Tracecv
-
-#ifdef DEBUG
-
- int z_verbose = 0;
- void z_error (char *m) {fprintf(stderr, "%s\n", m); exit(1);}
-
-#define Assert(cond,msg) {if(!(cond)) z_error(msg);}
-#define Trace(x) {if (z_verbose>=0) fprintf x ;}
-#define Tracev(x) {if (z_verbose>0) fprintf x ;}
-#define Tracevv(x) {if (z_verbose>1) fprintf x ;}
-#define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
-#define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
-
-#else
-
-#ifndef __noop
-#if _MSC_VER < 1300
-#define __noop ((void)0)
-#endif
-#endif
-
-#define Assert(cond,msg) __noop
-#define Trace(x) __noop
-#define Tracev(x) __noop
-#define Tracevv(x) __noop
-#define Tracec(c,x) __noop
-#define Tracecv(c,x) __noop
-
-#endif
-
-
-typedef uLong (*check_func) (uLong check, const Byte *buf, uInt len);
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size);
-void zcfree (voidpf opaque, voidpf ptr);
-
-#define ZALLOC(strm, items, size) \
- (*((strm)->zalloc))((strm)->opaque, (items), (size))
-#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
-
-//void ZFREE(z_streamp strm,voidpf addr)
-//{ *((strm)->zfree))((strm)->opaque, addr);
-//}
-
-#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
-
-
-
-
-// Huffman code lookup table entry--this entry is four bytes for machines
-// that have 16-bit pointers (e.g. PC's in the small or medium model).
-
-
-typedef struct inflate_huft_s inflate_huft;
-
-struct inflate_huft_s {
- union {
- struct {
- Byte Exop; // number of extra bits or operation
- Byte Bits; // number of bits in this code or subcode
- } what;
- uInt pad; // pad structure to a power of 2 (4 bytes for
- } word; // 16-bit, 8 bytes for 32-bit int's)
- uInt base; // literal, length base, distance base, or table offset
-};
-
-// Maximum size of dynamic tree. The maximum found in a long but non-
-// exhaustive search was 1004 huft structures (850 for length/literals
-// and 154 for distances, the latter actually the result of an
-// exhaustive search). The actual maximum is not known, but the
-// value below is more than safe.
-#define MANY 1440
-
-int inflate_trees_bits (
- uInt *, // 19 code lengths
- uInt *, // bits tree desired/actual depth
- inflate_huft * *, // bits tree result
- inflate_huft *, // space for trees
- z_streamp); // for messages
-
-int inflate_trees_dynamic (
- uInt, // number of literal/length codes
- uInt, // number of distance codes
- uInt *, // that many (total) code lengths
- uInt *, // literal desired/actual bit depth
- uInt *, // distance desired/actual bit depth
- inflate_huft * *, // literal/length tree result
- inflate_huft * *, // distance tree result
- inflate_huft *, // space for trees
- z_streamp); // for messages
-
-int inflate_trees_fixed (
- uInt *, // literal desired/actual bit depth
- uInt *, // distance desired/actual bit depth
- const inflate_huft * *, // literal/length tree result
- const inflate_huft * *, // distance tree result
- z_streamp); // for memory allocation
-
-
-
-
-
-struct inflate_blocks_state;
-typedef struct inflate_blocks_state inflate_blocks_statef;
-
-inflate_blocks_statef * inflate_blocks_new (
- z_streamp z,
- check_func c, // check function
- uInt w); // window size
-
-int inflate_blocks (
- inflate_blocks_statef *,
- z_streamp ,
- int); // initial return code
-
-void inflate_blocks_reset (
- inflate_blocks_statef *,
- z_streamp ,
- uLong *); // check value on output
-
-int inflate_blocks_free (
- inflate_blocks_statef *,
- z_streamp);
-
-void inflate_set_dictionary (
- inflate_blocks_statef *s,
- const Byte *d, // dictionary
- uInt n); // dictionary length
-
-int inflate_blocks_sync_point (
- inflate_blocks_statef *s);
-
-
-
-
-struct inflate_codes_state;
-typedef struct inflate_codes_state inflate_codes_statef;
-
-inflate_codes_statef *inflate_codes_new (
- uInt, uInt,
- const inflate_huft *, const inflate_huft *,
- z_streamp );
-
-int inflate_codes (
- inflate_blocks_statef *,
- z_streamp ,
- int);
-
-void inflate_codes_free (
- inflate_codes_statef *,
- z_streamp );
-
-
-
-
-typedef enum {
- IBM_TYPE, // get type bits (3, including end bit)
- IBM_LENS, // get lengths for stored
- IBM_STORED, // processing stored block
- IBM_TABLE, // get table lengths
- IBM_BTREE, // get bit lengths tree for a dynamic block
- IBM_DTREE, // get length, distance trees for a dynamic block
- IBM_CODES, // processing fixed or dynamic block
- IBM_DRY, // output remaining window bytes
- IBM_DONE, // finished last block, done
- IBM_BAD} // got a data error--stuck here
-inflate_block_mode;
-
-// inflate blocks semi-private state
-struct inflate_blocks_state {
-
- // mode
- inflate_block_mode mode; // current inflate_block mode
-
- // mode dependent information
- union {
- uInt left; // if STORED, bytes left to copy
- struct {
- uInt table; // table lengths (14 bits)
- uInt index; // index into blens (or border)
- uInt *blens; // bit lengths of codes
- uInt bb; // bit length tree depth
- inflate_huft *tb; // bit length decoding tree
- } trees; // if DTREE, decoding info for trees
- struct {
- inflate_codes_statef
- *codes;
- } decode; // if CODES, current state
- } sub; // submode
- uInt last; // true if this block is the last block
-
- // mode independent information
- uInt bitk; // bits in bit buffer
- uLong bitb; // bit buffer
- inflate_huft *hufts; // single malloc for tree space
- Byte *window; // sliding window
- Byte *end; // one byte after sliding window
- Byte *read; // window read pointer
- Byte *write; // window write pointer
- check_func checkfn; // check function
- uLong check; // check on output
-
-};
-
-
-// defines for inflate input/output
-// update pointers and return
-#define UPDBITS {s->bitb=b;s->bitk=k;}
-#define UPDIN {z->avail_in=n;z->total_in+=(uLong)(p-z->next_in);z->next_in=p;}
-#define UPDOUT {s->write=q;}
-#define UPDATE {UPDBITS UPDIN UPDOUT}
-#define LEAVE {UPDATE return inflate_flush(s,z,r);}
-// get bytes and bits
-#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
-#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
-#define NEXTBYTE (n--,*p++)
-#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define DUMPBITS(j) {b>>=(j);k-=(j);}
-// output bytes
-#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
-#define LOADOUT {q=s->write;m=(uInt)WAVAIL;m;}
-#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
-#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
-#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
-#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
-// load local pointers
-#define LOAD {LOADIN LOADOUT}
-
-// masks for lower bits (size given to avoid silly warnings with Visual C++)
-// And'ing with mask[n] masks the lower n bits
-const uInt inflate_mask[17] = {
- 0x0000,
- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
-};
-
-// copy as much as possible from the sliding window to the output area
-int inflate_flush (inflate_blocks_statef *, z_streamp, int);
-
-int inflate_fast (uInt, uInt, const inflate_huft *, const inflate_huft *, inflate_blocks_statef *, z_streamp );
-
-
-
-const uInt fixed_bl = 9;
-const uInt fixed_bd = 5;
-const inflate_huft fixed_tl[] = {
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
- };
-const inflate_huft fixed_td[] = {
- {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
- {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
- {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
- {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
- {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
- {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
- {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
- {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
- };
-
-
-
-
-
-
-
-// copy as much as possible from the sliding window to the output area
-int inflate_flush(inflate_blocks_statef *s,z_streamp z,int r)
-{
- uInt n;
- Byte *p;
- Byte *q;
-
- // local copies of source and destination pointers
- p = z->next_out;
- q = s->read;
-
- // compute number of bytes to copy as far as end of window
- n = (uInt)((q <= s->write ? s->write : s->end) - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- // update counters
- z->avail_out -= n;
- z->total_out += n;
-
- // update check information
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- // copy as far as end of window
- if (n!=0) // check for n!=0 to avoid waking up CodeGuard
- { memcpy(p, q, n);
- p += n;
- q += n;
- }
-
- // see if more to copy at beginning of window
- if (q == s->end)
- {
- // wrap pointers
- q = s->window;
- if (s->write == s->end)
- s->write = s->window;
-
- // compute bytes to copy
- n = (uInt)(s->write - q);
- if (n > z->avail_out) n = z->avail_out;
- if (n && r == Z_BUF_ERROR) r = Z_OK;
-
- // update counters
- z->avail_out -= n;
- z->total_out += n;
-
- // update check information
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(s->check, q, n);
-
- // copy
- memcpy(p, q, n);
- p += n;
- q += n;
- }
-
- // update pointers
- z->next_out = p;
- s->read = q;
-
- // done
- return r;
-}
-
-
-
-
-
-
-// simplify the use of the inflate_huft type with some defines
-#define exop word.what.Exop
-#define bits word.what.Bits
-
-typedef enum { // waiting for "i:"=input, "o:"=output, "x:"=nothing
- START, // x: set up for LEN
- LEN, // i: get length/literal/eob next
- LENEXT, // i: getting length extra (have base)
- DIST, // i: get distance next
- DISTEXT, // i: getting distance extra
- COPY, // o: copying bytes in window, waiting for space
- LIT, // o: got literal, waiting for output space
- WASH, // o: got eob, possibly still output waiting
- END, // x: got eob and all data flushed
- BADCODE} // x: got error
-inflate_codes_mode;
-
-// inflate codes private state
-struct inflate_codes_state {
-
- // mode
- inflate_codes_mode mode; // current inflate_codes mode
-
- // mode dependent information
- uInt len;
- union {
- struct {
- const inflate_huft *tree; // pointer into tree
- uInt need; // bits needed
- } code; // if LEN or DIST, where in tree
- uInt lit; // if LIT, literal
- struct {
- uInt get; // bits to get for extra
- uInt dist; // distance back to copy from
- } copy; // if EXT or COPY, where and how much
- } sub; // submode
-
- // mode independent information
- Byte lbits; // ltree bits decoded per branch
- Byte dbits; // dtree bits decoder per branch
- const inflate_huft *ltree; // literal/length/eob tree
- const inflate_huft *dtree; // distance tree
-
-};
-
-
-inflate_codes_statef *inflate_codes_new(
-uInt bl, uInt bd,
-const inflate_huft *tl,
-const inflate_huft *td, // need separate declaration for Borland C++
-z_streamp z)
-{
- inflate_codes_statef *c;
-
- if ((c = (inflate_codes_statef *)
- ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
- {
- c->mode = START;
- c->lbits = (Byte)bl;
- c->dbits = (Byte)bd;
- c->ltree = tl;
- c->dtree = td;
- Tracev((stderr, "inflate: codes new\n"));
- }
- return c;
-}
-
-
-int inflate_codes(inflate_blocks_statef *s, z_streamp z, int r)
-{
- uInt j; // temporary storage
- const inflate_huft *t; // temporary pointer
- uInt e; // extra bits or operation
- uLong b; // bit buffer
- uInt k; // bits in bit buffer
- Byte *p; // input data pointer
- uInt n; // bytes available there
- Byte *q; // output window write pointer
- uInt m; // bytes to end of window or read pointer
- Byte *f; // pointer to copy strings from
- inflate_codes_statef *c = s->sub.decode.codes; // codes state
-
- // copy input/output information to locals (UPDATE macro restores)
- LOAD
-
- // process input and output based on current state
- for(;;) switch (c->mode)
- { // waiting for "i:"=input, "o:"=output, "x:"=nothing
- case START: // x: set up for LEN
-#ifndef SLOW
- if (m >= 258 && n >= 10)
- {
- UPDATE
- r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
- LOAD
- if (r != Z_OK)
- {
- c->mode = r == Z_STREAM_END ? WASH : BADCODE;
- break;
- }
- }
-#endif // !SLOW
- c->sub.code.need = c->lbits;
- c->sub.code.tree = c->ltree;
- c->mode = LEN;
- case LEN: // i: get length/literal/eob next
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e == 0) // literal
- {
- c->sub.lit = t->base;
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: literal '%c'\n" :
- "inflate: literal 0x%02x\n", t->base));
- c->mode = LIT;
- break;
- }
- if (e & 16) // length
- {
- c->sub.copy.get = e & 15;
- c->len = t->base;
- c->mode = LENEXT;
- break;
- }
- if ((e & 64) == 0) // next table
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- if (e & 32) // end of block
- {
- Tracevv((stderr, "inflate: end of block\n"));
- c->mode = WASH;
- break;
- }
- c->mode = BADCODE; // invalid code
- z->msg = (char*)"invalid literal/length code";
- r = Z_DATA_ERROR;
- LEAVE
- case LENEXT: // i: getting length extra (have base)
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->len += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- c->sub.code.need = c->dbits;
- c->sub.code.tree = c->dtree;
- Tracevv((stderr, "inflate: length %u\n", c->len));
- c->mode = DIST;
- case DIST: // i: get distance next
- j = c->sub.code.need;
- NEEDBITS(j)
- t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
- DUMPBITS(t->bits)
- e = (uInt)(t->exop);
- if (e & 16) // distance
- {
- c->sub.copy.get = e & 15;
- c->sub.copy.dist = t->base;
- c->mode = DISTEXT;
- break;
- }
- if ((e & 64) == 0) // next table
- {
- c->sub.code.need = e;
- c->sub.code.tree = t + t->base;
- break;
- }
- c->mode = BADCODE; // invalid code
- z->msg = (char*)"invalid distance code";
- r = Z_DATA_ERROR;
- LEAVE
- case DISTEXT: // i: getting distance extra
- j = c->sub.copy.get;
- NEEDBITS(j)
- c->sub.copy.dist += (uInt)b & inflate_mask[j];
- DUMPBITS(j)
- Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
- c->mode = COPY;
- case COPY: // o: copying bytes in window, waiting for space
- f = (uInt)(q - s->window) < c->sub.copy.dist ?
- s->end - (c->sub.copy.dist - (q - s->window)) :
- q - c->sub.copy.dist;
- while (c->len)
- {
- NEEDOUT
- OUTBYTE(*f++)
- if (f == s->end)
- f = s->window;
- c->len--;
- }
- c->mode = START;
- break;
- case LIT: // o: got literal, waiting for output space
- NEEDOUT
- OUTBYTE(c->sub.lit)
- c->mode = START;
- break;
- case WASH: // o: got eob, possibly more output
- if (k > 7) // return unused byte, if any
- {
- Assert(k < 16, "inflate_codes grabbed too many bytes");
- k -= 8;
- n++;
- p--; // can always return one
- }
- FLUSH
- if (s->read != s->write)
- LEAVE
- c->mode = END;
- case END:
- r = Z_STREAM_END;
- LEAVE
- case BADCODE: // x: got error
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-}
-
-
-void inflate_codes_free(inflate_codes_statef *c,z_streamp z)
-{ ZFREE(z, c);
- Tracev((stderr, "inflate: codes free\n"));
-}
-
-
-
-// infblock.c -- interpret and process block types to last block
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-
-//struct inflate_codes_state {int dummy;}; // for buggy compilers
-
-
-
-// Table for deflate from PKZIP's appnote.txt.
-const uInt border[] = { // Order of the bit length code lengths
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-//
-// Notes beyond the 1.93a appnote.txt:
-//
-// 1. Distance pointers never point before the beginning of the output stream.
-// 2. Distance pointers can point back across blocks, up to 32k away.
-// 3. There is an implied maximum of 7 bits for the bit length table and
-// 15 bits for the actual data.
-// 4. If only one code exists, then it is encoded using one bit. (Zero
-// would be more efficient, but perhaps a little confusing.) If two
-// codes exist, they are coded using one bit each (0 and 1).
-// 5. There is no way of sending zero distance codes--a dummy must be
-// sent if there are none. (History: a pre 2.0 version of PKZIP would
-// store blocks with no distance codes, but this was discovered to be
-// too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
-// zero distance codes, which is sent as one code of zero bits in
-// length.
-// 6. There are up to 286 literal/length codes. Code 256 represents the
-// end-of-block. Note however that the static length tree defines
-// 288 codes just to fill out the Huffman codes. Codes 286 and 287
-// cannot be used though, since there is no length base or extra bits
-// defined for them. Similarily, there are up to 30 distance codes.
-// However, static trees define 32 codes (all 5 bits) to fill out the
-// Huffman codes, but the last two had better not show up in the data.
-// 7. Unzip can check dynamic Huffman blocks for complete code sets.
-// The exception is that a single code would not be complete (see #4).
-// 8. The five bits following the block type is really the number of
-// literal codes sent minus 257.
-// 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
-// (1+6+6). Therefore, to output three times the length, you output
-// three codes (1+1+1), whereas to output four times the same length,
-// you only need two codes (1+3). Hmm.
-//10. In the tree reconstruction algorithm, Code = Code + Increment
-// only if BitLength(i) is not zero. (Pretty obvious.)
-//11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
-//12. Note: length code 284 can represent 227-258, but length code 285
-// really is 258. The last length deserves its own, short code
-// since it gets used a lot in very redundant files. The length
-// 258 is special since 258 - 3 (the min match length) is 255.
-//13. The literal/length and distance code bit lengths are read as a
-// single stream of lengths. It is possible (and advantageous) for
-// a repeat code (16, 17, or 18) to go across the boundary between
-// the two sets of lengths.
-
-
-void inflate_blocks_reset(inflate_blocks_statef *s, z_streamp z, uLong *c)
-{
- if (c != Z_NULL)
- *c = s->check;
- if (s->mode == IBM_BTREE || s->mode == IBM_DTREE)
- ZFREE(z, s->sub.trees.blens);
- if (s->mode == IBM_CODES)
- inflate_codes_free(s->sub.decode.codes, z);
- s->mode = IBM_TYPE;
- s->bitk = 0;
- s->bitb = 0;
- s->read = s->write = s->window;
- if (s->checkfn != Z_NULL)
- z->adler = s->check = (*s->checkfn)(0L, (const Byte *)Z_NULL, 0);
- Tracev((stderr, "inflate: blocks reset\n"));
-}
-
-
-inflate_blocks_statef *inflate_blocks_new(z_streamp z, check_func c, uInt w)
-{
- inflate_blocks_statef *s;
-
- if ((s = (inflate_blocks_statef *)ZALLOC
- (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
- return s;
- if ((s->hufts =
- (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL)
- {
- ZFREE(z, s);
- return Z_NULL;
- }
- if ((s->window = (Byte *)ZALLOC(z, 1, w)) == Z_NULL)
- {
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- return Z_NULL;
- }
- s->end = s->window + w;
- s->checkfn = c;
- s->mode = IBM_TYPE;
- Tracev((stderr, "inflate: blocks allocated\n"));
- inflate_blocks_reset(s, z, Z_NULL);
- return s;
-}
-
-
-int inflate_blocks(inflate_blocks_statef *s, z_streamp z, int r)
-{
- uInt t; // temporary storage
- uLong b; // bit buffer
- uInt k; // bits in bit buffer
- Byte *p; // input data pointer
- uInt n; // bytes available there
- Byte *q; // output window write pointer
- uInt m; // bytes to end of window or read pointer
-
- // copy input/output information to locals (UPDATE macro restores)
- LOAD
-
- // process input based on current state
- for(;;) switch (s->mode)
- {
- case IBM_TYPE:
- NEEDBITS(3)
- t = (uInt)b & 7;
- s->last = t & 1;
- switch (t >> 1)
- {
- case 0: // stored
- Tracev((stderr, "inflate: stored block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- t = k & 7; // go to byte boundary
- DUMPBITS(t)
- s->mode = IBM_LENS; // get length of stored block
- break;
- case 1: // fixed
- Tracev((stderr, "inflate: fixed codes block%s\n",
- s->last ? " (last)" : ""));
- {
- uInt bl, bd;
- const inflate_huft *tl, *td;
-
- inflate_trees_fixed(&bl, &bd, &tl, &td, z);
- s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
- if (s->sub.decode.codes == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- }
- DUMPBITS(3)
- s->mode = IBM_CODES;
- break;
- case 2: // dynamic
- Tracev((stderr, "inflate: dynamic codes block%s\n",
- s->last ? " (last)" : ""));
- DUMPBITS(3)
- s->mode = IBM_TABLE;
- break;
- case 3: // illegal
- DUMPBITS(3)
- s->mode = IBM_BAD;
- z->msg = (char*)"invalid block type";
- r = Z_DATA_ERROR;
- LEAVE
- }
- break;
- case IBM_LENS:
- NEEDBITS(32)
- if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
- {
- s->mode = IBM_BAD;
- z->msg = (char*)"invalid stored block lengths";
- r = Z_DATA_ERROR;
- LEAVE
- }
- s->sub.left = (uInt)b & 0xffff;
- b = k = 0; // dump bits
- Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
- s->mode = s->sub.left ? IBM_STORED : (s->last ? IBM_DRY : IBM_TYPE);
- break;
- case IBM_STORED:
- if (n == 0)
- LEAVE
- NEEDOUT
- t = s->sub.left;
- if (t > n) t = n;
- if (t > m) t = m;
- memcpy(q, p, t);
- p += t; n -= t;
- q += t; m -= t;
- if ((s->sub.left -= t) != 0)
- break;
- Tracev((stderr, "inflate: stored end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- s->mode = s->last ? IBM_DRY : IBM_TYPE;
- break;
- case IBM_TABLE:
- NEEDBITS(14)
- s->sub.trees.table = t = (uInt)b & 0x3fff;
- // remove this section to workaround bug in pkzip
- if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
- {
- s->mode = IBM_BAD;
- z->msg = (char*)"too many length or distance symbols";
- r = Z_DATA_ERROR;
- LEAVE
- }
- // end remove
- t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
- if ((s->sub.trees.blens = (uInt*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- DUMPBITS(14)
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: table sizes ok\n"));
- s->mode = IBM_BTREE;
- case IBM_BTREE:
- while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
- {
- NEEDBITS(3)
- s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
- DUMPBITS(3)
- }
- while (s->sub.trees.index < 19)
- s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
- s->sub.trees.bb = 7;
- t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
- &s->sub.trees.tb, s->hufts, z);
- if (t != Z_OK)
- {
- ZFREE(z, s->sub.trees.blens);
- r = t;
- if (r == Z_DATA_ERROR)
- s->mode = IBM_BAD;
- LEAVE
- }
- s->sub.trees.index = 0;
- Tracev((stderr, "inflate: bits tree ok\n"));
- s->mode = IBM_DTREE;
- case IBM_DTREE:
- while (t = s->sub.trees.table,
- s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
- {
- inflate_huft *h;
- uInt i, j, c;
-
- t = s->sub.trees.bb;
- NEEDBITS(t)
- h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
- t = h->bits;
- c = h->base;
- if (c < 16)
- {
- DUMPBITS(t)
- s->sub.trees.blens[s->sub.trees.index++] = c;
- }
- else // c == 16..18
- {
- i = c == 18 ? 7 : c - 14;
- j = c == 18 ? 11 : 3;
- NEEDBITS(t + i)
- DUMPBITS(t)
- j += (uInt)b & inflate_mask[i];
- DUMPBITS(i)
- i = s->sub.trees.index;
- t = s->sub.trees.table;
- if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
- (c == 16 && i < 1))
- {
- ZFREE(z, s->sub.trees.blens);
- s->mode = IBM_BAD;
- z->msg = (char*)"invalid bit length repeat";
- r = Z_DATA_ERROR;
- LEAVE
- }
- c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
- do {
- s->sub.trees.blens[i++] = c;
- } while (--j);
- s->sub.trees.index = i;
- }
- }
- s->sub.trees.tb = Z_NULL;
- {
- uInt bl, bd;
- inflate_huft *tl, *td;
- inflate_codes_statef *c;
-
- bl = 9; // must be <= 9 for lookahead assumptions
- bd = 6; // must be <= 9 for lookahead assumptions
- t = s->sub.trees.table;
- t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
- s->sub.trees.blens, &bl, &bd, &tl, &td,
- s->hufts, z);
- ZFREE(z, s->sub.trees.blens);
- if (t != Z_OK)
- {
- if (t == (uInt)Z_DATA_ERROR)
- s->mode = IBM_BAD;
- r = t;
- LEAVE
- }
- Tracev((stderr, "inflate: trees ok\n"));
- if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
- {
- r = Z_MEM_ERROR;
- LEAVE
- }
- s->sub.decode.codes = c;
- }
- s->mode = IBM_CODES;
- case IBM_CODES:
- UPDATE
- if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
- return inflate_flush(s, z, r);
- r = Z_OK;
- inflate_codes_free(s->sub.decode.codes, z);
- LOAD
- Tracev((stderr, "inflate: codes end, %lu total out\n",
- z->total_out + (q >= s->read ? q - s->read :
- (s->end - s->read) + (q - s->window))));
- if (!s->last)
- {
- s->mode = IBM_TYPE;
- break;
- }
- s->mode = IBM_DRY;
- case IBM_DRY:
- FLUSH
- if (s->read != s->write)
- LEAVE
- s->mode = IBM_DONE;
- case IBM_DONE:
- r = Z_STREAM_END;
- LEAVE
- case IBM_BAD:
- r = Z_DATA_ERROR;
- LEAVE
- default:
- r = Z_STREAM_ERROR;
- LEAVE
- }
-}
-
-
-int inflate_blocks_free(inflate_blocks_statef *s, z_streamp z)
-{
- inflate_blocks_reset(s, z, Z_NULL);
- ZFREE(z, s->window);
- ZFREE(z, s->hufts);
- ZFREE(z, s);
- Tracev((stderr, "inflate: blocks freed\n"));
- return Z_OK;
-}
-
-
-
-// inftrees.c -- generate Huffman trees for efficient decoding
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-//
-
-
-
-extern const char inflate_copyright[] =
- " ";//inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
-// If you use the zlib library in a product, an acknowledgment is welcome
-// in the documentation of your product. If for some reason you cannot
-// include such an acknowledgment, I would appreciate that you keep this
-// copyright string in the executable of your product.
-
-
-
-int huft_build (
- uInt *, // code lengths in bits
- uInt, // number of codes
- uInt, // number of "simple" codes
- const uInt *, // list of base values for non-simple codes
- const uInt *, // list of extra bits for non-simple codes
- inflate_huft **,// result: starting table
- uInt *, // maximum lookup bits (returns actual)
- inflate_huft *, // space for trees
- uInt *, // hufts used in space
- uInt * ); // space for values
-
-// Tables for deflate from PKZIP's appnote.txt.
-const uInt cplens[31] = { // Copy lengths for literal codes 257..285
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- // see note #13 above about 258
-const uInt cplext[31] = { // Extra bits for literal codes 257..285
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; // 112==invalid
-const uInt cpdist[30] = { // Copy offsets for distance codes 0..29
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
- 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
- 8193, 12289, 16385, 24577};
-const uInt cpdext[30] = { // Extra bits for distance codes
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
- 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
- 12, 12, 13, 13};
-
-//
-// Huffman code decoding is performed using a multi-level table lookup.
-// The fastest way to decode is to simply build a lookup table whose
-// size is determined by the longest code. However, the time it takes
-// to build this table can also be a factor if the data being decoded
-// is not very long. The most common codes are necessarily the
-// shortest codes, so those codes dominate the decoding time, and hence
-// the speed. The idea is you can have a shorter table that decodes the
-// shorter, more probable codes, and then point to subsidiary tables for
-// the longer codes. The time it costs to decode the longer codes is
-// then traded against the time it takes to make longer tables.
-//
-// This results of this trade are in the variables lbits and dbits
-// below. lbits is the number of bits the first level table for literal/
-// length codes can decode in one step, and dbits is the same thing for
-// the distance codes. Subsequent tables are also less than or equal to
-// those sizes. These values may be adjusted either when all of the
-// codes are shorter than that, in which case the longest code length in
-// bits is used, or when the shortest code is *longer* than the requested
-// table size, in which case the length of the shortest code in bits is
-// used.
-//
-// There are two different values for the two tables, since they code a
-// different number of possibilities each. The literal/length table
-// codes 286 possible values, or in a flat code, a little over eight
-// bits. The distance table codes 30 possible values, or a little less
-// than five bits, flat. The optimum values for speed end up being
-// about one bit more than those, so lbits is 8+1 and dbits is 5+1.
-// The optimum values may differ though from machine to machine, and
-// possibly even between compilers. Your mileage may vary.
-//
-
-
-// If BMAX needs to be larger than 16, then h and x[] should be uLong.
-#define BMAX 15 // maximum bit length of any code
-
-int huft_build(
-uInt *b, // code lengths in bits (all assumed <= BMAX)
-uInt n, // number of codes (assumed <= 288)
-uInt s, // number of simple-valued codes (0..s-1)
-const uInt *d, // list of base values for non-simple codes
-const uInt *e, // list of extra bits for non-simple codes
-inflate_huft * *t, // result: starting table
-uInt *m, // maximum lookup bits, returns actual
-inflate_huft *hp, // space for trees
-uInt *hn, // hufts used in space
-uInt *v) // working area: values in order of bit length
-// Given a list of code lengths and a maximum table size, make a set of
-// tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
-// if the given code set is incomplete (the tables are still built in this
-// case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
-// lengths), or Z_MEM_ERROR if not enough memory.
-{
-
- uInt a; // counter for codes of length k
- uInt c[BMAX+1]; // bit length count table
- uInt f; // i repeats in table every f entries
- int g; // maximum code length
- int h; // table level
- register uInt i; // counter, current code
- register uInt j; // counter
- register int k; // number of bits in current code
- int l; // bits per table (returned in m)
- uInt mask; // (1 << w) - 1, to avoid cc -O bug on HP
- register uInt *p; // pointer into c[], b[], or v[]
- inflate_huft *q; // points to current table
- struct inflate_huft_s r; // table entry for structure assignment
- inflate_huft *u[BMAX]; // table stack
- register int w; // bits before this table == (l * h)
- uInt x[BMAX+1]; // bit offsets, then code stack
- uInt *xp; // pointer into x
- int y; // number of dummy codes added
- uInt z; // number of entries in current table
-
-
- // Generate counts for each bit length
- p = c;
-#define C0 *p++ = 0;
-#define C2 C0 C0 C0 C0
-#define C4 C2 C2 C2 C2
- C4; p; // clear c[]--assume BMAX+1 is 16
- p = b; i = n;
- do {
- c[*p++]++; // assume all entries <= BMAX
- } while (--i);
- if (c[0] == n) // null input--all zero length codes
- {
- *t = (inflate_huft *)Z_NULL;
- *m = 0;
- return Z_OK;
- }
-
-
- // Find minimum and maximum length, bound *m by those
- l = *m;
- for (j = 1; j <= BMAX; j++)
- if (c[j])
- break;
- k = j; // minimum code length
- if ((uInt)l < j)
- l = j;
- for (i = BMAX; i; i--)
- if (c[i])
- break;
- g = i; // maximum code length
- if ((uInt)l > i)
- l = i;
- *m = l;
-
-
- // Adjust last length count to fill out codes, if needed
- for (y = 1 << j; j < i; j++, y <<= 1)
- if ((y -= c[j]) < 0)
- return Z_DATA_ERROR;
- if ((y -= c[i]) < 0)
- return Z_DATA_ERROR;
- c[i] += y;
-
-
- // Generate starting offsets into the value table for each length
- x[1] = j = 0;
- p = c + 1; xp = x + 2;
- while (--i) { // note that i == g from above
- *xp++ = (j += *p++);
- }
-
-
- // Make a table of values in order of bit lengths
- p = b; i = 0;
- do {
- if ((j = *p++) != 0)
- v[x[j]++] = i;
- } while (++i < n);
- n = x[g]; // set n to length of v
-
-
- // Generate the Huffman codes and for each, make the table entries
- x[0] = i = 0; // first Huffman code is zero
- p = v; // grab values in bit order
- h = -1; // no tables yet--level -1
- w = -l; // bits decoded == (l * h)
- u[0] = (inflate_huft *)Z_NULL; // just to keep compilers happy
- q = (inflate_huft *)Z_NULL; // ditto
- z = 0; // ditto
-
- // go through the bit lengths (k already is bits in shortest code)
- for (; k <= g; k++)
- {
- a = c[k];
- while (a--)
- {
- // here i is the Huffman code of length k bits for value *p
- // make tables up to required level
- while (k > w + l)
- {
- h++;
- w += l; // previous table always l bits
-
- // compute minimum size table less than or equal to l bits
- z = g - w;
- z = z > (uInt)l ? l : z; // table size upper limit
- if ((f = 1 << (j = k - w)) > a + 1) // try a k-w bit table
- { // too few codes for k-w bit table
- f -= a + 1; // deduct codes from patterns left
- xp = c + k;
- if (j < z)
- while (++j < z) // try smaller tables up to z bits
- {
- if ((f <<= 1) <= *++xp)
- break; // enough codes to use up j bits
- f -= *xp; // else deduct codes from patterns
- }
- }
- z = 1 << j; // table entries for j-bit table
-
- // allocate new table
- if (*hn + z > MANY) // (note: doesn't matter for fixed)
- return Z_MEM_ERROR; // not enough memory
- u[h] = q = hp + *hn;
- *hn += z;
-
- // connect to last table, if there is one
- if (h)
- {
- x[h] = i; // save pattern for backing up
- r.bits = (Byte)l; // bits to dump before this table
- r.exop = (Byte)j; // bits in this table
- j = i >> (w - l);
- r.base = (uInt)(q - u[h-1] - j); // offset to this table
- u[h-1][j] = r; // connect to last table
- }
- else
- *t = q; // first table is returned result
- }
-
- // set up table entry in r
- r.bits = (Byte)(k - w);
- if (p >= v + n)
- r.exop = 128 + 64; // out of values--invalid code
- else if (*p < s)
- {
- r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); // 256 is end-of-block
- r.base = *p++; // simple code is just the value
- }
- else
- {
- r.exop = (Byte)(e[*p - s] + 16 + 64);// non-simple--look up in lists
- r.base = d[*p++ - s];
- }
-
- // fill code-like entries with r
- f = 1 << (k - w);
- for (j = i >> w; j < z; j += f)
- q[j] = r;
-
- // backwards increment the k-bit code i
- for (j = 1 << (k - 1); i & j; j >>= 1)
- i ^= j;
- i ^= j;
-
- // backup over finished tables
- mask = (1 << w) - 1; // needed on HP, cc -O bug
- while ((i & mask) != x[h])
- {
- h--; // don't need to update q
- w -= l;
- mask = (1 << w) - 1;
- }
- }
- }
-
-
- // Return Z_BUF_ERROR if we were given an incomplete table
- return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
-}
-
-
-int inflate_trees_bits(
-uInt *c, // 19 code lengths
-uInt *bb, // bits tree desired/actual depth
-inflate_huft * *tb, // bits tree result
-inflate_huft *hp, // space for trees
-z_streamp z) // for messages
-{
- int r;
- uInt hn = 0; // hufts used in space
- uInt *v; // work area for huft_build
-
- if ((v = (uInt*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
- r = huft_build(c, 19, 19, (uInt*)Z_NULL, (uInt*)Z_NULL,
- tb, bb, hp, &hn, v);
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed dynamic bit lengths tree";
- else if (r == Z_BUF_ERROR || *bb == 0)
- {
- z->msg = (char*)"incomplete dynamic bit lengths tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
-}
-
-
-int inflate_trees_dynamic(
-uInt nl, // number of literal/length codes
-uInt nd, // number of distance codes
-uInt *c, // that many (total) code lengths
-uInt *bl, // literal desired/actual bit depth
-uInt *bd, // distance desired/actual bit depth
-inflate_huft * *tl, // literal/length tree result
-inflate_huft * *td, // distance tree result
-inflate_huft *hp, // space for trees
-z_streamp z) // for messages
-{
- int r;
- uInt hn = 0; // hufts used in space
- uInt *v; // work area for huft_build
-
- // allocate work area
- if ((v = (uInt*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL)
- return Z_MEM_ERROR;
-
- // build literal/length tree
- r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
- if (r != Z_OK || *bl == 0)
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed literal/length tree";
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"incomplete literal/length tree";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
- }
-
- // build distance tree
- r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
- if (r != Z_OK || (*bd == 0 && nl > 257))
- {
- if (r == Z_DATA_ERROR)
- z->msg = (char*)"oversubscribed distance tree";
- else if (r == Z_BUF_ERROR) {
- z->msg = (char*)"incomplete distance tree";
- r = Z_DATA_ERROR;
- }
- else if (r != Z_MEM_ERROR)
- {
- z->msg = (char*)"empty distance tree with lengths";
- r = Z_DATA_ERROR;
- }
- ZFREE(z, v);
- return r;
- }
-
- // done
- ZFREE(z, v);
- return Z_OK;
-}
-
-
-
-
-
-int inflate_trees_fixed(
-uInt *bl, // literal desired/actual bit depth
-uInt *bd, // distance desired/actual bit depth
-const inflate_huft * * tl, // literal/length tree result
-const inflate_huft * *td, // distance tree result
-z_streamp ) // for memory allocation
-{
- *bl = fixed_bl;
- *bd = fixed_bd;
- *tl = fixed_tl;
- *td = fixed_td;
- return Z_OK;
-}
-
-
-// inffast.c -- process literals and length/distance pairs fast
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-//
-
-
-//struct inflate_codes_state {int dummy;}; // for buggy compilers
-
-
-// macros for bit input with no checking and for returning unused bytes
-#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
-#define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
-
-// Called with number of bytes left to write in window at least 258
-// (the maximum string length) and number of input bytes available
-// at least ten. The ten bytes are six bytes for the longest length/
-// distance pair plus four bytes for overloading the bit buffer.
-
-int inflate_fast(
-uInt bl, uInt bd,
-const inflate_huft *tl,
-const inflate_huft *td, // need separate declaration for Borland C++
-inflate_blocks_statef *s,
-z_streamp z)
-{
- const inflate_huft *t; // temporary pointer
- uInt e; // extra bits or operation
- uLong b; // bit buffer
- uInt k; // bits in bit buffer
- Byte *p; // input data pointer
- uInt n; // bytes available there
- Byte *q; // output window write pointer
- uInt m; // bytes to end of window or read pointer
- uInt ml; // mask for literal/length tree
- uInt md; // mask for distance tree
- uInt c; // bytes to copy
- uInt d; // distance back to copy from
- Byte *r; // copy source pointer
-
- // load input, output, bit values
- LOAD
-
- // initialize masks
- ml = inflate_mask[bl];
- md = inflate_mask[bd];
-
- // do until not enough input or output space for fast loop
- do { // assume called with m >= 258 && n >= 10
- // get literal/length code
- GRABBITS(20) // max bits for literal/length code
- if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
- {
- DUMPBITS(t->bits)
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: * literal '%c'\n" :
- "inflate: * literal 0x%02x\n", t->base));
- *q++ = (Byte)t->base;
- m--;
- continue;
- }
- for (;;) {
- DUMPBITS(t->bits)
- if (e & 16)
- {
- // get extra bits for length
- e &= 15;
- c = t->base + ((uInt)b & inflate_mask[e]);
- DUMPBITS(e)
- Tracevv((stderr, "inflate: * length %u\n", c));
-
- // decode distance base of block to copy
- GRABBITS(15); // max bits for distance code
- e = (t = td + ((uInt)b & md))->exop;
- for (;;) {
- DUMPBITS(t->bits)
- if (e & 16)
- {
- // get extra bits to add to distance base
- e &= 15;
- GRABBITS(e) // get extra bits (up to 13)
- d = t->base + ((uInt)b & inflate_mask[e]);
- DUMPBITS(e)
- Tracevv((stderr, "inflate: * distance %u\n", d));
-
- // do the copy
- m -= c;
- if ((uInt)(q - s->window) >= d) // offset before dest
- { // just copy
- r = q - d;
- *q++ = *r++; c--; // minimum count is three,
- *q++ = *r++; c--; // so unroll loop a little
- }
- else // else offset after destination
- {
- e = d - (uInt)(q - s->window); // bytes from offset to end
- r = s->end - e; // pointer to offset
- if (c > e) // if source crosses,
- {
- c -= e; // copy to end of window
- do {
- *q++ = *r++;
- } while (--e);
- r = s->window; // copy rest from start of window
- }
- }
- do { // copy all or what's left
- *q++ = *r++;
- } while (--c);
- break;
- }
- else if ((e & 64) == 0)
- {
- t += t->base;
- e = (t += ((uInt)b & inflate_mask[e]))->exop;
- }
- else
- {
- z->msg = (char*)"invalid distance code";
- UNGRAB
- UPDATE
- return Z_DATA_ERROR;
- }
- };
- break;
- }
- if ((e & 64) == 0)
- {
- t += t->base;
- if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0)
- {
- DUMPBITS(t->bits)
- Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
- "inflate: * literal '%c'\n" :
- "inflate: * literal 0x%02x\n", t->base));
- *q++ = (Byte)t->base;
- m--;
- break;
- }
- }
- else if (e & 32)
- {
- Tracevv((stderr, "inflate: * end of block\n"));
- UNGRAB
- UPDATE
- return Z_STREAM_END;
- }
- else
- {
- z->msg = (char*)"invalid literal/length code";
- UNGRAB
- UPDATE
- return Z_DATA_ERROR;
- }
- };
- } while (m >= 258 && n >= 10);
-
- // not enough input or output--restore pointers and return
- UNGRAB
- UPDATE
- return Z_OK;
-}
-
-
-
-
-
-
-// crc32.c -- compute the CRC-32 of a data stream
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-
-// @(#) $Id$
-
-
-
-
-
-
-// Table of CRC-32's of all single-byte values (made by make_crc_table)
-const uLong crc_table[256] = {
- 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
- 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
- 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
- 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
- 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
- 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
- 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
- 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
- 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
- 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
- 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
- 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
- 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
- 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
- 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
- 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
- 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
- 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
- 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
- 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
- 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
- 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
- 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
- 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
- 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
- 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
- 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
- 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
- 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
- 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
- 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
- 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
- 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
- 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
- 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
- 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
- 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
- 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
- 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
- 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
- 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
- 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
- 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
- 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
- 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
- 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
- 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
- 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
- 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
- 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
- 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
- 0x2d02ef8dL
-};
-
-const uLong * get_crc_table()
-{ return (const uLong *)crc_table;
-}
-
-#define CRC_DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8);
-#define CRC_DO2(buf) CRC_DO1(buf); CRC_DO1(buf);
-#define CRC_DO4(buf) CRC_DO2(buf); CRC_DO2(buf);
-#define CRC_DO8(buf) CRC_DO4(buf); CRC_DO4(buf);
-
-uLong ucrc32(uLong crc, const Byte *buf, uInt len)
-{ if (buf == Z_NULL) return 0L;
- crc = crc ^ 0xffffffffL;
- while (len >= 8) {CRC_DO8(buf); len -= 8;}
- if (len) do {CRC_DO1(buf);} while (--len);
- return crc ^ 0xffffffffL;
-}
-
-
-// adler32.c -- compute the Adler-32 checksum of a data stream
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-
-// @(#) $Id$
-
-
-#define BASE 65521L // largest prime smaller than 65536
-#define NMAX 5552
-// NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1
-
-#define AD_DO1(buf,i) {s1 += buf[i]; s2 += s1;}
-#define AD_DO2(buf,i) AD_DO1(buf,i); AD_DO1(buf,i+1);
-#define AD_DO4(buf,i) AD_DO2(buf,i); AD_DO2(buf,i+2);
-#define AD_DO8(buf,i) AD_DO4(buf,i); AD_DO4(buf,i+4);
-#define AD_DO16(buf) AD_DO8(buf,0); AD_DO8(buf,8);
-
-// =========================================================================
-uLong adler32(uLong adler, const Byte *buf, uInt len)
-{
- unsigned long s1 = adler & 0xffff;
- unsigned long s2 = (adler >> 16) & 0xffff;
- int k;
-
- if (buf == Z_NULL) return 1L;
-
- while (len > 0) {
- k = len < NMAX ? len : NMAX;
- len -= k;
- while (k >= 16) {
- AD_DO16(buf);
- buf += 16;
- k -= 16;
- }
- if (k != 0) do {
- s1 += *buf++;
- s2 += s1;
- } while (--k);
- s1 %= BASE;
- s2 %= BASE;
- }
- return (s2 << 16) | s1;
-}
-
-
-
-// zutil.c -- target dependent utility functions for the compression library
-// Copyright (C) 1995-1998 Jean-loup Gailly.
-// For conditions of distribution and use, see copyright notice in zlib.h
-// @(#) $Id$
-
-
-
-
-
-
-const char * zlibVersion()
-{
- return ZLIB_VERSION;
-}
-
-// exported to allow conversion of error code to string for compress() and
-// uncompress()
-const char * zError(int err)
-{ return ERR_MSG(err);
-}
-
-
-
-
-voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
-{
- if (opaque) items += size - size; // make compiler happy
- return (voidpf)calloc(items, size);
-}
-
-void zcfree (voidpf opaque, voidpf ptr)
-{
- zfree(ptr);
- if (opaque) return; // make compiler happy
-}
-
-
-
-// inflate.c -- zlib interface to inflate modules
-// Copyright (C) 1995-1998 Mark Adler
-// For conditions of distribution and use, see copyright notice in zlib.h
-
-//struct inflate_blocks_state {int dummy;}; // for buggy compilers
-
-typedef enum {
- IM_METHOD, // waiting for method byte
- IM_FLAG, // waiting for flag byte
- IM_DICT4, // four dictionary check bytes to go
- IM_DICT3, // three dictionary check bytes to go
- IM_DICT2, // two dictionary check bytes to go
- IM_DICT1, // one dictionary check byte to go
- IM_DICT0, // waiting for inflateSetDictionary
- IM_BLOCKS, // decompressing blocks
- IM_CHECK4, // four check bytes to go
- IM_CHECK3, // three check bytes to go
- IM_CHECK2, // two check bytes to go
- IM_CHECK1, // one check byte to go
- IM_DONE, // finished check, done
- IM_BAD} // got an error--stay here
-inflate_mode;
-
-// inflate private state
-struct internal_state {
-
- // mode
- inflate_mode mode; // current inflate mode
-
- // mode dependent information
- union {
- uInt method; // if IM_FLAGS, method byte
- struct {
- uLong was; // computed check value
- uLong need; // stream check value
- } check; // if CHECK, check values to compare
- uInt marker; // if IM_BAD, inflateSync's marker bytes count
- } sub; // submode
-
- // mode independent information
- int nowrap; // flag for no wrapper
- uInt wbits; // log2(window size) (8..15, defaults to 15)
- inflate_blocks_statef
- *blocks; // current inflate_blocks state
-
-};
-
-int inflateReset(z_streamp z)
-{
- if (z == Z_NULL || z->state == Z_NULL)
- return Z_STREAM_ERROR;
- z->total_in = z->total_out = 0;
- z->msg = Z_NULL;
- z->state->mode = z->state->nowrap ? IM_BLOCKS : IM_METHOD;
- inflate_blocks_reset(z->state->blocks, z, Z_NULL);
- Tracev((stderr, "inflate: reset\n"));
- return Z_OK;
-}
-
-int inflateEnd(z_streamp z)
-{
- if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
- return Z_STREAM_ERROR;
- if (z->state->blocks != Z_NULL)
- inflate_blocks_free(z->state->blocks, z);
- ZFREE(z, z->state);
- z->state = Z_NULL;
- Tracev((stderr, "inflate: end\n"));
- return Z_OK;
-}
-
-
-int inflateInit2(z_streamp z)
-{ const char *version = ZLIB_VERSION; int stream_size = sizeof(z_stream);
- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || stream_size != sizeof(z_stream)) return Z_VERSION_ERROR;
-
- int w = -15; // MAX_WBITS: 32K LZ77 window.
- // Warning: reducing MAX_WBITS makes minigzip unable to extract .gz files created by gzip.
- // The memory requirements for deflate are (in bytes):
- // (1 << (windowBits+2)) + (1 << (memLevel+9))
- // that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
- // plus a few kilobytes for small objects. For example, if you want to reduce
- // the default memory requirements from 256K to 128K, compile with
- // make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
- // Of course this will generally degrade compression (there's no free lunch).
- //
- // The memory requirements for inflate are (in bytes) 1 << windowBits
- // that is, 32K for windowBits=15 (default value) plus a few kilobytes
- // for small objects.
-
- // initialize state
- if (z == Z_NULL) return Z_STREAM_ERROR;
- z->msg = Z_NULL;
- if (z->zalloc == Z_NULL)
- {
- z->zalloc = zcalloc;
- z->opaque = (voidpf)0;
- }
- if (z->zfree == Z_NULL) z->zfree = zcfree;
- if ((z->state = (struct internal_state *)
- ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
- return Z_MEM_ERROR;
- z->state->blocks = Z_NULL;
-
- // handle undocumented nowrap option (no zlib header or check)
- z->state->nowrap = 0;
- if (w < 0)
- {
- w = - w;
- z->state->nowrap = 1;
- }
-
- // set window size
- if (w < 8 || w > 15)
- {
- inflateEnd(z);
- return Z_STREAM_ERROR;
- }
- z->state->wbits = (uInt)w;
-
- // create inflate_blocks state
- if ((z->state->blocks =
- inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
- == Z_NULL)
- {
- inflateEnd(z);
- return Z_MEM_ERROR;
- }
- Tracev((stderr, "inflate: allocated\n"));
-
- // reset state
- inflateReset(z);
- return Z_OK;
-}
-
-
-
-#define IM_NEEDBYTE {if(z->avail_in==0)return r;r=f;}
-#define IM_NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
-
-int inflate(z_streamp z, int f)
-{
- int r;
- uInt b;
-
- if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
- return Z_STREAM_ERROR;
- f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
- r = Z_BUF_ERROR;
- for (;;) switch (z->state->mode)
- {
- case IM_METHOD:
- IM_NEEDBYTE
- if (((z->state->sub.method = IM_NEXTBYTE) & 0xf) != Z_DEFLATED)
- {
- z->state->mode = IM_BAD;
- z->msg = (char*)"unknown compression method";
- z->state->sub.marker = 5; // can't try inflateSync
- break;
- }
- if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
- {
- z->state->mode = IM_BAD;
- z->msg = (char*)"invalid window size";
- z->state->sub.marker = 5; // can't try inflateSync
- break;
- }
- z->state->mode = IM_FLAG;
- case IM_FLAG:
- IM_NEEDBYTE
- b = IM_NEXTBYTE;
- if (((z->state->sub.method << 8) + b) % 31)
- {
- z->state->mode = IM_BAD;
- z->msg = (char*)"incorrect header check";
- z->state->sub.marker = 5; // can't try inflateSync
- break;
- }
- Tracev((stderr, "inflate: zlib header ok\n"));
- if (!(b & PRESET_DICT))
- {
- z->state->mode = IM_BLOCKS;
- break;
- }
- z->state->mode = IM_DICT4;
- case IM_DICT4:
- IM_NEEDBYTE
- z->state->sub.check.need = (uLong)IM_NEXTBYTE << 24;
- z->state->mode = IM_DICT3;
- case IM_DICT3:
- IM_NEEDBYTE
- z->state->sub.check.need += (uLong)IM_NEXTBYTE << 16;
- z->state->mode = IM_DICT2;
- case IM_DICT2:
- IM_NEEDBYTE
- z->state->sub.check.need += (uLong)IM_NEXTBYTE << 8;
- z->state->mode = IM_DICT1;
- case IM_DICT1:
- IM_NEEDBYTE; r;
- z->state->sub.check.need += (uLong)IM_NEXTBYTE;
- z->adler = z->state->sub.check.need;
- z->state->mode = IM_DICT0;
- return Z_NEED_DICT;
- case IM_DICT0:
- z->state->mode = IM_BAD;
- z->msg = (char*)"need dictionary";
- z->state->sub.marker = 0; // can try inflateSync
- return Z_STREAM_ERROR;
- case IM_BLOCKS:
- r = inflate_blocks(z->state->blocks, z, r);
- if (r == Z_DATA_ERROR)
- {
- z->state->mode = IM_BAD;
- z->state->sub.marker = 0; // can try inflateSync
- break;
- }
- if (r == Z_OK)
- r = f;
- if (r != Z_STREAM_END)
- return r;
- r = f;
- inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
- if (z->state->nowrap)
- {
- z->state->mode = IM_DONE;
- break;
- }
- z->state->mode = IM_CHECK4;
- case IM_CHECK4:
- IM_NEEDBYTE
- z->state->sub.check.need = (uLong)IM_NEXTBYTE << 24;
- z->state->mode = IM_CHECK3;
- case IM_CHECK3:
- IM_NEEDBYTE
- z->state->sub.check.need += (uLong)IM_NEXTBYTE << 16;
- z->state->mode = IM_CHECK2;
- case IM_CHECK2:
- IM_NEEDBYTE
- z->state->sub.check.need += (uLong)IM_NEXTBYTE << 8;
- z->state->mode = IM_CHECK1;
- case IM_CHECK1:
- IM_NEEDBYTE
- z->state->sub.check.need += (uLong)IM_NEXTBYTE;
-
- if (z->state->sub.check.was != z->state->sub.check.need)
- {
- z->state->mode = IM_BAD;
- z->msg = (char*)"incorrect data check";
- z->state->sub.marker = 5; // can't try inflateSync
- break;
- }
- Tracev((stderr, "inflate: zlib check ok\n"));
- z->state->mode = IM_DONE;
- case IM_DONE:
- return Z_STREAM_END;
- case IM_BAD:
- return Z_DATA_ERROR;
- default:
- return Z_STREAM_ERROR;
- }
-}
-
-
-
-#ifdef _UNICODE
-
-static int GetAnsiFileName(LPCWSTR name, char * buf, int nBufSize)
-{
- memset(buf, 0, nBufSize);
-
- int n = WideCharToMultiByte(CP_ACP, // code page
- 0, // performance and mapping flags
- name, // wide-character string
- -1, // number of chars in string
- buf, // buffer for new string
- nBufSize, // size of buffer
- NULL, // default for unmappable chars
- NULL); // set when default char used
- return n;
-}
-
-static int GetUnicodeFileName(const char * name, LPWSTR buf, int nBufSize)
-{
- memset(buf, 0, nBufSize*sizeof(TCHAR));
-
- int n = MultiByteToWideChar(CP_ACP, // code page
- 0, // character-type options
- name, // string to map
- -1, // number of bytes in string
- buf, // wide-character buffer
- nBufSize); // size of buffer
-
- return n;
-}
-
-#endif
-
-
-// unzip.c -- IO on .zip files using zlib
-// Version 0.15 beta, Mar 19th, 1998,
-// Read unzip.h for more info
-
-
-
-
-#define UNZ_BUFSIZE (16384)
-#define UNZ_MAXFILENAMEINZIP (256)
-#define SIZECENTRALDIRITEM (0x2e)
-#define SIZEZIPLOCALHEADER (0x1e)
-
-
-
-
-const char unz_copyright[] = " ";//unzip 0.15 Copyright 1998 Gilles Vollant ";
-
-// unz_file_info_interntal contain internal info about a file in zipfile
-typedef struct unz_file_info_internal_s
-{
- uLong offset_curfile;// relative offset of local header 4 bytes
-} unz_file_info_internal;
-
-
-typedef struct
-{ bool is_handle; // either a handle or memory
- bool canseek;
- // for handles:
- HANDLE h; bool herr; unsigned long initial_offset;
- // for memory:
- void *buf; unsigned int len,pos; // if it's a memory block
-} LUFILE;
-
-
-LUFILE *lufopen(void *z,unsigned int len,DWORD flags,ZRESULT *err)
-{
- if (flags!=ZIP_HANDLE && flags!=ZIP_FILENAME && flags!=ZIP_MEMORY)
- {
- *err=ZR_ARGS;
- return NULL;
- }
- //
- HANDLE h=0; bool canseek=false; *err=ZR_OK;
- if (flags==ZIP_HANDLE||flags==ZIP_FILENAME)
- {
- if (flags==ZIP_HANDLE)
- {
- HANDLE hf = z;
-
- BOOL res = DuplicateHandle(GetCurrentProcess(),hf,GetCurrentProcess(),&h,0,FALSE,DUPLICATE_SAME_ACCESS);
-
- if (!res)
- {
- *err=ZR_NODUPH;
- return NULL;
- }
- }
- else
- {
- h = CreateFile((const TCHAR *)z, GENERIC_READ, FILE_SHARE_READ,
- NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-
- if (h == INVALID_HANDLE_VALUE)
- {
- *err = ZR_NOFILE;
- return NULL;
- }
- }
- DWORD type = GetFileType(h);
- canseek = (type==FILE_TYPE_DISK);
- }
- LUFILE *lf = new LUFILE;
- if (flags==ZIP_HANDLE||flags==ZIP_FILENAME)
- {
- lf->is_handle=true;
- lf->canseek=canseek;
- lf->h=h; lf->herr=false;
- lf->initial_offset=0;
- if (canseek)
- lf->initial_offset = SetFilePointer(h,0,NULL,FILE_CURRENT);
- }
- else
- {
- lf->is_handle=false;
- lf->canseek=true;
- lf->buf=z;
- lf->len=len;
- lf->pos=0;
- lf->initial_offset=0;
- }
- *err=ZR_OK;
- return lf;
-}
-
-
-int lufclose(LUFILE *stream)
-{ if (stream==NULL) return EOF;
- if (stream->is_handle) CloseHandle(stream->h);
- delete stream;
- return 0;
-}
-
-int luferror(LUFILE *stream)
-{ if (stream->is_handle && stream->herr) return 1;
- else return 0;
-}
-
-long int luftell(LUFILE *stream)
-{ if (stream->is_handle && stream->canseek) return SetFilePointer(stream->h,0,NULL,FILE_CURRENT)-stream->initial_offset;
- else if (stream->is_handle) return 0;
- else return stream->pos;
-}
-
-int lufseek(LUFILE *stream, long offset, int whence)
-{ if (stream->is_handle && stream->canseek)
- { if (whence==SEEK_SET) SetFilePointer(stream->h,stream->initial_offset+offset,0,FILE_BEGIN);
- else if (whence==SEEK_CUR) SetFilePointer(stream->h,offset,NULL,FILE_CURRENT);
- else if (whence==SEEK_END) SetFilePointer(stream->h,offset,NULL,FILE_END);
- else return 19; // EINVAL
- return 0;
- }
- else if (stream->is_handle) return 29; // ESPIPE
- else
- { if (whence==SEEK_SET) stream->pos=offset;
- else if (whence==SEEK_CUR) stream->pos+=offset;
- else if (whence==SEEK_END) stream->pos=stream->len+offset;
- return 0;
- }
-}
-
-
-size_t lufread(void *ptr,size_t size,size_t n,LUFILE *stream)
-{ unsigned int toread = (unsigned int)(size*n);
- if (stream->is_handle)
- { DWORD red; BOOL res = ReadFile(stream->h,ptr,toread,&red,NULL);
- if (!res) stream->herr=true;
- return red/size;
- }
- if (stream->pos+toread > stream->len) toread = stream->len-stream->pos;
- memcpy(ptr, (char*)stream->buf + stream->pos, toread); DWORD red = toread;
- stream->pos += red;
- return red/size;
-}
-
-
-
-
-// file_in_zip_read_info_s contain internal information about a file in zipfile,
-// when reading and decompress it
-typedef struct
-{
- char *read_buffer; // internal buffer for compressed data
- z_stream stream; // zLib stream structure for inflate
-
- uLong pos_in_zipfile; // position in byte on the zipfile, for fseek
- uLong stream_initialised; // flag set if stream structure is initialised
-
- uLong offset_local_extrafield;// offset of the local extra field
- uInt size_local_extrafield;// size of the local extra field
- uLong pos_local_extrafield; // position in the local extra field in read
-
- uLong crc32; // crc32 of all data uncompressed
- uLong crc32_wait; // crc32 we must obtain after decompress all
- uLong rest_read_compressed; // number of byte to be decompressed
- uLong rest_read_uncompressed;//number of byte to be obtained after decomp
- LUFILE* file; // io structore of the zipfile
- uLong compression_method; // compression method (0==store)
- uLong byte_before_the_zipfile;// byte before the zipfile, (>0 for sfx)
-} file_in_zip_read_info_s;
-
-
-// unz_s contain internal information about the zipfile
-typedef struct
-{
- LUFILE* file; // io structore of the zipfile
- unz_global_info gi; // public global information
- uLong byte_before_the_zipfile;// byte before the zipfile, (>0 for sfx)
- uLong num_file; // number of the current file in the zipfile
- uLong pos_in_central_dir; // pos of the current file in the central dir
- uLong current_file_ok; // flag about the usability of the current file
- uLong central_pos; // position of the beginning of the central dir
-
- uLong size_central_dir; // size of the central directory
- uLong offset_central_dir; // offset of start of central directory with respect to the starting disk number
-
- unz_file_info cur_file_info; // public info about the current file in zip
- unz_file_info_internal cur_file_info_internal; // private info about it
- file_in_zip_read_info_s* pfile_in_zip_read; // structure about the current file if we are decompressing it
-} unz_s, *unzFile;
-
-
-int unzStringFileNameCompare (const char* fileName1,const char* fileName2,int iCaseSensitivity);
-// Compare two filename (fileName1,fileName2).
-
-z_off_t unztell (unzFile file);
-// Give the current position in uncompressed data
-
-int unzeof (unzFile file);
-// return 1 if the end of file was reached, 0 elsewhere
-
-int unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len);
-// Read extra field from the current file (opened by unzOpenCurrentFile)
-// This is the local-header version of the extra field (sometimes, there is
-// more info in the local-header version than in the central-header)
-//
-// if buf==NULL, it return the size of the local extra field
-//
-// if buf!=NULL, len is the size of the buffer, the extra header is copied in
-// buf.
-// the return value is the number of bytes copied in buf, or (if <0)
-// the error code
-
-
-
-// ===========================================================================
-// Read a byte from a gz_stream; update next_in and avail_in. Return EOF
-// for end of file.
-// IN assertion: the stream s has been sucessfully opened for reading.
-
-int unzlocal_getByte(LUFILE *fin,int *pi)
-{ unsigned char c;
- int err = (int)lufread(&c, 1, 1, fin);
- if (err==1)
- { *pi = (int)c;
- return UNZ_OK;
- }
- else
- { if (luferror(fin)) return UNZ_ERRNO;
- else return UNZ_EOF;
- }
-}
-
-
-// ===========================================================================
-// Reads a long in LSB order from the given gz_stream. Sets
-int unzlocal_getShort (LUFILE *fin,uLong *pX)
-{
- uLong x ;
- int i;
- int err;
-
- err = unzlocal_getByte(fin,&i);
- x = (uLong)i;
-
- if (err==UNZ_OK)
- err = unzlocal_getByte(fin,&i);
- x += ((uLong)i)<<8;
-
- if (err==UNZ_OK)
- *pX = x;
- else
- *pX = 0;
- return err;
-}
-
-int unzlocal_getLong (LUFILE *fin,uLong *pX)
-{
- uLong x ;
- int i;
- int err;
-
- err = unzlocal_getByte(fin,&i);
- x = (uLong)i;
-
- if (err==UNZ_OK)
- err = unzlocal_getByte(fin,&i);
- x += ((uLong)i)<<8;
-
- if (err==UNZ_OK)
- err = unzlocal_getByte(fin,&i);
- x += ((uLong)i)<<16;
-
- if (err==UNZ_OK)
- err = unzlocal_getByte(fin,&i);
- x += ((uLong)i)<<24;
-
- if (err==UNZ_OK)
- *pX = x;
- else
- *pX = 0;
- return err;
-}
-
-
-// My own strcmpi / strcasecmp
-int strcmpcasenosensitive_internal (const char* fileName1,const char *fileName2)
-{
- for (;;)
- {
- char c1=*(fileName1++);
- char c2=*(fileName2++);
- if ((c1>='a') && (c1<='z'))
- c1 -= (char)0x20;
- if ((c2>='a') && (c2<='z'))
- c2 -= (char)0x20;
- if (c1=='\0')
- return ((c2=='\0') ? 0 : -1);
- if (c2=='\0')
- return 1;
- if (c1<c2)
- return -1;
- if (c1>c2)
- return 1;
- }
-}
-
-
-
-
-//
-// Compare two filename (fileName1,fileName2).
-// If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
-// If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp)
-//
-int unzStringFileNameCompare (const char*fileName1,const char*fileName2,int iCaseSensitivity)
-{ if (iCaseSensitivity==1) return strcmp(fileName1,fileName2);
- else return strcmpcasenosensitive_internal(fileName1,fileName2);
-}
-
-#define BUFREADCOMMENT (0x400)
-
-
-// Locate the Central directory of a zipfile (at the end, just before
-// the global comment)
-uLong unzlocal_SearchCentralDir(LUFILE *fin)
-{ if (lufseek(fin,0,SEEK_END) != 0) return 0;
- uLong uSizeFile = luftell(fin);
-
- uLong uMaxBack=0xffff; // maximum size of global comment
- if (uMaxBack>uSizeFile) uMaxBack = uSizeFile;
-
- unsigned char *buf = (unsigned char*)zmalloc(BUFREADCOMMENT+4);
- if (buf==NULL) return 0;
- uLong uPosFound=0;
-
- uLong uBackRead = 4;
- while (uBackRead<uMaxBack)
- { uLong uReadSize,uReadPos ;
- int i;
- if (uBackRead+BUFREADCOMMENT>uMaxBack) uBackRead = uMaxBack;
- else uBackRead+=BUFREADCOMMENT;
- uReadPos = uSizeFile-uBackRead ;
- uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
- if (lufseek(fin,uReadPos,SEEK_SET)!=0) break;
- if (lufread(buf,(uInt)uReadSize,1,fin)!=1) break;
- for (i=(int)uReadSize-3; (i--)>0;)
- { if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
- { uPosFound = uReadPos+i; break;
- }
- }
- if (uPosFound!=0) break;
- }
- if (buf) zfree(buf);
- return uPosFound;
-}
-
-
-int unzGoToFirstFile (unzFile file);
-int unzCloseCurrentFile (unzFile file);
-
-// Open a Zip file.
-// If the zipfile cannot be opened (file don't exist or in not valid), return NULL.
-// Otherwise, the return value is a unzFile Handle, usable with other unzip functions
-unzFile unzOpenInternal(LUFILE *fin)
-{
- zopenerror = ZR_OK; //+++1.2
- if (fin==NULL) { zopenerror = ZR_ARGS; return NULL; } //+++1.2
- if (unz_copyright[0]!=' ') {lufclose(fin); zopenerror = ZR_CORRUPT; return NULL; } //+++1.2
-
- int err=UNZ_OK;
- unz_s us;
- uLong central_pos,uL;
- central_pos = unzlocal_SearchCentralDir(fin);
- if (central_pos==0) err=UNZ_ERRNO;
- if (lufseek(fin,central_pos,SEEK_SET)!=0) err=UNZ_ERRNO;
- // the signature, already checked
- if (unzlocal_getLong(fin,&uL)!=UNZ_OK) err=UNZ_ERRNO;
- // number of this disk
- uLong number_disk; // number of the current dist, used for spanning ZIP, unsupported, always 0
- if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) err=UNZ_ERRNO;
- // number of the disk with the start of the central directory
- uLong number_disk_with_CD; // number the the disk with central dir, used for spaning ZIP, unsupported, always 0
- if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) err=UNZ_ERRNO;
- // total number of entries in the central dir on this disk
- if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) err=UNZ_ERRNO;
- // total number of entries in the central dir
- uLong number_entry_CD; // total number of entries in the central dir (same than number_entry on nospan)
- if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) err=UNZ_ERRNO;
- if ((number_entry_CD!=us.gi.number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) err=UNZ_BADZIPFILE;
- // size of the central directory
- if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) err=UNZ_ERRNO;
- // offset of start of central directory with respect to the starting disk number
- if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) err=UNZ_ERRNO;
- // zipfile comment length
- if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) err=UNZ_ERRNO;
- if ((central_pos+fin->initial_offset<us.offset_central_dir+us.size_central_dir) && (err==UNZ_OK)) err=UNZ_BADZIPFILE;
- //if (err!=UNZ_OK) {lufclose(fin);return NULL;}
- if (err!=UNZ_OK) {lufclose(fin); zopenerror = err; return NULL;} //+++1.2
-
- us.file=fin;
- us.byte_before_the_zipfile = central_pos+fin->initial_offset - (us.offset_central_dir+us.size_central_dir);
- us.central_pos = central_pos;
- us.pfile_in_zip_read = NULL;
- fin->initial_offset = 0; // since the zipfile itself is expected to handle this
-
- unz_s *s = (unz_s*)zmalloc(sizeof(unz_s));
- *s=us;
- unzGoToFirstFile((unzFile)s);
- return (unzFile)s;
-}
-
-
-
-// Close a ZipFile opened with unzipOpen.
-// If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
-// these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
-// return UNZ_OK if there is no problem.
-int unzClose (unzFile file)
-{
- unz_s* s;
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
-
- if (s->pfile_in_zip_read!=NULL)
- unzCloseCurrentFile(file);
-
- lufclose(s->file);
- if (s) zfree(s); // unused s=0;
- return UNZ_OK;
-}
-
-
-// Write info about the ZipFile in the *pglobal_info structure.
-// No preparation of the structure is needed
-// return UNZ_OK if there is no problem.
-int unzGetGlobalInfo (unzFile file,unz_global_info *pglobal_info)
-{
- unz_s* s;
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- *pglobal_info=s->gi;
- return UNZ_OK;
-}
-
-
-// Translate date/time from Dos format to tm_unz (readable more easilty)
-void unzlocal_DosDateToTmuDate (uLong ulDosDate, tm_unz* ptm)
-{
- uLong uDate;
- uDate = (uLong)(ulDosDate>>16);
- ptm->tm_mday = (uInt)(uDate&0x1f) ;
- ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
- ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
-
- ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
- ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
- ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
-}
-
-// Get Info about the current file in the zipfile, with internal only info
-int unzlocal_GetCurrentFileInfoInternal (unzFile file,
- unz_file_info *pfile_info,
- unz_file_info_internal
- *pfile_info_internal,
- char *szFileName,
- uLong fileNameBufferSize,
- void *extraField,
- uLong extraFieldBufferSize,
- char *szComment,
- uLong commentBufferSize);
-
-int unzlocal_GetCurrentFileInfoInternal (unzFile file, unz_file_info *pfile_info,
- unz_file_info_internal *pfile_info_internal, char *szFileName,
- uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize,
- char *szComment, uLong commentBufferSize)
-{
- unz_s* s;
- unz_file_info file_info;
- unz_file_info_internal file_info_internal;
- int err=UNZ_OK;
- uLong uMagic;
- long lSeek=0;
-
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- if (lufseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0)
- err=UNZ_ERRNO;
-
-
- // we check the magic
- if (err==UNZ_OK)
- if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
- err=UNZ_ERRNO;
- else if (uMagic!=0x02014b50)
- err=UNZ_BADZIPFILE;
-
- if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK)
- err=UNZ_ERRNO;
-
- unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
-
- if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK)
- err=UNZ_ERRNO;
-
- lSeek+=file_info.size_filename;
- if ((err==UNZ_OK) && (szFileName!=NULL))
- {
- uLong uSizeRead ;
- if (file_info.size_filename<fileNameBufferSize)
- {
- *(szFileName+file_info.size_filename)='\0';
- uSizeRead = file_info.size_filename;
- }
- else
- uSizeRead = fileNameBufferSize;
-
- if ((file_info.size_filename>0) && (fileNameBufferSize>0))
- if (lufread(szFileName,(uInt)uSizeRead,1,s->file)!=1)
- err=UNZ_ERRNO;
- lSeek -= uSizeRead;
- }
-
-
- if ((err==UNZ_OK) && (extraField!=NULL))
- {
- uLong uSizeRead ;
- if (file_info.size_file_extra<extraFieldBufferSize)
- uSizeRead = file_info.size_file_extra;
- else
- uSizeRead = extraFieldBufferSize;
-
- if (lSeek!=0)
- if (lufseek(s->file,lSeek,SEEK_CUR)==0)
- lSeek=0;
- else
- err=UNZ_ERRNO;
- if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
- if (lufread(extraField,(uInt)uSizeRead,1,s->file)!=1)
- err=UNZ_ERRNO;
- lSeek += file_info.size_file_extra - uSizeRead;
- }
- else
- lSeek+=file_info.size_file_extra;
-
-
- if ((err==UNZ_OK) && (szComment!=NULL))
- {
- uLong uSizeRead ;
- if (file_info.size_file_comment<commentBufferSize)
- {
- *(szComment+file_info.size_file_comment)='\0';
- uSizeRead = file_info.size_file_comment;
- }
- else
- uSizeRead = commentBufferSize;
-
- if (lSeek!=0)
- if (lufseek(s->file,lSeek,SEEK_CUR)==0)
- {} // unused lSeek=0;
- else
- err=UNZ_ERRNO;
- if ((file_info.size_file_comment>0) && (commentBufferSize>0))
- if (lufread(szComment,(uInt)uSizeRead,1,s->file)!=1)
- err=UNZ_ERRNO;
- //unused lSeek+=file_info.size_file_comment - uSizeRead;
- }
- else {} //unused lSeek+=file_info.size_file_comment;
-
- if ((err==UNZ_OK) && (pfile_info!=NULL))
- *pfile_info=file_info;
-
- if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
- *pfile_info_internal=file_info_internal;
-
- return err;
-}
-
-
-
-// Write info about the ZipFile in the *pglobal_info structure.
-// No preparation of the structure is needed
-// return UNZ_OK if there is no problem.
-int unzGetCurrentFileInfo (unzFile file, unz_file_info *pfile_info,
- char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize,
- char *szComment, uLong commentBufferSize)
-{ return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,szFileName,fileNameBufferSize,
- extraField,extraFieldBufferSize, szComment,commentBufferSize);
-}
-
-
-// Set the current file of the zipfile to the first file.
-// return UNZ_OK if there is no problem
-int unzGoToFirstFile (unzFile file)
-{
- int err;
- unz_s* s;
- if (file==NULL) return UNZ_PARAMERROR;
- s=(unz_s*)file;
- s->pos_in_central_dir=s->offset_central_dir;
- s->num_file=0;
- err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
- &s->cur_file_info_internal,
- NULL,0,NULL,0,NULL,0);
- s->current_file_ok = (err == UNZ_OK);
- return err;
-}
-
-
-// Set the current file of the zipfile to the next file.
-// return UNZ_OK if there is no problem
-// return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
-int unzGoToNextFile (unzFile file)
-{
- unz_s* s;
- int err;
-
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- if (!s->current_file_ok)
- return UNZ_END_OF_LIST_OF_FILE;
- if (s->num_file+1==s->gi.number_entry)
- return UNZ_END_OF_LIST_OF_FILE;
-
- s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
- s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
- s->num_file++;
- err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
- &s->cur_file_info_internal,
- NULL,0,NULL,0,NULL,0);
- s->current_file_ok = (err == UNZ_OK);
- return err;
-}
-
-
-// Try locate the file szFileName in the zipfile.
-// For the iCaseSensitivity signification, see unzStringFileNameCompare
-// return value :
-// UNZ_OK if the file is found. It becomes the current file.
-// UNZ_END_OF_LIST_OF_FILE if the file is not found
-int unzLocateFile (unzFile file, const TCHAR *szFileName, int iCaseSensitivity)
-{
- unz_s* s;
- int err;
-
- uLong num_fileSaved;
- uLong pos_in_central_dirSaved;
-
- if (file==NULL)
- return UNZ_PARAMERROR;
-
- if (_tcslen(szFileName)>=UNZ_MAXFILENAMEINZIP)
- return UNZ_PARAMERROR;
-
- char szFileNameA[MAX_PATH];
-
-#ifdef _UNICODE
- GetAnsiFileName(szFileName, szFileNameA, MAX_PATH-1);
-#else
- strcpy(szFileNameA, szFileName);
-#endif
-
- s=(unz_s*)file;
- if (!s->current_file_ok)
- return UNZ_END_OF_LIST_OF_FILE;
-
- num_fileSaved = s->num_file;
- pos_in_central_dirSaved = s->pos_in_central_dir;
-
- err = unzGoToFirstFile(file);
-
- while (err == UNZ_OK)
- {
- char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
- unzGetCurrentFileInfo(file,NULL,
- szCurrentFileName,sizeof(szCurrentFileName)-1,
- NULL,0,NULL,0);
- if (unzStringFileNameCompare(szCurrentFileName,szFileNameA,iCaseSensitivity)==0)
- return UNZ_OK;
- err = unzGoToNextFile(file);
- }
-
- s->num_file = num_fileSaved ;
- s->pos_in_central_dir = pos_in_central_dirSaved ;
- return err;
-}
-
-
-// Read the local header of the current zipfile
-// Check the coherency of the local header and info in the end of central
-// directory about this file
-// store in *piSizeVar the size of extra info in local header
-// (filename and size of extra field data)
-int unzlocal_CheckCurrentFileCoherencyHeader (unz_s *s,uInt *piSizeVar,
- uLong *poffset_local_extrafield, uInt *psize_local_extrafield)
-{
- uLong uMagic,uData,uFlags;
- uLong size_filename;
- uLong size_extra_field;
- int err=UNZ_OK;
-
- *piSizeVar = 0;
- *poffset_local_extrafield = 0;
- *psize_local_extrafield = 0;
-
- if (lufseek(s->file,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,SEEK_SET)!=0)
- return UNZ_ERRNO;
-
-
- if (err==UNZ_OK)
- if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
- err=UNZ_ERRNO;
- else if (uMagic!=0x04034b50)
- err=UNZ_BADZIPFILE;
-
- if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
- err=UNZ_ERRNO;
-// else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
-// err=UNZ_BADZIPFILE;
- if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK)
- err=UNZ_ERRNO;
-
- if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
- err=UNZ_ERRNO;
- else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
- err=UNZ_BADZIPFILE;
-
- if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
- (s->cur_file_info.compression_method!=Z_DEFLATED))
- err=UNZ_BADZIPFILE;
-
- if (unzlocal_getLong(s->file,&uData) != UNZ_OK) // date/time
- err=UNZ_ERRNO;
-
- if (unzlocal_getLong(s->file,&uData) != UNZ_OK) // crc
- err=UNZ_ERRNO;
- else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
- ((uFlags & 8)==0))
- err=UNZ_BADZIPFILE;
-
- if (unzlocal_getLong(s->file,&uData) != UNZ_OK) // size compr
- err=UNZ_ERRNO;
- else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
- ((uFlags & 8)==0))
- err=UNZ_BADZIPFILE;
-
- if (unzlocal_getLong(s->file,&uData) != UNZ_OK) // size uncompr
- err=UNZ_ERRNO;
- else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
- ((uFlags & 8)==0))
- err=UNZ_BADZIPFILE;
-
-
- if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK)
- err=UNZ_ERRNO;
- else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
- err=UNZ_BADZIPFILE;
-
- *piSizeVar += (uInt)size_filename;
-
- if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK)
- err=UNZ_ERRNO;
- *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
- SIZEZIPLOCALHEADER + size_filename;
- *psize_local_extrafield = (uInt)size_extra_field;
-
- *piSizeVar += (uInt)size_extra_field;
-
- return err;
-}
-
-
-
-
-
-// Open for reading data the current file in the zipfile.
-// If there is no error and the file is opened, the return value is UNZ_OK.
-int unzOpenCurrentFile (unzFile file)
-{
- int err;
- int Store;
- uInt iSizeVar;
- unz_s* s;
- file_in_zip_read_info_s* pfile_in_zip_read_info;
- uLong offset_local_extrafield; // offset of the local extra field
- uInt size_local_extrafield; // size of the local extra field
-
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- if (!s->current_file_ok)
- return UNZ_PARAMERROR;
-
- if (s->pfile_in_zip_read != NULL)
- unzCloseCurrentFile(file);
-
- if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
- &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
- return UNZ_BADZIPFILE;
-
- pfile_in_zip_read_info = (file_in_zip_read_info_s*)zmalloc(sizeof(file_in_zip_read_info_s));
- if (pfile_in_zip_read_info==NULL)
- return UNZ_INTERNALERROR;
-
- pfile_in_zip_read_info->read_buffer=(char*)zmalloc(UNZ_BUFSIZE);
- pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
- pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
- pfile_in_zip_read_info->pos_local_extrafield=0;
-
- if (pfile_in_zip_read_info->read_buffer==NULL)
- {
- if (pfile_in_zip_read_info!=0) zfree(pfile_in_zip_read_info); //unused pfile_in_zip_read_info=0;
- return UNZ_INTERNALERROR;
- }
-
- pfile_in_zip_read_info->stream_initialised=0;
-
- if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED))
- { // unused err=UNZ_BADZIPFILE;
- }
- Store = s->cur_file_info.compression_method==0;
-
- pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
- pfile_in_zip_read_info->crc32=0;
- pfile_in_zip_read_info->compression_method =
- s->cur_file_info.compression_method;
- pfile_in_zip_read_info->file=s->file;
- pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
-
- pfile_in_zip_read_info->stream.total_out = 0;
-
- if (!Store)
- {
- pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
- pfile_in_zip_read_info->stream.zfree = (free_func)0;
- pfile_in_zip_read_info->stream.opaque = (voidpf)0;
-
- err=inflateInit2(&pfile_in_zip_read_info->stream);
- if (err == Z_OK)
- pfile_in_zip_read_info->stream_initialised=1;
- // windowBits is passed < 0 to tell that there is no zlib header.
- // Note that in this case inflate *requires* an extra "dummy" byte
- // after the compressed stream in order to complete decompression and
- // return Z_STREAM_END.
- // In unzip, i don't wait absolutely Z_STREAM_END because I known the
- // size of both compressed and uncompressed data
- }
- pfile_in_zip_read_info->rest_read_compressed =
- s->cur_file_info.compressed_size ;
- pfile_in_zip_read_info->rest_read_uncompressed =
- s->cur_file_info.uncompressed_size ;
-
-
- pfile_in_zip_read_info->pos_in_zipfile =
- s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
- iSizeVar;
-
- pfile_in_zip_read_info->stream.avail_in = (uInt)0;
-
-
- s->pfile_in_zip_read = pfile_in_zip_read_info;
- return UNZ_OK;
-}
-
-
-// Read bytes from the current file.
-// buf contain buffer where data must be copied
-// len the size of buf.
-// return the number of byte copied if somes bytes are copied
-// return 0 if the end of file was reached
-// return <0 with error code if there is an error
-// (UNZ_ERRNO for IO error, or zLib error for uncompress error)
-int unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
-{ int err=UNZ_OK;
- uInt iRead = 0;
-
- unz_s *s = (unz_s*)file;
- if (s==NULL) return UNZ_PARAMERROR;
-
- file_in_zip_read_info_s* pfile_in_zip_read_info = s->pfile_in_zip_read;
- if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR;
- if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE;
- if (len==0) return 0;
-
- pfile_in_zip_read_info->stream.next_out = (Byte*)buf;
- pfile_in_zip_read_info->stream.avail_out = (uInt)len;
-
- if (len>pfile_in_zip_read_info->rest_read_uncompressed)
- { pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
- }
-
- while (pfile_in_zip_read_info->stream.avail_out>0)
- { if ((pfile_in_zip_read_info->stream.avail_in==0) && (pfile_in_zip_read_info->rest_read_compressed>0))
- { uInt uReadThis = UNZ_BUFSIZE;
- if (pfile_in_zip_read_info->rest_read_compressed<uReadThis) uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
- if (uReadThis == 0) return UNZ_EOF;
- if (lufseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO;
- if (lufread(pfile_in_zip_read_info->read_buffer,uReadThis,1,pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO;
- pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
- pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
- pfile_in_zip_read_info->stream.next_in = (Byte*)pfile_in_zip_read_info->read_buffer;
- pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
- }
-
- if (pfile_in_zip_read_info->compression_method==0)
- { uInt uDoCopy,i ;
- if (pfile_in_zip_read_info->stream.avail_out < pfile_in_zip_read_info->stream.avail_in)
- { uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
- }
- else
- { uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
- }
- for (i=0;i<uDoCopy;i++)
- { *(pfile_in_zip_read_info->stream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i);
- }
- pfile_in_zip_read_info->crc32 = ucrc32(pfile_in_zip_read_info->crc32,pfile_in_zip_read_info->stream.next_out,uDoCopy);
- pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
- pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
- pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
- pfile_in_zip_read_info->stream.next_out += uDoCopy;
- pfile_in_zip_read_info->stream.next_in += uDoCopy;
- pfile_in_zip_read_info->stream.total_out += uDoCopy;
- iRead += uDoCopy;
- }
- else
- { uLong uTotalOutBefore,uTotalOutAfter;
- const Byte *bufBefore;
- uLong uOutThis;
- int flush=Z_SYNC_FLUSH;
- uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
- bufBefore = pfile_in_zip_read_info->stream.next_out;
- err=inflate(&pfile_in_zip_read_info->stream,flush);
- uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
- uOutThis = uTotalOutAfter-uTotalOutBefore;
- pfile_in_zip_read_info->crc32 = ucrc32(pfile_in_zip_read_info->crc32,bufBefore,(uInt)(uOutThis));
- pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
- iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
- if (err==Z_STREAM_END)
- {
- if( pfile_in_zip_read_info->rest_read_uncompressed > 0 )
- {
- return iRead; // More to go
- }
- return Z_OK; // No point returning UNZ_EOF as it is also zero
- }
- //if (err==Z_STREAM_END) return (iRead==0) ? UNZ_EOF : iRead; //+++1.3
- //if (err==Z_STREAM_END) return (iRead==len) ? UNZ_EOF : iRead; //+++1.2
-
- if (err != Z_OK) break;
- }
- }
-
- // if (err==Z_OK) return iRead;
- if( err == Z_OK )
- {
- if( pfile_in_zip_read_info->rest_read_uncompressed > 0 )
- {
- return iRead; // More to go
- }
- return Z_OK; // Done
- }
-
- return iRead;
-}
-
-
-// Give the current position in uncompressed data
-z_off_t unztell (unzFile file)
-{
- unz_s* s;
- file_in_zip_read_info_s* pfile_in_zip_read_info;
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- pfile_in_zip_read_info=s->pfile_in_zip_read;
-
- if (pfile_in_zip_read_info==NULL)
- return UNZ_PARAMERROR;
-
- return (z_off_t)pfile_in_zip_read_info->stream.total_out;
-}
-
-
-// return 1 if the end of file was reached, 0 elsewhere
-int unzeof (unzFile file)
-{
- unz_s* s;
- file_in_zip_read_info_s* pfile_in_zip_read_info;
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- pfile_in_zip_read_info=s->pfile_in_zip_read;
-
- if (pfile_in_zip_read_info==NULL)
- return UNZ_PARAMERROR;
-
- if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
- return 1;
- else
- return 0;
-}
-
-
-
-// Read extra field from the current file (opened by unzOpenCurrentFile)
-// This is the local-header version of the extra field (sometimes, there is
-// more info in the local-header version than in the central-header)
-// if buf==NULL, it return the size of the local extra field that can be read
-// if buf!=NULL, len is the size of the buffer, the extra header is copied in buf.
-// the return value is the number of bytes copied in buf, or (if <0) the error code
-int unzGetLocalExtrafield (unzFile file,voidp buf,unsigned len)
-{
- unz_s* s;
- file_in_zip_read_info_s* pfile_in_zip_read_info;
- uInt read_now;
- uLong size_to_read;
-
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- pfile_in_zip_read_info=s->pfile_in_zip_read;
-
- if (pfile_in_zip_read_info==NULL)
- return UNZ_PARAMERROR;
-
- size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
- pfile_in_zip_read_info->pos_local_extrafield);
-
- if (buf==NULL)
- return (int)size_to_read;
-
- if (len>size_to_read)
- read_now = (uInt)size_to_read;
- else
- read_now = (uInt)len ;
-
- if (read_now==0)
- return 0;
-
- if (lufseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0)
- return UNZ_ERRNO;
-
- if (lufread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1)
- return UNZ_ERRNO;
-
- return (int)read_now;
-}
-
-// Close the file in zip opened with unzipOpenCurrentFile
-// Return UNZ_CRCERROR if all the file was read but the CRC is not good
-int unzCloseCurrentFile (unzFile file)
-{
- int err=UNZ_OK;
-
- unz_s* s;
- file_in_zip_read_info_s* pfile_in_zip_read_info;
- if (file==NULL)
- return UNZ_PARAMERROR;
- s=(unz_s*)file;
- pfile_in_zip_read_info=s->pfile_in_zip_read;
-
- if (pfile_in_zip_read_info==NULL)
- return UNZ_PARAMERROR;
-
-
- if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
- {
- if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
- err=UNZ_CRCERROR;
- }
-
-
- if (pfile_in_zip_read_info->read_buffer!=0)
- { void *buf = pfile_in_zip_read_info->read_buffer;
- zfree(buf);
- pfile_in_zip_read_info->read_buffer=0;
- }
- pfile_in_zip_read_info->read_buffer = NULL;
- if (pfile_in_zip_read_info->stream_initialised)
- inflateEnd(&pfile_in_zip_read_info->stream);
-
- pfile_in_zip_read_info->stream_initialised = 0;
- if (pfile_in_zip_read_info!=0) zfree(pfile_in_zip_read_info); // unused pfile_in_zip_read_info=0;
-
- s->pfile_in_zip_read=NULL;
-
- return err;
-}
-
-
-// Get the global comment string of the ZipFile, in the szComment buffer.
-// uSizeBuf is the size of the szComment buffer.
-// return the number of byte copied or an error code <0
-int unzGetGlobalComment (unzFile file, char *szComment, uLong uSizeBuf)
-{ //int err=UNZ_OK;
- unz_s* s;
- uLong uReadThis ;
- if (file==NULL) return UNZ_PARAMERROR;
- s=(unz_s*)file;
- uReadThis = uSizeBuf;
- if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment;
- if (lufseek(s->file,s->central_pos+22,SEEK_SET)!=0) return UNZ_ERRNO;
- if (uReadThis>0)
- { *szComment='\0';
- if (lufread(szComment,(uInt)uReadThis,1,s->file)!=1) return UNZ_ERRNO;
- }
- if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) *(szComment+s->gi.size_comment)='\0';
- return (int)uReadThis;
-}
-
-
-
-
-
-int unzOpenCurrentFile (unzFile file);
-int unzReadCurrentFile (unzFile file, void *buf, unsigned len);
-int unzCloseCurrentFile (unzFile file);
-
-
-FILETIME timet2filetime(__time32_t timer)
-{
- struct tm *tm = _gmtime32(&timer);
- SYSTEMTIME st;
-
- if (tm == NULL)
- {
- _time32(&timer);
- tm = _gmtime32(&timer);
- }
-
- st.wYear = (WORD)(tm->tm_year+1900);
- st.wMonth = (WORD)(tm->tm_mon+1);
- st.wDay = (WORD)(tm->tm_mday);
- st.wHour = (WORD)(tm->tm_hour);
- st.wMinute = (WORD)(tm->tm_min);
- st.wSecond = (WORD)(tm->tm_sec);
- st.wMilliseconds=0;
- FILETIME ft;
- SystemTimeToFileTime(&st,&ft);
- return ft;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-class TUnzip
-{ public:
- TUnzip() : uf(0), currentfile(-1), czei(-1) {}
-
- unzFile uf; int currentfile; ZIPENTRY cze; int czei;
- TCHAR rootdir[MAX_PATH];
-
- ZRESULT Open(void *z,unsigned int len,DWORD flags);
- ZRESULT Get(int index,ZIPENTRY *ze);
- ZRESULT Find(const TCHAR *name,bool ic,int *index,ZIPENTRY *ze);
- ZRESULT Unzip(int index,void *dst,unsigned int len,DWORD flags);
- ZRESULT Close();
-};
-
-
-ZRESULT TUnzip::Open(void *z,unsigned int len,DWORD flags)
-{
- if (uf!=0 || currentfile!=-1)
- return ZR_NOTINITED;
- GetCurrentDirectory(MAX_PATH,rootdir);
- _tcscat(rootdir,_T("\\"));
- if (flags==ZIP_HANDLE)
- {
- DWORD type = GetFileType(z);
- if (type!=FILE_TYPE_DISK)
- return ZR_SEEK;
- }
- ZRESULT e;
- LUFILE *f = lufopen(z,len,flags,&e);
- if (f==NULL)
- return e;
- uf = unzOpenInternal(f);
- //return ZR_OK;
- return zopenerror; //+++1.2
-}
-
-ZRESULT TUnzip::Get(int index,ZIPENTRY *ze)
-{ if (index<-1 || index>=(int)uf->gi.number_entry)
- return ZR_ARGS;
- if (currentfile!=-1)
- unzCloseCurrentFile(uf);
- currentfile=-1;
- if (index==czei && index!=-1) {memcpy(ze,&cze,sizeof(ZIPENTRY)); return ZR_OK;}
- if (index==-1)
- { ze->index = uf->gi.number_entry;
- ze->name[0]=0;
- ze->attr=0;
- ze->atime.dwLowDateTime=0; ze->atime.dwHighDateTime=0;
- ze->ctime.dwLowDateTime=0; ze->ctime.dwHighDateTime=0;
- ze->mtime.dwLowDateTime=0; ze->mtime.dwHighDateTime=0;
- ze->comp_size=0;
- ze->unc_size=0;
- return ZR_OK;
- }
- if (index<(int)uf->num_file) unzGoToFirstFile(uf);
- while ((int)uf->num_file<index) unzGoToNextFile(uf);
- unz_file_info ufi;
- char fn[MAX_PATH];
- unzGetCurrentFileInfo(uf,&ufi,fn,MAX_PATH,NULL,0,NULL,0);
-
- // now get the extra header. We do this ourselves, instead of
- // calling unzOpenCurrentFile &c., to avoid allocating more than necessary.
- unsigned int extralen,iSizeVar; unsigned long offset;
- int res = unzlocal_CheckCurrentFileCoherencyHeader(uf,&iSizeVar,&offset,&extralen);
- if (res!=UNZ_OK) return ZR_CORRUPT;
- if (lufseek(uf->file,offset,SEEK_SET)!=0) return ZR_READ;
- char *extra = new char[extralen];
- if (lufread(extra,1,(uInt)extralen,uf->file)!=extralen) {delete[] extra; return ZR_READ;}
- //
- ze->index=uf->num_file;
- strcpy(ze->name,fn);
- // zip has an 'attribute' 32bit value. Its lower half is windows stuff
- // its upper half is standard unix attr.
- unsigned long a = ufi.external_fa;
- bool uisdir = (a&0x40000000)!=0;
- //bool uwriteable= (a&0x08000000)!=0;
- bool uwriteable= (a&0x00800000)!=0; // ***hd***
- //bool ureadable= (a&0x01000000)!=0;
- //bool uexecutable=(a&0x00400000)!=0;
- bool wreadonly= (a&0x00000001)!=0;
- bool whidden= (a&0x00000002)!=0;
- bool wsystem= (a&0x00000004)!=0;
- bool wisdir= (a&0x00000010)!=0;
- bool warchive= (a&0x00000020)!=0;
- ze->attr=FILE_ATTRIBUTE_NORMAL;
- if (uisdir || wisdir) ze->attr |= FILE_ATTRIBUTE_DIRECTORY;
- if (warchive) ze->attr|=FILE_ATTRIBUTE_ARCHIVE;
- if (whidden) ze->attr|=FILE_ATTRIBUTE_HIDDEN;
- if (!uwriteable||wreadonly) ze->attr|=FILE_ATTRIBUTE_READONLY;
- if (wsystem) ze->attr|=FILE_ATTRIBUTE_SYSTEM;
- ze->comp_size = ufi.compressed_size;
- ze->unc_size = ufi.uncompressed_size;
- //
- WORD dostime = (WORD)(ufi.dosDate&0xFFFF);
- WORD dosdate = (WORD)((ufi.dosDate>>16)&0xFFFF);
- FILETIME lt, ft;
- DosDateTimeToFileTime(dosdate,dostime,&lt);
- LocalFileTimeToFileTime(&lt,&ft);
- ze->atime=ft; ze->ctime=ft; ze->mtime=ft;
- // the zip will always have at least that dostime. But if it also has
- // an extra header, then we'll instead get the info from that.
- unsigned int epos=0;
- while (epos+4<extralen)
- { char etype[3]; etype[0]=extra[epos+0]; etype[1]=extra[epos+1]; etype[2]=0;
- int size = extra[epos+2];
- if (strcmp(etype,"UT")!=0) {epos += 4+size; continue;}
- int flags = extra[epos+4];
- bool hasmtime = (flags&1)!=0;
- bool hasatime = (flags&2)!=0;
- bool hasctime = (flags&4)!=0;
- epos+=5;
- if (hasmtime)
- { __time32_t mtime = *(__time32_t*)(extra+epos); epos+=4;
- ze->mtime = timet2filetime(mtime);
- }
- if (hasatime)
- { __time32_t atime = *(__time32_t*)(extra+epos); epos+=4;
- ze->atime = timet2filetime(atime);
- }
- if (hasctime)
- { __time32_t ctime = *(__time32_t*)(extra+epos);
- ze->ctime = timet2filetime(ctime);
- }
- break;
- }
- //
- if (extra!=0) delete[] extra;
- memcpy(&cze,ze,sizeof(ZIPENTRY)); czei=index;
- return ZR_OK;
-}
-
-ZRESULT TUnzip::Find(const TCHAR *name, bool ic, int *index, ZIPENTRY *ze)
-{
- int res = unzLocateFile(uf,name,ic?CASE_INSENSITIVE:CASE_SENSITIVE);
- if (res!=UNZ_OK)
- {
- if (index!=0)
- *index=-1;
- if (ze!=NULL)
- {
- ZeroMemory(ze,sizeof(ZIPENTRY)); ze->index=-1;
- }
- return ZR_NOTFOUND;
- }
- if (currentfile!=-1)
- unzCloseCurrentFile(uf); currentfile=-1;
- int i = (int)uf->num_file;
- if (index!=NULL)
- *index=i;
- if (ze!=NULL)
- {
- ZRESULT zres = Get(i,ze);
- if (zres!=ZR_OK)
- return zres;
- }
- return ZR_OK;
-}
-
-void EnsureDirectory(const TCHAR *rootdir, const TCHAR *dir)
-{
- if (dir==NULL || dir[0] == _T('\0'))
- return;
- const TCHAR *lastslash = dir, *c = lastslash;
- while (*c != _T('\0'))
- {
- if (*c==_T('/') || *c==_T('\\'))
- lastslash=c;
- c++;
- }
- const TCHAR *name=lastslash;
- if (lastslash!=dir)
- {
- TCHAR tmp[MAX_PATH];
- _tcsncpy(tmp, dir, lastslash-dir);
- tmp[lastslash-dir] = _T('\0');
- EnsureDirectory(rootdir,tmp);
- name++;
- }
- TCHAR cd[MAX_PATH];
- _tcscpy(cd,rootdir);
- //_tcscat(cd,name);
- _tcscat(cd,dir); //+++1.2
- CreateDirectory(cd,NULL);
-}
-
-ZRESULT TUnzip::Unzip(int index,void *dst,unsigned int len,DWORD flags)
-{
- if (flags!=ZIP_MEMORY && flags!=ZIP_FILENAME && flags!=ZIP_HANDLE)
- return ZR_ARGS;
- if (flags==ZIP_MEMORY)
- {
- if (index!=currentfile)
- {
- if (currentfile!=-1)
- unzCloseCurrentFile(uf);
- currentfile=-1;
- if (index>=(int)uf->gi.number_entry)
- return ZR_ARGS;
- if (index<(int)uf->num_file)
- unzGoToFirstFile(uf);
- while ((int)uf->num_file<index)
- unzGoToNextFile(uf);
- unzOpenCurrentFile(uf);
- currentfile=index;
- }
- int res = unzReadCurrentFile(uf,dst,len);
- if (res>0)
- return ZR_MORE;
- unzCloseCurrentFile(uf);
- currentfile=-1;
- if (res==0)
- return ZR_OK;
- else
- return ZR_FLATE;
- }
-
- // otherwise we're writing to a handle or a file
- if (currentfile!=-1)
- unzCloseCurrentFile(uf);
- currentfile=-1;
- if (index >= (int)uf->gi.number_entry)
- return ZR_ARGS;
- if (index < (int)uf->num_file)
- unzGoToFirstFile(uf);
- while ((int)uf->num_file<index)
- unzGoToNextFile(uf);
- ZIPENTRY ze;
- Get(index,&ze);
-
- // zipentry=directory is handled specially
- if ((ze.attr & FILE_ATTRIBUTE_DIRECTORY) != 0)
- {
- if (flags==ZIP_HANDLE)
- return ZR_OK; // don't do anything
-#ifdef _UNICODE
- TCHAR uname[MAX_PATH];
- GetUnicodeFileName(ze.name, uname, MAX_PATH-1);
- EnsureDirectory(rootdir, uname);
-#else
- EnsureDirectory(rootdir, ze.name);
-#endif
- return ZR_OK;
- }
-
- // otherwise, we write the zipentry to a file/handle
- HANDLE h;
- if (flags==ZIP_HANDLE)
- h=dst;
- else
- {
- const TCHAR *name = (const TCHAR *)dst;
- const TCHAR *c = name;
- while (*c)
- {
- if (*c == _T('/') || *c == _T('\\'))
- name = c + 1;
- c++;
- }
- // if it's a relative filename, ensure directories. We do this as a service
- // to the caller so they can just unzip straight unto ze.name.
- if (name != (const TCHAR *)dst)
- {
- TCHAR dir[MAX_PATH];
- _tcscpy(dir,(const TCHAR*)dst);
- dir[name-(const TCHAR*)dst-1] = _T('\0');
- bool isabsolute = (dir[0]==_T('/') || dir[0]==_T('\\') || dir[1]==_T(':'));
- isabsolute |= (_tcsstr(dir,_T("../"))!=0) | (_tcsstr(dir,_T("..\\"))!=0);
- if (!isabsolute)
- EnsureDirectory(rootdir,dir);
- }
- h = ::CreateFile((const TCHAR*)dst, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
- ze.attr, NULL);
- }
-
- if (h == INVALID_HANDLE_VALUE)
- return ZR_NOFILE;
-
- unzOpenCurrentFile(uf);
- BYTE buf[16384];
- bool haderr=false;
-
- for (;;)
- {
- int res = unzReadCurrentFile(uf,buf,16384);
- if (res<0)
- {
- haderr=true;
- break;
- }
- if (res==0)
- break;
- DWORD writ;
- BOOL bres = WriteFile(h,buf,res,&writ,NULL);
- if (!bres)
- {
- haderr=true;
- break;
- }
- }
- bool settime=false;
- DWORD type = GetFileType(h);
- if (type==FILE_TYPE_DISK && !haderr)
- settime=true;
- if (settime)
- SetFileTime(h,&ze.ctime,&ze.atime,&ze.mtime);
- if (flags!=ZIP_HANDLE)
- CloseHandle(h);
- if (unzCloseCurrentFile(uf) == UNZ_CRCERROR)
- return ZR_CORRUPT;
- if (haderr)
- return ZR_WRITE;
- return ZR_OK;
-}
-
-ZRESULT TUnzip::Close()
-{ if (currentfile!=-1) unzCloseCurrentFile(uf); currentfile=-1;
- if (uf!=0) unzClose(uf); uf=0;
- return ZR_OK;
-}
-
-
-
-
-
-ZRESULT lasterrorU=ZR_OK;
-
-unsigned int FormatZipMessageU(ZRESULT code, char *buf,unsigned int len)
-{ if (code==ZR_RECENT) code=lasterrorU;
- const char *msg="unknown zip result code";
- switch (code)
- { case ZR_OK: msg="Success"; break;
- case ZR_NODUPH: msg="Culdn't duplicate handle"; break;
- case ZR_NOFILE: msg="Couldn't create/open file"; break;
- case ZR_NOALLOC: msg="Failed to allocate memory"; break;
- case ZR_WRITE: msg="Error writing to file"; break;
- case ZR_NOTFOUND: msg="File not found in the zipfile"; break;
- case ZR_MORE: msg="Still more data to unzip"; break;
- case ZR_CORRUPT: msg="Zipfile is corrupt or not a zipfile"; break;
- case ZR_READ: msg="Error reading file"; break;
- case ZR_ARGS: msg="Caller: faulty arguments"; break;
- case ZR_PARTIALUNZ: msg="Caller: the file had already been partially unzipped"; break;
- case ZR_NOTMMAP: msg="Caller: can only get memory of a memory zipfile"; break;
- case ZR_MEMSIZE: msg="Caller: not enough space allocated for memory zipfile"; break;
- case ZR_FAILED: msg="Caller: there was a previous error"; break;
- case ZR_ENDED: msg="Caller: additions to the zip have already been ended"; break;
- case ZR_ZMODE: msg="Caller: mixing creation and opening of zip"; break;
- case ZR_NOTINITED: msg="Zip-bug: internal initialisation not completed"; break;
- case ZR_SEEK: msg="Zip-bug: trying to seek the unseekable"; break;
- case ZR_MISSIZE: msg="Zip-bug: the anticipated size turned out wrong"; break;
- case ZR_NOCHANGE: msg="Zip-bug: tried to change mind, but not allowed"; break;
- case ZR_FLATE: msg="Zip-bug: an internal error during flation"; break;
- }
- unsigned int mlen=(unsigned int)strlen(msg);
- if (buf==0 || len==0) return mlen;
- unsigned int n=mlen; if (n+1>len) n=len-1;
- strncpy(buf,msg,n); buf[n]=0;
- return mlen;
-}
-
-
-typedef struct
-{ DWORD flag;
- TUnzip *unz;
-} TUnzipHandleData;
-
-HZIP OpenZipU(void *z,unsigned int len,DWORD flags)
-{
- TUnzip *unz = new TUnzip();
- lasterrorU = unz->Open(z,len,flags);
- if (lasterrorU!=ZR_OK)
- {
- delete unz;
- return 0;
- }
- TUnzipHandleData *han = new TUnzipHandleData;
- han->flag=1;
- han->unz=unz;
- return (HZIP)han;
-}
-
-ZRESULT GetZipItemA(HZIP hz, int index, ZIPENTRY *ze)
-{
- if (hz==0)
- {
- lasterrorU=ZR_ARGS;
- return ZR_ARGS;
- }
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1)
- {
- lasterrorU=ZR_ZMODE;
- return ZR_ZMODE;
- }
- TUnzip *unz = han->unz;
- lasterrorU = unz->Get(index,ze);
- return lasterrorU;
-}
-
-ZRESULT GetZipItemW(HZIP hz, int index, ZIPENTRYW *zew)
-{
- if (hz==0)
- {
- lasterrorU=ZR_ARGS;
- return ZR_ARGS;
- }
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1)
- {
- lasterrorU=ZR_ZMODE;
- return ZR_ZMODE;
- }
- TUnzip *unz = han->unz;
- ZIPENTRY ze;
- lasterrorU = unz->Get(index,&ze);
- if (lasterrorU == ZR_OK)
- {
- zew->index = ze.index;
- zew->attr = ze.attr;
- zew->atime = ze.atime;
- zew->ctime = ze.ctime;
- zew->mtime = ze.mtime;
- zew->comp_size = ze.comp_size;
- zew->unc_size = ze.unc_size;
-#ifdef _UNICODE
- GetUnicodeFileName(ze.name, zew->name, MAX_PATH-1);
-#else
- strcpy(zew->name, ze.name);
-#endif
- }
- return lasterrorU;
-}
-
-ZRESULT FindZipItemA(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRY *ze)
-{
- if (hz==0)
- {
- lasterrorU=ZR_ARGS;
- return ZR_ARGS;
- }
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1)
- {
- lasterrorU=ZR_ZMODE;
- return ZR_ZMODE;
- }
- TUnzip *unz = han->unz;
- lasterrorU = unz->Find(name,ic,index,ze);
- return lasterrorU;
-}
-
-ZRESULT FindZipItemW(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRYW *zew)
-{
- if (hz==0)
- {
- lasterrorU=ZR_ARGS;
- return ZR_ARGS;
- }
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1)
- {
- lasterrorU=ZR_ZMODE;
- return ZR_ZMODE;
- }
- TUnzip *unz = han->unz;
- ZIPENTRY ze;
- lasterrorU = unz->Find(name,ic,index,&ze);
- if (lasterrorU == ZR_OK)
- {
- zew->index = ze.index;
- zew->attr = ze.attr;
- zew->atime = ze.atime;
- zew->ctime = ze.ctime;
- zew->mtime = ze.mtime;
- zew->comp_size = ze.comp_size;
- zew->unc_size = ze.unc_size;
-#ifdef _UNICODE
- GetUnicodeFileName(ze.name, zew->name, MAX_PATH-1);
-#else
- strcpy(zew->name, ze.name);
-#endif
- }
-
- return lasterrorU;
-}
-
-ZRESULT UnzipItem(HZIP hz, int index, void *dst, unsigned int len, DWORD flags)
-{
- if (hz==0)
- {
- lasterrorU=ZR_ARGS;
- return ZR_ARGS;
- }
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1)
- {
- lasterrorU=ZR_ZMODE;
- return ZR_ZMODE;
- }
- TUnzip *unz = han->unz;
- lasterrorU = unz->Unzip(index,dst,len,flags);
- return lasterrorU;
-}
-
-ZRESULT CloseZipU(HZIP hz)
-{ if (hz==0) {lasterrorU=ZR_ARGS;return ZR_ARGS;}
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- if (han->flag!=1) {lasterrorU=ZR_ZMODE;return ZR_ZMODE;}
- TUnzip *unz = han->unz;
- lasterrorU = unz->Close();
- delete unz;
- delete han;
- return lasterrorU;
-}
-
-bool IsZipHandleU(HZIP hz)
-{ if (hz==0) return true;
- TUnzipHandleData *han = (TUnzipHandleData*)hz;
- return (han->flag==1);
-}
-
-
diff --git a/src/Common/XUnzip.h b/src/Common/XUnzip.h
deleted file mode 100644
index 573dc7d..0000000
--- a/src/Common/XUnzip.h
+++ /dev/null
@@ -1,382 +0,0 @@
-// XUnzip.h Version 1.3
-//
-// Authors: Mark Adler et al. (see below)
-//
-// Modified by: Lucian Wischik
-// lu@wischik.com
-//
-// Version 1.0 - Turned C files into just a single CPP file
-// - Made them compile cleanly as C++ files
-// - Gave them simpler APIs
-// - Added the ability to zip/unzip directly in memory without
-// any intermediate files
-//
-// Modified by: Hans Dietrich
-// hdietrich@gmail.com
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lucian Wischik's comments:
-// --------------------------
-// THIS FILE is almost entirely based upon code by info-zip.
-// It has been modified by Lucian Wischik.
-// The original code may be found at http://www.info-zip.org
-// The original copyright text follows.
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Original authors' comments:
-// ---------------------------
-// This is version 2002-Feb-16 of the Info-ZIP copyright and license. The
-// definitive version of this document should be available at
-// ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
-//
-// Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
-//
-// For the purposes of this copyright and license, "Info-ZIP" is defined as
-// the following set of individuals:
-//
-// Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
-// Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase,
-// Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
-// David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
-// Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
-// Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler,
-// Antoine Verheijen, Paul von Behren, Rich Wales, Mike White
-//
-// This software is provided "as is", without warranty of any kind, express
-// or implied. In no event shall Info-ZIP or its contributors be held liable
-// for any direct, indirect, incidental, special or consequential damages
-// arising out of the use of or inability to use this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// definition, disclaimer, and this list of conditions.
-//
-// 2. Redistributions in binary form (compiled executables) must reproduce
-// the above copyright notice, definition, disclaimer, and this list of
-// conditions in documentation and/or other materials provided with the
-// distribution. The sole exception to this condition is redistribution
-// of a standard UnZipSFX binary as part of a self-extracting archive;
-// that is permitted without inclusion of this license, as long as the
-// normal UnZipSFX banner has not been removed from the binary or disabled.
-//
-// 3. Altered versions--including, but not limited to, ports to new
-// operating systems, existing ports with new graphical interfaces, and
-// dynamic, shared, or static library versions--must be plainly marked
-// as such and must not be misrepresented as being the original source.
-// Such altered versions also must not be misrepresented as being
-// Info-ZIP releases--including, but not limited to, labeling of the
-// altered versions with the names "Info-ZIP" (or any variation thereof,
-// including, but not limited to, different capitalizations),
-// "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of
-// Info-ZIP. Such altered versions are further prohibited from
-// misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or
-// of the Info-ZIP URL(s).
-//
-// 4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip",
-// "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its
-// own source and binary releases.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef XUNZIP_H
-#define XUNZIP_H
-
-
-#ifndef XZIP_H
-DECLARE_HANDLE(HZIP); // An HZIP identifies a zip file that has been opened
-#endif
-
-typedef DWORD ZRESULT;
-// return codes from any of the zip functions. Listed later.
-
-#define ZIP_HANDLE 1
-#define ZIP_FILENAME 2
-#define ZIP_MEMORY 3
-
-typedef struct
-{ int index; // index of this file within the zip
- char name[MAX_PATH]; // filename within the zip
- DWORD attr; // attributes, as in GetFileAttributes.
- FILETIME atime,ctime,mtime;// access, create, modify filetimes
- long comp_size; // sizes of item, compressed and uncompressed. These
- long unc_size; // may be -1 if not yet known (e.g. being streamed in)
-} ZIPENTRY;
-
-typedef struct
-{ int index; // index of this file within the zip
- TCHAR name[MAX_PATH]; // filename within the zip
- DWORD attr; // attributes, as in GetFileAttributes.
- FILETIME atime,ctime,mtime;// access, create, modify filetimes
- long comp_size; // sizes of item, compressed and uncompressed. These
- long unc_size; // may be -1 if not yet known (e.g. being streamed in)
-} ZIPENTRYW;
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// OpenZip()
-//
-// Purpose: Open an existing zip archive file
-//
-// Parameters: z - archive file name if flags is ZIP_FILENAME; for other
-// uses see below
-// len - for memory (ZIP_MEMORY) should be the buffer size;
-// for other uses, should be 0
-// flags - indicates usage, see below; for files, this will be
-// ZIP_FILENAME
-//
-// Returns: HZIP - non-zero if zip archive opened ok, otherwise 0
-//
-HZIP OpenZip(void *z, unsigned int len, DWORD flags);
-// OpenZip - opens a zip file and returns a handle with which you can
-// subsequently examine its contents. You can open a zip file from:
-// from a pipe: OpenZip(hpipe_read,0, ZIP_HANDLE);
-// from a file (by handle): OpenZip(hfile,0, ZIP_HANDLE);
-// from a file (by name): OpenZip("c:\\test.zip",0, ZIP_FILENAME);
-// from a memory block: OpenZip(bufstart, buflen, ZIP_MEMORY);
-// If the file is opened through a pipe, then items may only be
-// accessed in increasing order, and an item may only be unzipped once,
-// although GetZipItem can be called immediately before and after unzipping
-// it. If it's opened i n any other way, then full random access is possible.
-// Note: pipe input is not yet implemented.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// GetZipItem()
-//
-// Purpose: Get information about an item in an open zip archive
-//
-// Parameters: hz - handle of open zip archive
-// index - index number (0 based) of item in zip
-// ze - pointer to a ZIPENTRY (if ANSI) or ZIPENTRYW struct
-// (if Unicode)
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-
-#ifdef _UNICODE
-#define GetZipItem GetZipItemW
-#else
-#define GetZipItem GetZipItemA
-#endif
-
-ZRESULT GetZipItemA(HZIP hz, int index, ZIPENTRY *ze);
-ZRESULT GetZipItemW(HZIP hz, int index, ZIPENTRYW *ze);
-// GetZipItem - call this to get information about an item in the zip.
-// If index is -1 and the file wasn't opened through a pipe,
-// then it returns information about the whole zipfile
-// (and in particular ze.index returns the number of index items).
-// Note: the item might be a directory (ze.attr & FILE_ATTRIBUTE_DIRECTORY)
-// See below for notes on what happens when you unzip such an item.
-// Note: if you are opening the zip through a pipe, then random access
-// is not possible and GetZipItem(-1) fails and you can't discover the number
-// of items except by calling GetZipItem on each one of them in turn,
-// starting at 0, until eventually the call fails. Also, in the event that
-// you are opening through a pipe and the zip was itself created into a pipe,
-// then then comp_size and sometimes unc_size as well may not be known until
-// after the item has been unzipped.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// FindZipItem()
-//
-// Purpose: Find item by name and return information about it
-//
-// Parameters: hz - handle of open zip archive
-// name - name of file to look for inside zip archive
-// ic - TRUE = case insensitive
-// index - pointer to index number returned, or -1
-// ze - pointer to a ZIPENTRY (if ANSI) or ZIPENTRYW struct
-// (if Unicode)
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-
-#ifdef _UNICODE
-#define FindZipItem FindZipItemW
-#else
-#define FindZipItem FindZipItemA
-#endif
-
-ZRESULT FindZipItemA(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRY *ze);
-ZRESULT FindZipItemW(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRYW *ze);
-// FindZipItem - finds an item by name. ic means 'insensitive to case'.
-// It returns the index of the item, and returns information about it.
-// If nothing was found, then index is set to -1 and the function returns
-// an error code.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// UnzipItem()
-//
-// Purpose: Find item by index and unzip it
-//
-// Parameters: hz - handle of open zip archive
-// index - index number of file to unzip
-// dst - target file name of unzipped file
-// len - for memory (ZIP_MEMORY. length of buffer;
-// otherwise 0
-// flags - indicates usage, see below; for files, this will be
-// ZIP_FILENAME
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-
-ZRESULT UnzipItem(HZIP hz, int index, void *dst, unsigned int len, DWORD flags);
-// UnzipItem - given an index to an item, unzips it. You can unzip to:
-// to a pipe: UnzipItem(hz,i, hpipe_write,0,ZIP_HANDLE);
-// to a file (by handle): UnzipItem(hz,i, hfile,0,ZIP_HANDLE);
-// to a file (by name): UnzipItem(hz,i, ze.name,0,ZIP_FILENAME);
-// to a memory block: UnzipItem(hz,i, buf,buflen,ZIP_MEMORY);
-// In the final case, if the buffer isn't large enough to hold it all,
-// then the return code indicates that more is yet to come. If it was
-// large enough, and you want to know precisely how big, GetZipItem.
-// Note: zip files are normally stored with relative pathnames. If you
-// unzip with ZIP_FILENAME a relative pathname then the item gets created
-// relative to the current directory - it first ensures that all necessary
-// subdirectories have been created. Also, the item may itself be a directory.
-// If you unzip a directory with ZIP_FILENAME, then the directory gets created.
-// If you unzip it to a handle or a memory block, then nothing gets created
-// and it emits 0 bytes.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// CloseZip()
-//
-// Purpose: Close an open zip archive
-//
-// Parameters: hz - handle to an open zip archive
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-ZRESULT CloseZip(HZIP hz);
-// CloseZip - the zip handle must be closed with this function.
-
-unsigned int FormatZipMessage(ZRESULT code, char *buf,unsigned int len);
-// FormatZipMessage - given an error code, formats it as a string.
-// It returns the length of the error message. If buf/len points
-// to a real buffer, then it also writes as much as possible into there.
-
-
-// These are the result codes:
-#define ZR_OK 0x00000000 // nb. the pseudo-code zr-recent is never returned,
-#define ZR_RECENT 0x00000001 // but can be passed to FormatZipMessage.
-// The following come from general system stuff (e.g. files not openable)
-#define ZR_GENMASK 0x0000FF00
-#define ZR_NODUPH 0x00000100 // couldn't duplicate the handle
-#define ZR_NOFILE 0x00000200 // couldn't create/open the file
-#define ZR_NOALLOC 0x00000300 // failed to allocate some resource
-#define ZR_WRITE 0x00000400 // a general error writing to the file
-#define ZR_NOTFOUND 0x00000500 // couldn't find that file in the zip
-#define ZR_MORE 0x00000600 // there's still more data to be unzipped
-#define ZR_CORRUPT 0x00000700 // the zipfile is corrupt or not a zipfile
-#define ZR_READ 0x00000800 // a general error reading the file
-// The following come from mistakes on the part of the caller
-#define ZR_CALLERMASK 0x00FF0000
-#define ZR_ARGS 0x00010000 // general mistake with the arguments
-#define ZR_NOTMMAP 0x00020000 // tried to ZipGetMemory, but that only works on mmap zipfiles, which yours wasn't
-#define ZR_MEMSIZE 0x00030000 // the memory size is too small
-#define ZR_FAILED 0x00040000 // the thing was already failed when you called this function
-#define ZR_ENDED 0x00050000 // the zip creation has already been closed
-#define ZR_MISSIZE 0x00060000 // the indicated input file size turned out mistaken
-#define ZR_PARTIALUNZ 0x00070000 // the file had already been partially unzipped
-#define ZR_ZMODE 0x00080000 // tried to mix creating/opening a zip
-// The following come from bugs within the zip library itself
-#define ZR_BUGMASK 0xFF000000
-#define ZR_NOTINITED 0x01000000 // initialisation didn't work
-#define ZR_SEEK 0x02000000 // trying to seek in an unseekable file
-#define ZR_NOCHANGE 0x04000000 // changed its mind on storage, but not allowed
-#define ZR_FLATE 0x05000000 // an internal error in the de/inflation code
-
-
-
-
-
-// e.g.
-//
-// SetCurrentDirectory("c:\\docs\\stuff");
-// HZIP hz = OpenZip("c:\\stuff.zip",0,ZIP_FILENAME);
-// ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems=ze.index;
-// for (int i=0; i<numitems; i++)
-// { GetZipItem(hz,i,&ze);
-// UnzipItem(hz,i,ze.name,0,ZIP_FILENAME);
-// }
-// CloseZip(hz);
-//
-//
-// HRSRC hrsrc = FindResource(hInstance,MAKEINTRESOURCE(1),RT_RCDATA);
-// HANDLE hglob = LoadResource(hInstance,hrsrc);
-// void *zipbuf=LockResource(hglob);
-// unsigned int ziplen=SizeofResource(hInstance,hrsrc);
-// HZIP hz = OpenZip(zipbuf, ziplen, ZIP_MEMORY);
-// - unzip to a membuffer -
-// ZIPENTRY ze; int i; FindZipItem(hz,"file.dat",&i,&ze);
-// char *ibuf = new char[ze.unc_size];
-// UnzipItem(hz,i, ibuf, ze.unc_size,ZIP_MEMORY);
-// delete[] buf;
-// - unzip to a fixed membuff -
-// ZIPENTRY ze; int i; FindZipItem(hz,"file.dat",&i,&ze);
-// char ibuf[1024]; ZIPRESULT zr=ZR_MORE; unsigned long totsize=0;
-// while (zr==ZR_MORE)
-// { zr = UnzipItem(hz,i, ibuf,1024,ZIP_MEMORY);
-// unsigned long bufsize=1024; if (zr==ZR_OK) bufsize=ze.unc_size-totsize;
-// totsize+=bufsize;
-// }
-// - unzip to a pipe -
-// HANDLE hthread=CreateWavReaderThread(&hread,&hwrite);
-// FindZipItem(hz,"sound.wav",&i,&ze);
-// UnzipItem(hz,i, hwrite,0,ZIP_HANDLE);
-// CloseHandle(hwrite);
-// WaitForSingleObject(hthread,INFINITE);
-// CloseHandle(hread); CloseHandle(hthread);
-// - finished -
-// CloseZip(hz);
-// // note: no need to free resources obtained through Find/Load/LockResource
-//
-//
-// SetCurrentDirectory("c:\\docs\\pipedzipstuff");
-// HANDLE hread,hwrite; CreatePipe(&hread,&hwrite);
-// CreateZipWriterThread(hwrite);
-// HZIP hz = OpenZip(hread,0,ZIP_HANDLE);
-// for (int i=0; ; i++)
-// { ZIPENTRY ze; ZRESULT res = GetZipItem(hz,i,&ze);
-// if (res!=ZE_OK) break; // no more
-// UnzipItem(hz,i, ze.name,0,ZIP_FILENAME);
-// }
-// CloseZip(hz);
-//
-
-
-
-
-// Now we indulge in a little skullduggery so that the code works whether
-// the user has included just zip or both zip and unzip.
-// Idea: if header files for both zip and unzip are present, then presumably
-// the cpp files for zip and unzip are both present, so we will call
-// one or the other of them based on a dynamic choice. If the header file
-// for only one is present, then we will bind to that particular one.
-HZIP OpenZipU(void *z,unsigned int len,DWORD flags);
-ZRESULT CloseZipU(HZIP hz);
-unsigned int FormatZipMessageU(ZRESULT code, char *buf,unsigned int len);
-bool IsZipHandleU(HZIP hz);
-#define OpenZip OpenZipU
-
-#ifdef XZIP_H
-#undef CloseZip
-#define CloseZip(hz) (IsZipHandleU(hz)?CloseZipU(hz):CloseZipZ(hz))
-#else
-#define CloseZip CloseZipU
-#define FormatZipMessage FormatZipMessageU
-#endif
-
-
-#endif //XUNZIP_H
diff --git a/src/Common/XZip.cpp b/src/Common/XZip.cpp
deleted file mode 100644
index be6d27e..0000000
--- a/src/Common/XZip.cpp
+++ /dev/null
@@ -1,3215 +0,0 @@
-// XZip.cpp Version 1.3
-//
-// Authors: Mark Adler et al. (see below)
-//
-// Modified by: Lucian Wischik
-// lu@wischik.com
-//
-// Version 1.0 - Turned C files into just a single CPP file
-// - Made them compile cleanly as C++ files
-// - Gave them simpler APIs
-// - Added the ability to zip/unzip directly in memory without
-// any intermediate files
-//
-// Modified by: Hans Dietrich
-// hdietrich@gmail.com
-//
-// Version 1.3: - Fixed UTC problem
-//
-// Version 1.2: - Many bug fixes. See CodeProject article for list.
-//
-// Version 1.1: - Added Unicode support to CreateZip() and ZipAdd()
-// - Changed file names to avoid conflicts with Lucian's files
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lucian Wischik's comments:
-// --------------------------
-// THIS FILE is almost entirely based upon code by Info-ZIP.
-// It has been modified by Lucian Wischik.
-// The original code may be found at http://www.info-zip.org
-// The original copyright text follows.
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Original authors' comments:
-// ---------------------------
-// This is version 2002-Feb-16 of the Info-ZIP copyright and license. The
-// definitive version of this document should be available at
-// ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
-//
-// Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
-//
-// For the purposes of this copyright and license, "Info-ZIP" is defined as
-// the following set of individuals:
-//
-// Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
-// Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase,
-// Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
-// David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
-// Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
-// Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler,
-// Antoine Verheijen, Paul von Behren, Rich Wales, Mike White
-//
-// This software is provided "as is", without warranty of any kind, express
-// or implied. In no event shall Info-ZIP or its contributors be held liable
-// for any direct, indirect, incidental, special or consequential damages
-// arising out of the use of or inability to use this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// definition, disclaimer, and this list of conditions.
-//
-// 2. Redistributions in binary form (compiled executables) must reproduce
-// the above copyright notice, definition, disclaimer, and this list of
-// conditions in documentation and/or other materials provided with the
-// distribution. The sole exception to this condition is redistribution
-// of a standard UnZipSFX binary as part of a self-extracting archive;
-// that is permitted without inclusion of this license, as long as the
-// normal UnZipSFX banner has not been removed from the binary or disabled.
-//
-// 3. Altered versions--including, but not limited to, ports to new
-// operating systems, existing ports with new graphical interfaces, and
-// dynamic, shared, or static library versions--must be plainly marked
-// as such and must not be misrepresented as being the original source.
-// Such altered versions also must not be misrepresented as being
-// Info-ZIP releases--including, but not limited to, labeling of the
-// altered versions with the names "Info-ZIP" (or any variation thereof,
-// including, but not limited to, different capitalizations),
-// "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of
-// Info-ZIP. Such altered versions are further prohibited from
-// misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or
-// of the Info-ZIP URL(s).
-//
-// 4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip",
-// "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its
-// own source and binary releases.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _WIN64
-#define _USE_32BIT_TIME_T //+++1.2
-#endif
-
-
-#define STRICT
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <tchar.h>
-#include <time.h>
-#include "xzip.h"
-
-#pragma warning(disable : 4996) // disable bogus deprecation warning
-
-typedef unsigned char uch; // unsigned 8-bit value
-typedef unsigned short ush; // unsigned 16-bit value
-typedef unsigned long ulg; // unsigned 32-bit value
-typedef size_t extent; // file size
-typedef unsigned Pos; // must be at least 32 bits
-typedef unsigned IPos; // A Pos is an index in the character window. Pos is used only for parameter passing
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-
-
-// Error return values. The values 0..4 and 12..18 follow the conventions
-// of PKZIP. The values 4..10 are all assigned to "insufficient memory"
-// by PKZIP, so the codes 5..10 are used here for other purposes.
-#define ZE_MISS -1 // used by procname(), zipbare()
-#define ZE_OK 0 // success
-#define ZE_EOF 2 // unexpected end of zip file
-#define ZE_FORM 3 // zip file structure error
-#define ZE_MEM 4 // out of memory
-#define ZE_LOGIC 5 // internal logic error
-#define ZE_BIG 6 // entry too large to split
-#define ZE_NOTE 7 // invalid comment format
-#define ZE_TEST 8 // zip test (-T) failed or out of memory
-#define ZE_ABORT 9 // user interrupt or termination
-#define ZE_TEMP 10 // error using a temp file
-#define ZE_READ 11 // read or seek error
-#define ZE_NONE 12 // nothing to do
-#define ZE_NAME 13 // missing or empty zip file
-#define ZE_WRITE 14 // error writing to a file
-#define ZE_CREAT 15 // couldn't open to write
-#define ZE_PARMS 16 // bad command line
-#define ZE_OPEN 18 // could not open a specified file to read
-#define ZE_MAXERR 18 // the highest error number
-
-
-// internal file attribute
-#define UNKNOWN (-1)
-#define BINARY 0
-#define ASCII 1
-
-#define BEST -1 // Use best method (deflation or store)
-#define STORE 0 // Store method
-#define DEFLATE 8 // Deflation method
-
-#define CRCVAL_INITIAL 0L
-
-// MSDOS file or directory attributes
-#define MSDOS_HIDDEN_ATTR 0x02
-#define MSDOS_DIR_ATTR 0x10
-
-// Lengths of headers after signatures in bytes
-#define LOCHEAD 26
-#define CENHEAD 42
-#define ENDHEAD 18
-
-// Definitions for extra field handling:
-#define EB_HEADSIZE 4 /* length of a extra field block header */
-#define EB_LEN 2 /* offset of data length field in header */
-#define EB_UT_MINLEN 1 /* minimal UT field contains Flags byte */
-#define EB_UT_FLAGS 0 /* byte offset of Flags field */
-#define EB_UT_TIME1 1 /* byte offset of 1st time value */
-#define EB_UT_FL_MTIME (1 << 0) /* mtime present */
-#define EB_UT_FL_ATIME (1 << 1) /* atime present */
-#define EB_UT_FL_CTIME (1 << 2) /* ctime present */
-#define EB_UT_LEN(n) (EB_UT_MINLEN + 4 * (n))
-#define EB_L_UT_SIZE (EB_HEADSIZE + EB_UT_LEN(3))
-#define EB_C_UT_SIZE (EB_HEADSIZE + EB_UT_LEN(1))
-
-
-// Macros for writing machine integers to little-endian format
-#define PUTSH(a,f) {char _putsh_c=(char)((a)&0xff); wfunc(param,&_putsh_c,1); _putsh_c=(char)((a)>>8); wfunc(param,&_putsh_c,1);}
-#define PUTLG(a,f) {PUTSH((a) & 0xffff,(f)) PUTSH((a) >> 16,(f))}
-
-
-// -- Structure of a ZIP file --
-// Signatures for zip file information headers
-#define LOCSIG 0x04034b50L
-#define CENSIG 0x02014b50L
-#define ENDSIG 0x06054b50L
-#define EXTLOCSIG 0x08074b50L
-
-
-#define MIN_MATCH 3
-#define MAX_MATCH 258
-// The minimum and maximum match lengths
-
-
-#define WSIZE (0x8000)
-// Maximum window size = 32K. If you are really short of memory, compile
-// with a smaller WSIZE but this reduces the compression ratio for files
-// of size > WSIZE. WSIZE must be a power of two in the current implementation.
-//
-
-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
-// Minimum amount of lookahead, except at the end of the input file.
-// See deflate.c for comments about the MIN_MATCH+1.
-//
-
-#define MAX_DIST (WSIZE-MIN_LOOKAHEAD)
-// In order to simplify the code, particularly on 16 bit machines, match
-// distances are limited to MAX_DIST instead of WSIZE.
-//
-
-
-
-
-
-// ===========================================================================
-// Constants
-//
-
-#define MAX_BITS 15
-// All codes must not exceed MAX_BITS bits
-
-#define MAX_BL_BITS 7
-// Bit length codes must not exceed MAX_BL_BITS bits
-
-#define LENGTH_CODES 29
-// number of length codes, not counting the special END_BLOCK code
-
-#define LITERALS 256
-// number of literal bytes 0..255
-
-#define END_BLOCK 256
-// end of block literal code
-
-#define L_CODES (LITERALS+1+LENGTH_CODES)
-// number of Literal or Length codes, including the END_BLOCK code
-
-#define D_CODES 30
-// number of distance codes
-
-#define BL_CODES 19
-// number of codes used to transfer the bit lengths
-
-
-#define STORED_BLOCK 0
-#define STATIC_TREES 1
-#define DYN_TREES 2
-// The three kinds of block type
-
-#define LIT_BUFSIZE 0x8000
-#define DIST_BUFSIZE LIT_BUFSIZE
-// Sizes of match buffers for literals/lengths and distances. There are
-// 4 reasons for limiting LIT_BUFSIZE to 64K:
-// - frequencies can be kept in 16 bit counters
-// - if compression is not successful for the first block, all input data is
-// still in the window so we can still emit a stored block even when input
-// comes from standard input. (This can also be done for all blocks if
-// LIT_BUFSIZE is not greater than 32K.)
-// - if compression is not successful for a file smaller than 64K, we can
-// even emit a stored file instead of a stored block (saving 5 bytes).
-// - creating new Huffman trees less frequently may not provide fast
-// adaptation to changes in the input data statistics. (Take for
-// example a binary file with poorly compressible code followed by
-// a highly compressible string table.) Smaller buffer sizes give
-// fast adaptation but have of course the overhead of transmitting trees
-// more frequently.
-// - I can't count above 4
-// The current code is general and allows DIST_BUFSIZE < LIT_BUFSIZE (to save
-// memory at the expense of compression). Some optimizations would be possible
-// if we rely on DIST_BUFSIZE == LIT_BUFSIZE.
-//
-
-#define REP_3_6 16
-// repeat previous bit length 3-6 times (2 bits of repeat count)
-
-#define REPZ_3_10 17
-// repeat a zero length 3-10 times (3 bits of repeat count)
-
-#define REPZ_11_138 18
-// repeat a zero length 11-138 times (7 bits of repeat count)
-
-#define HEAP_SIZE (2*L_CODES+1)
-// maximum heap size
-
-
-// ===========================================================================
-// Local data used by the "bit string" routines.
-//
-
-#define Buf_size (8 * 2*sizeof(char))
-// Number of bits used within bi_buf. (bi_buf may be implemented on
-// more than 16 bits on some systems.)
-
-// Output a 16 bit value to the bit stream, lower (oldest) byte first
-#if 0 // -----------------------------------------------------------
-#define PUTSHORT(state,w) \
-{ \
- if (state.bs.out_offset >= state.bs.out_size-1) \
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset); \
- state.bs.out_buf[state.bs.out_offset++] = (char) ((w) & 0xff); \
- state.bs.out_buf[state.bs.out_offset++] = (char) ((ush)(w) >> 8); \
-}
-#endif // -----------------------------------------------------------
-
-//+++1.2
-#define PUTSHORT(state,w) \
-{ \
- if (state.bs.out_offset >= state.bs.out_size-1) \
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset); \
- if (state.bs.out_offset < state.bs.out_size-1) \
- { \
- state.bs.out_buf[state.bs.out_offset++] = (char) ((w) & 0xff); \
- state.bs.out_buf[state.bs.out_offset++] = (char) ((ush)(w) >> 8); \
- }\
-}
-
-#if 0 // -----------------------------------------------------------
-#define PUTBYTE(state,b) \
-{ \
- if (state.bs.out_offset >= state.bs.out_size) \
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset); \
- state.bs.out_buf[state.bs.out_offset++] = (char) (b); \
-}
-#endif // -----------------------------------------------------------
-
-//+++1.2
-#define PUTBYTE(state,b) \
-{ \
- if (state.bs.out_offset >= state.bs.out_size) \
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset); \
- if (state.bs.out_offset < state.bs.out_size) \
- state.bs.out_buf[state.bs.out_offset++] = (char) (b); \
-}
-
-// DEFLATE.CPP HEADER
-
-#define HASH_BITS 15
-// For portability to 16 bit machines, do not use values above 15.
-
-#define HASH_SIZE (unsigned)(1<<HASH_BITS)
-#define HASH_MASK (HASH_SIZE-1)
-#define WMASK (WSIZE-1)
-// HASH_SIZE and WSIZE must be powers of two
-
-#define NIL 0
-// Tail of hash chains
-
-#define FAST 4
-#define SLOW 2
-// speed options for the general purpose bit flag
-
-#define TOO_FAR 4096
-// Matches of length 3 are discarded if their distance exceeds TOO_FAR
-
-
-
-#define EQUAL 0
-// result of memcmp for equal strings
-
-
-// ===========================================================================
-// Local data used by the "longest match" routines.
-
-#define H_SHIFT ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH)
-// Number of bits by which ins_h and del_h must be shifted at each
-// input step. It must be such that after MIN_MATCH steps, the oldest
-// byte no longer takes part in the hash key, that is:
-// H_SHIFT * MIN_MATCH >= HASH_BITS
-
-#define max_insert_length max_lazy_match
-// Insert new strings in the hash table only if the match length
-// is not greater than this length. This saves time but degrades compression.
-// max_insert_length is used only for compression levels <= 3.
-
-
-
-const int extra_lbits[LENGTH_CODES] // extra bits for each length code
- = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
-
-const int extra_dbits[D_CODES] // extra bits for each distance code
- = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
-
-const int extra_blbits[BL_CODES]// extra bits for each bit length code
- = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
-
-const uch bl_order[BL_CODES] = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
-// The lengths of the bit length codes are sent in order of decreasing
-// probability, to avoid transmitting the lengths for unused bit length codes.
-
-
-typedef struct config {
- ush good_length; // reduce lazy search above this match length
- ush max_lazy; // do not perform lazy search above this match length
- ush nice_length; // quit search above this match length
- ush max_chain;
-} config;
-
-// Values for max_lazy_match, good_match, nice_match and max_chain_length,
-// depending on the desired pack level (0..9). The values given below have
-// been tuned to exclude worst case performance for pathological files.
-// Better values may be found for specific files.
-//
-
-const config configuration_table[10] = {
-// good lazy nice chain
- {0, 0, 0, 0}, // 0 store only
- {4, 4, 8, 4}, // 1 maximum speed, no lazy matches
- {4, 5, 16, 8}, // 2
- {4, 6, 32, 32}, // 3
- {4, 4, 16, 16}, // 4 lazy matches */
- {8, 16, 32, 32}, // 5
- {8, 16, 128, 128}, // 6
- {8, 32, 128, 256}, // 7
- {32, 128, 258, 1024}, // 8
- {32, 258, 258, 4096}};// 9 maximum compression */
-
-// Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
-// For deflate_fast() (levels <= 3) good is ignored and lazy has a different meaning.
-
-
-
-
-
-// Data structure describing a single value and its code string.
-typedef struct ct_data {
- union {
- ush freq; // frequency count
- ush code; // bit string
- } fc;
- union {
- ush dad; // father node in Huffman tree
- ush len; // length of bit string
- } dl;
-} ct_data;
-
-typedef struct tree_desc
-{
- ct_data *dyn_tree; // the dynamic tree
- ct_data *static_tree; // corresponding static tree or NULL
- const int *extra_bits; // extra bits for each code or NULL
- int extra_base; // base index for extra_bits
- int elems; // max number of elements in the tree
- int max_length; // max bit length for the codes
- int max_code; // largest code with non zero frequency
-} tree_desc;
-
-
-class TTreeState
-{
-public:
- TTreeState();
-
- ct_data dyn_ltree[HEAP_SIZE]; // literal and length tree
- ct_data dyn_dtree[2*D_CODES+1]; // distance tree
- ct_data static_ltree[L_CODES+2]; // the static literal tree...
- // ... Since the bit lengths are imposed, there is no need for the L_CODES
- // extra codes used during heap construction. However the codes 286 and 287
- // are needed to build a canonical tree (see ct_init below).
- ct_data static_dtree[D_CODES]; // the static distance tree...
- // ... (Actually a trivial tree since all codes use 5 bits.)
- ct_data bl_tree[2*BL_CODES+1]; // Huffman tree for the bit lengths
-
- tree_desc l_desc;
- tree_desc d_desc;
- tree_desc bl_desc;
-
- ush bl_count[MAX_BITS+1]; // number of codes at each bit length for an optimal tree
-
- int heap[2*L_CODES+1]; // heap used to build the Huffman trees
- int heap_len; // number of elements in the heap
- int heap_max; // element of largest frequency
- // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
- // The same heap array is used to build all trees.
-
- uch depth[2*L_CODES+1];
- // Depth of each subtree used as tie breaker for trees of equal frequency
-
- uch length_code[MAX_MATCH-MIN_MATCH+1];
- // length code for each normalized match length (0 == MIN_MATCH)
-
- uch dist_code[512];
- // distance codes. The first 256 values correspond to the distances
- // 3 .. 258, the last 256 values correspond to the top 8 bits of
- // the 15 bit distances.
-
- int base_length[LENGTH_CODES];
- // First normalized length for each code (0 = MIN_MATCH)
-
- int base_dist[D_CODES];
- // First normalized distance for each code (0 = distance of 1)
-
- uch far l_buf[LIT_BUFSIZE]; // buffer for literals/lengths
- ush far d_buf[DIST_BUFSIZE]; // buffer for distances
-
- uch flag_buf[(LIT_BUFSIZE/8)];
- // flag_buf is a bit array distinguishing literals from lengths in
- // l_buf, and thus indicating the presence or absence of a distance.
-
- unsigned last_lit; // running index in l_buf
- unsigned last_dist; // running index in d_buf
- unsigned last_flags; // running index in flag_buf
- uch flags; // current flags not yet saved in flag_buf
- uch flag_bit; // current bit used in flags
- // bits are filled in flags starting at bit 0 (least significant).
- // Note: these flags are overkill in the current code since we don't
- // take advantage of DIST_BUFSIZE == LIT_BUFSIZE.
-
- ulg opt_len; // bit length of current block with optimal trees
- ulg static_len; // bit length of current block with static trees
-
- ulg cmpr_bytelen; // total byte length of compressed file
- ulg cmpr_len_bits; // number of bits past 'cmpr_bytelen'
-
- ulg input_len; // total byte length of input file
- // input_len is for debugging only since we can get it by other means.
-
- ush *file_type; // pointer to UNKNOWN, BINARY or ASCII
-// int *file_method; // pointer to DEFLATE or STORE
-};
-
-TTreeState::TTreeState()
-{
- tree_desc a = {dyn_ltree, static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS, 0}; l_desc = a;
- tree_desc b = {dyn_dtree, static_dtree, extra_dbits, 0, D_CODES, MAX_BITS, 0}; d_desc = b;
- tree_desc c = {bl_tree, NULL, extra_blbits, 0, BL_CODES, MAX_BL_BITS, 0}; bl_desc = c;
- last_lit = 0;
- last_dist = 0;
- last_flags = 0;
-
- memset(dyn_ltree, 0, sizeof(dyn_ltree));
- memset(dyn_dtree, 0, sizeof(dyn_dtree));
- memset(static_ltree, 0, sizeof(static_ltree));
- memset(static_dtree, 0, sizeof(static_dtree));
- memset(bl_tree, 0, sizeof(bl_tree));
- memset(bl_count, 0, sizeof(bl_count));
- memset(heap, 0, sizeof(heap));
- heap_len = 0;
- heap_max = 0;
-
- memset(depth, 0, sizeof(depth));
- memset(length_code, 0, sizeof(length_code));
- memset(dist_code, 0, sizeof(dist_code));
- memset(base_length, 0, sizeof(base_length));
- memset(base_dist, 0, sizeof(base_dist));
- memset(l_buf, 0, sizeof(l_buf));
- memset(d_buf, 0, sizeof(d_buf));
- memset(flag_buf, 0, sizeof(flag_buf));
-
- last_lit = 0;
- last_dist = 0;
- last_flags = 0;
- flags = 0;
- flag_bit = 0;
- opt_len = 0;
- static_len = 0;
- cmpr_bytelen = 0;
- cmpr_len_bits = 0;
- input_len = 0;
- file_type = 0;
-}
-
-class TBitState
-{
-public:
- TBitState()
- {
- flush_flg = 0;
- bi_buf = 0;
- bi_valid = 0;
- out_buf = 0;
- out_offset = 0;
- out_size = 0;
- bits_sent = 0;
- }
-
- int flush_flg;
- //
- unsigned bi_buf;
- // Output buffer. bits are inserted starting at the bottom (least significant
- // bits). The width of bi_buf must be at least 16 bits.
- int bi_valid;
- // Number of valid bits in bi_buf. All bits above the last valid bit
- // are always zero.
- char *out_buf;
- // Current output buffer.
- unsigned out_offset;
- // Current offset in output buffer.
- // On 16 bit machines, the buffer is limited to 64K.
- unsigned out_size;
- // Size of current output buffer
- ulg bits_sent; // bit length of the compressed data only needed for debugging???
-};
-
-
-class TDeflateState
-{
-public:
- TDeflateState()
- {
- memset(window, 0, sizeof(window));
- memset(prev, 0, sizeof(prev));
- memset(head, 0, sizeof(head));
- window_size = 0;
- block_start = 0;
- sliding = 0;
- ins_h = 0;
- prev_length = 0;
- strstart = 0;
- match_start = 0;
- eofile = 0;
- lookahead = 0;
- max_chain_length = 0;
- max_lazy_match = 0;
- good_match = 0;
- nice_match = 0;
- }
-
- uch window[2L*WSIZE];
- // Sliding window. Input bytes are read into the second half of the window,
- // and move to the first half later to keep a dictionary of at least WSIZE
- // bytes. With this organization, matches are limited to a distance of
- // WSIZE-MAX_MATCH bytes, but this ensures that IO is always
- // performed with a length multiple of the block size. Also, it limits
- // the window size to 64K, which is quite useful on MSDOS.
- // To do: limit the window size to WSIZE+CBSZ if SMALL_MEM (the code would
- // be less efficient since the data would have to be copied WSIZE/CBSZ times)
- Pos prev[WSIZE];
- // Link to older string with same hash index. To limit the size of this
- // array to 64K, this link is maintained only for the last 32K strings.
- // An index in this array is thus a window index modulo 32K.
- Pos head[HASH_SIZE];
- // Heads of the hash chains or NIL. If your compiler thinks that
- // HASH_SIZE is a dynamic value, recompile with -DDYN_ALLOC.
-
- ulg window_size;
- // window size, 2*WSIZE except for MMAP or BIG_MEM, where it is the
- // input file length plus MIN_LOOKAHEAD.
-
- long block_start;
- // window position at the beginning of the current output block. Gets
- // negative when the window is moved backwards.
-
- int sliding;
- // Set to false when the input file is already in memory
-
- unsigned ins_h; // hash index of string to be inserted
-
- unsigned int prev_length;
- // Length of the best match at previous step. Matches not greater than this
- // are discarded. This is used in the lazy match evaluation.
-
- unsigned strstart; // start of string to insert
- unsigned match_start; // start of matching string
- int eofile; // flag set at end of input file
- unsigned lookahead; // number of valid bytes ahead in window
-
- unsigned max_chain_length;
- // To speed up deflation, hash chains are never searched beyond this length.
- // A higher limit improves compression ratio but degrades the speed.
-
- unsigned int max_lazy_match;
- // Attempt to find a better match only when the current match is strictly
- // smaller than this value. This mechanism is used only for compression
- // levels >= 4.
-
- unsigned good_match;
- // Use a faster search when the previous match is longer than this
-
- int nice_match; // Stop searching when current match exceeds this
-};
-
-
-typedef struct iztimes {
- __time32_t atime,mtime,ctime;
-} iztimes; // access, modify, create times
-
-typedef struct zlist {
- ush vem, ver, flg, how; // See central header in zipfile.c for what vem..off are
- ulg tim, crc, siz, len;
- extent nam, ext, cext, com; // offset of ext must be >= LOCHEAD
- ush dsk, att, lflg; // offset of lflg must be >= LOCHEAD
- ulg atx, off;
- char name[MAX_PATH]; // File name in zip file
- char *extra; // Extra field (set only if ext != 0)
- char *cextra; // Extra in central (set only if cext != 0)
- char *comment; // Comment (set only if com != 0)
- char iname[MAX_PATH]; // Internal file name after cleanup
- char zname[MAX_PATH]; // External version of internal name
- int mark; // Marker for files to operate on
- // int trash; // Marker for files to delete
- int dosflag; // Set to force MSDOS file attributes
- struct zlist far *nxt; // Pointer to next header in list
-} TZipFileInfo;
-
-
-class TState;
-typedef unsigned (*READFUNC)(TState &state, char *buf,unsigned size);
-typedef unsigned (*FLUSHFUNC)(void *param, const char *buf, unsigned *size);
-typedef unsigned (*WRITEFUNC)(void *param, const char *buf, unsigned size);
-
-class TState
-{
-public:
- TState() //+++1.2
- {
- param = 0;
- level = 0;
- seekable = FALSE;
- readfunc = 0;
- flush_outbuf = 0;
- err = 0;
- }
-
- void *param;
- int level;
- bool seekable;
- READFUNC readfunc;
- FLUSHFUNC flush_outbuf;
- TTreeState ts;
- TBitState bs;
- TDeflateState ds;
- const char *err;
-};
-
-void Assert(TState &state,bool cond, const char *msg)
-{ if (cond) return;
- state.err=msg;
-}
-void __cdecl Trace(const char *x, ...) {va_list paramList; va_start(paramList, x); paramList; va_end(paramList);}
-void __cdecl Tracec(bool ,const char *x, ...) {va_list paramList; va_start(paramList, x); paramList; va_end(paramList);}
-
-// ===========================================================================
-// Local (static) routines in this file.
-//
-
-void init_block (TState &);
-void pqdownheap (TState &,ct_data *tree, int k);
-void gen_bitlen (TState &,tree_desc *desc);
-void gen_codes (TState &state,ct_data *tree, int max_code);
-void build_tree (TState &,tree_desc *desc);
-void scan_tree (TState &,ct_data *tree, int max_code);
-void send_tree (TState &state,ct_data *tree, int max_code);
-int build_bl_tree (TState &);
-void send_all_trees (TState &state,int lcodes, int dcodes, int blcodes);
-void compress_block (TState &state,ct_data *ltree, ct_data *dtree);
-void set_file_type (TState &);
-void send_bits (TState &state, int value, int length);
-unsigned bi_reverse (unsigned code, int len);
-void bi_windup (TState &state);
-void copy_block (TState &state,char *buf, unsigned len, int header);
-
-
-#define send_code(state, c, tree) send_bits(state, tree[c].fc.code, tree[c].dl.len)
-// Send a code of the given tree. c and tree must not have side effects
-
-// alternatively...
-//#define send_code(state, c, tree)
-// { if (state.verbose>1) fprintf(stderr,"\ncd %3d ",(c));
-// send_bits(state, tree[c].fc.code, tree[c].dl.len); }
-
-#define d_code(dist) ((dist) < 256 ? state.ts.dist_code[dist] : state.ts.dist_code[256+((dist)>>7)])
-// Mapping from a distance to a distance code. dist is the distance - 1 and
-// must not have side effects. dist_code[256] and dist_code[257] are never used.
-
-#define Max(a,b) (a >= b ? a : b)
-/* the arguments must not have side effects */
-
-/* ===========================================================================
- * Allocate the match buffer, initialize the various tables and save the
- * location of the internal file attribute (ascii/binary) and method
- * (DEFLATE/STORE).
- */
-void ct_init(TState &state, ush *attr)
-{
- int n; /* iterates over tree elements */
- int bits; /* bit counter */
- int length; /* length value */
- int code; /* code value */
- int dist; /* distance index */
-
- state.ts.file_type = attr;
- //state.ts.file_method = method;
- state.ts.cmpr_bytelen = state.ts.cmpr_len_bits = 0L;
- state.ts.input_len = 0L;
-
- if (state.ts.static_dtree[0].dl.len != 0) return; /* ct_init already called */
-
- /* Initialize the mapping length (0..255) -> length code (0..28) */
- length = 0;
- for (code = 0; code < LENGTH_CODES-1; code++) {
- state.ts.base_length[code] = length;
- for (n = 0; n < (1<<extra_lbits[code]); n++) {
- state.ts.length_code[length++] = (uch)code;
- }
- }
- Assert(state,length == 256, "ct_init: length != 256");
- /* Note that the length 255 (match length 258) can be represented
- * in two different ways: code 284 + 5 bits or code 285, so we
- * overwrite length_code[255] to use the best encoding:
- */
- state.ts.length_code[length-1] = (uch)code;
-
- /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
- dist = 0;
- for (code = 0 ; code < 16; code++) {
- state.ts.base_dist[code] = dist;
- for (n = 0; n < (1<<extra_dbits[code]); n++) {
- state.ts.dist_code[dist++] = (uch)code;
- }
- }
- Assert(state,dist == 256, "ct_init: dist != 256");
- dist >>= 7; /* from now on, all distances are divided by 128 */
- for ( ; code < D_CODES; code++) {
- state.ts.base_dist[code] = dist << 7;
- for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
- state.ts.dist_code[256 + dist++] = (uch)code;
- }
- }
- Assert(state,dist == 256, "ct_init: 256+dist != 512");
-
- /* Construct the codes of the static literal tree */
- for (bits = 0; bits <= MAX_BITS; bits++) state.ts.bl_count[bits] = 0;
- n = 0;
- while (n <= 143) state.ts.static_ltree[n++].dl.len = 8, state.ts.bl_count[8]++;
- while (n <= 255) state.ts.static_ltree[n++].dl.len = 9, state.ts.bl_count[9]++;
- while (n <= 279) state.ts.static_ltree[n++].dl.len = 7, state.ts.bl_count[7]++;
- while (n <= 287) state.ts.static_ltree[n++].dl.len = 8, state.ts.bl_count[8]++;
- /* fc.codes 286 and 287 do not exist, but we must include them in the
- * tree construction to get a canonical Huffman tree (longest code
- * all ones)
- */
- gen_codes(state,(ct_data *)state.ts.static_ltree, L_CODES+1);
-
- /* The static distance tree is trivial: */
- for (n = 0; n < D_CODES; n++) {
- state.ts.static_dtree[n].dl.len = 5;
- state.ts.static_dtree[n].fc.code = (ush)bi_reverse(n, 5);
- }
-
- /* Initialize the first block of the first file: */
- init_block(state);
-}
-
-/* ===========================================================================
- * Initialize a new block.
- */
-void init_block(TState &state)
-{
- int n; /* iterates over tree elements */
-
- /* Initialize the trees. */
- for (n = 0; n < L_CODES; n++) state.ts.dyn_ltree[n].fc.freq = 0;
- for (n = 0; n < D_CODES; n++) state.ts.dyn_dtree[n].fc.freq = 0;
- for (n = 0; n < BL_CODES; n++) state.ts.bl_tree[n].fc.freq = 0;
-
- state.ts.dyn_ltree[END_BLOCK].fc.freq = 1;
- state.ts.opt_len = state.ts.static_len = 0L;
- state.ts.last_lit = state.ts.last_dist = state.ts.last_flags = 0;
- state.ts.flags = 0; state.ts.flag_bit = 1;
-}
-
-#define SMALLEST 1
-/* Index within the heap array of least frequent node in the Huffman tree */
-
-
-/* ===========================================================================
- * Remove the smallest element from the heap and recreate the heap with
- * one less element. Updates heap and heap_len.
- */
-#define pqremove(tree, top) \
-{\
- top = state.ts.heap[SMALLEST]; \
- state.ts.heap[SMALLEST] = state.ts.heap[state.ts.heap_len--]; \
- pqdownheap(state,tree, SMALLEST); \
-}
-
-/* ===========================================================================
- * Compares to subtrees, using the tree depth as tie breaker when
- * the subtrees have equal frequency. This minimizes the worst case length.
- */
-#define smaller(tree, n, m) \
- (tree[n].fc.freq < tree[m].fc.freq || \
- (tree[n].fc.freq == tree[m].fc.freq && state.ts.depth[n] <= state.ts.depth[m]))
-
-/* ===========================================================================
- * Restore the heap property by moving down the tree starting at node k,
- * exchanging a node with the smallest of its two sons if necessary, stopping
- * when the heap property is re-established (each father smaller than its
- * two sons).
- */
-void pqdownheap(TState &state,ct_data *tree, int k)
-{
- int v = state.ts.heap[k];
- int j = k << 1; /* left son of k */
- int htemp; /* required because of bug in SASC compiler */
-
- while (j <= state.ts.heap_len) {
- /* Set j to the smallest of the two sons: */
- if (j < state.ts.heap_len && smaller(tree, state.ts.heap[j+1], state.ts.heap[j])) j++;
-
- /* Exit if v is smaller than both sons */
- htemp = state.ts.heap[j];
- if (smaller(tree, v, htemp)) break;
-
- /* Exchange v with the smallest son */
- state.ts.heap[k] = htemp;
- k = j;
-
- /* And continue down the tree, setting j to the left son of k */
- j <<= 1;
- }
- state.ts.heap[k] = v;
-}
-
-/* ===========================================================================
- * Compute the optimal bit lengths for a tree and update the total bit length
- * for the current block.
- * IN assertion: the fields freq and dad are set, heap[heap_max] and
- * above are the tree nodes sorted by increasing frequency.
- * OUT assertions: the field len is set to the optimal bit length, the
- * array bl_count contains the frequencies for each bit length.
- * The length opt_len is updated; static_len is also updated if stree is
- * not null.
- */
-void gen_bitlen(TState &state,tree_desc *desc)
-{
- ct_data *tree = desc->dyn_tree;
- const int *extra = desc->extra_bits;
- int base = desc->extra_base;
- int max_code = desc->max_code;
- int max_length = desc->max_length;
- ct_data *stree = desc->static_tree;
- int h; /* heap index */
- int n, m; /* iterate over the tree elements */
- int bits; /* bit length */
- int xbits; /* extra bits */
- ush f; /* frequency */
- int overflow = 0; /* number of elements with bit length too large */
-
- for (bits = 0; bits <= MAX_BITS; bits++) state.ts.bl_count[bits] = 0;
-
- /* In a first pass, compute the optimal bit lengths (which may
- * overflow in the case of the bit length tree).
- */
- tree[state.ts.heap[state.ts.heap_max]].dl.len = 0; /* root of the heap */
-
- for (h = state.ts.heap_max+1; h < HEAP_SIZE; h++) {
- n = state.ts.heap[h];
- bits = tree[tree[n].dl.dad].dl.len + 1;
- if (bits > max_length) bits = max_length, overflow++;
- tree[n].dl.len = (ush)bits;
- /* We overwrite tree[n].dl.dad which is no longer needed */
-
- if (n > max_code) continue; /* not a leaf node */
-
- state.ts.bl_count[bits]++;
- xbits = 0;
- if (n >= base) xbits = extra[n-base];
- f = tree[n].fc.freq;
- state.ts.opt_len += (ulg)f * (bits + xbits);
- if (stree) state.ts.static_len += (ulg)f * (stree[n].dl.len + xbits);
- }
- if (overflow == 0) return;
-
- Trace("\nbit length overflow\n");
- /* This happens for example on obj2 and pic of the Calgary corpus */
-
- /* Find the first bit length which could increase: */
- do {
- bits = max_length-1;
- while (state.ts.bl_count[bits] == 0) bits--;
- state.ts.bl_count[bits]--; /* move one leaf down the tree */
- state.ts.bl_count[bits+1] += (ush)2; /* move one overflow item as its brother */
- state.ts.bl_count[max_length]--;
- /* The brother of the overflow item also moves one step up,
- * but this does not affect bl_count[max_length]
- */
- overflow -= 2;
- } while (overflow > 0);
-
- /* Now recompute all bit lengths, scanning in increasing frequency.
- * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
- * lengths instead of fixing only the wrong ones. This idea is taken
- * from 'ar' written by Haruhiko Okumura.)
- */
- for (bits = max_length; bits != 0; bits--) {
- n = state.ts.bl_count[bits];
- while (n != 0) {
- m = state.ts.heap[--h];
- if (m > max_code) continue;
- if (tree[m].dl.len != (ush)bits) {
- Trace("code %d bits %d->%d\n", m, tree[m].dl.len, bits);
- state.ts.opt_len += ((long)bits-(long)tree[m].dl.len)*(long)tree[m].fc.freq;
- tree[m].dl.len = (ush)bits;
- }
- n--;
- }
- }
-}
-
-/* ===========================================================================
- * Generate the codes for a given tree and bit counts (which need not be
- * optimal).
- * IN assertion: the array bl_count contains the bit length statistics for
- * the given tree and the field len is set for all tree elements.
- * OUT assertion: the field code is set for all tree elements of non
- * zero code length.
- */
-void gen_codes (TState &state, ct_data *tree, int max_code)
-{
- ush next_code[MAX_BITS+1]; /* next code value for each bit length */
- ush code = 0; /* running code value */
- int bits; /* bit index */
- int n; /* code index */
-
- /* The distribution counts are first used to generate the code values
- * without bit reversal.
- */
- for (bits = 1; bits <= MAX_BITS; bits++) {
- next_code[bits] = code = (ush)((code + state.ts.bl_count[bits-1]) << 1);
- }
- /* Check that the bit counts in bl_count are consistent. The last code
- * must be all ones.
- */
- Assert(state,code + state.ts.bl_count[MAX_BITS]-1 == (1<< ((ush) MAX_BITS)) - 1,
- "inconsistent bit counts");
- Trace("\ngen_codes: max_code %d ", max_code);
-
- for (n = 0; n <= max_code; n++) {
- int len = tree[n].dl.len;
- if (len == 0) continue;
- /* Now reverse the bits */
- tree[n].fc.code = (ush)bi_reverse(next_code[len]++, len);
-
- //Tracec(tree != state.ts.static_ltree, "\nn %3d %c l %2d c %4x (%x) ", n, (isgraph(n) ? n : ' '), len, tree[n].fc.code, next_code[len]-1);
- }
-}
-
-/* ===========================================================================
- * Construct one Huffman tree and assigns the code bit strings and lengths.
- * Update the total bit length for the current block.
- * IN assertion: the field freq is set for all tree elements.
- * OUT assertions: the fields len and code are set to the optimal bit length
- * and corresponding code. The length opt_len is updated; static_len is
- * also updated if stree is not null. The field max_code is set.
- */
-void build_tree(TState &state,tree_desc *desc)
-{
- ct_data *tree = desc->dyn_tree;
- ct_data *stree = desc->static_tree;
- int elems = desc->elems;
- int n, m; /* iterate over heap elements */
- int max_code = -1; /* largest code with non zero frequency */
- int node = elems; /* next internal node of the tree */
-
- /* Construct the initial heap, with least frequent element in
- * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
- * heap[0] is not used.
- */
- state.ts.heap_len = 0, state.ts.heap_max = HEAP_SIZE;
-
- for (n = 0; n < elems; n++) {
- if (tree[n].fc.freq != 0) {
- state.ts.heap[++state.ts.heap_len] = max_code = n;
- state.ts.depth[n] = 0;
- } else {
- tree[n].dl.len = 0;
- }
- }
-
- /* The pkzip format requires that at least one distance code exists,
- * and that at least one bit should be sent even if there is only one
- * possible code. So to avoid special checks later on we force at least
- * two codes of non zero frequency.
- */
- while (state.ts.heap_len < 2) {
- int newcp = state.ts.heap[++state.ts.heap_len] = (max_code < 2 ? ++max_code : 0);
- tree[newcp].fc.freq = 1;
- state.ts.depth[newcp] = 0;
- state.ts.opt_len--; if (stree) state.ts.static_len -= stree[newcp].dl.len;
- /* new is 0 or 1 so it does not have extra bits */
- }
- desc->max_code = max_code;
-
- /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
- * establish sub-heaps of increasing lengths:
- */
- for (n = state.ts.heap_len/2; n >= 1; n--) pqdownheap(state,tree, n);
-
- /* Construct the Huffman tree by repeatedly combining the least two
- * frequent nodes.
- */
- do {
- pqremove(tree, n); /* n = node of least frequency */
- m = state.ts.heap[SMALLEST]; /* m = node of next least frequency */
-
- state.ts.heap[--state.ts.heap_max] = n; /* keep the nodes sorted by frequency */
- state.ts.heap[--state.ts.heap_max] = m;
-
- /* Create a new node father of n and m */
- tree[node].fc.freq = (ush)(tree[n].fc.freq + tree[m].fc.freq);
- state.ts.depth[node] = (uch) (Max(state.ts.depth[n], state.ts.depth[m]) + 1);
- tree[n].dl.dad = tree[m].dl.dad = (ush)node;
- /* and insert the new node in the heap */
- state.ts.heap[SMALLEST] = node++;
- pqdownheap(state,tree, SMALLEST);
-
- } while (state.ts.heap_len >= 2);
-
- state.ts.heap[--state.ts.heap_max] = state.ts.heap[SMALLEST];
-
- /* At this point, the fields freq and dad are set. We can now
- * generate the bit lengths.
- */
- gen_bitlen(state,(tree_desc *)desc);
-
- /* The field len is now set, we can generate the bit codes */
- gen_codes (state,(ct_data *)tree, max_code);
-}
-
-/* ===========================================================================
- * Scan a literal or distance tree to determine the frequencies of the codes
- * in the bit length tree. Updates opt_len to take into account the repeat
- * counts. (The contribution of the bit length codes will be added later
- * during the construction of bl_tree.)
- */
-void scan_tree (TState &state,ct_data *tree, int max_code)
-{
- int n; /* iterates over all tree elements */
- int prevlen = -1; /* last emitted length */
- int curlen; /* length of current code */
- int nextlen = tree[0].dl.len; /* length of next code */
- int count = 0; /* repeat count of the current code */
- int max_count = 7; /* max repeat count */
- int min_count = 4; /* min repeat count */
-
- if (nextlen == 0) max_count = 138, min_count = 3;
- tree[max_code+1].dl.len = (ush)-1; /* guard */
-
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen; nextlen = tree[n+1].dl.len;
- if (++count < max_count && curlen == nextlen) {
- continue;
- } else if (count < min_count) {
- state.ts.bl_tree[curlen].fc.freq = (ush)(state.ts.bl_tree[curlen].fc.freq + count);
- } else if (curlen != 0) {
- if (curlen != prevlen) state.ts.bl_tree[curlen].fc.freq++;
- state.ts.bl_tree[REP_3_6].fc.freq++;
- } else if (count <= 10) {
- state.ts.bl_tree[REPZ_3_10].fc.freq++;
- } else {
- state.ts.bl_tree[REPZ_11_138].fc.freq++;
- }
- count = 0; prevlen = curlen;
- if (nextlen == 0) {
- max_count = 138, min_count = 3;
- } else if (curlen == nextlen) {
- max_count = 6, min_count = 3;
- } else {
- max_count = 7, min_count = 4;
- }
- }
-}
-
-/* ===========================================================================
- * Send a literal or distance tree in compressed form, using the codes in
- * bl_tree.
- */
-void send_tree (TState &state, ct_data *tree, int max_code)
-{
- int n; /* iterates over all tree elements */
- int prevlen = -1; /* last emitted length */
- int curlen; /* length of current code */
- int nextlen = tree[0].dl.len; /* length of next code */
- int count = 0; /* repeat count of the current code */
- int max_count = 7; /* max repeat count */
- int min_count = 4; /* min repeat count */
-
- /* tree[max_code+1].dl.len = -1; */ /* guard already set */
- if (nextlen == 0) max_count = 138, min_count = 3;
-
- for (n = 0; n <= max_code; n++) {
- curlen = nextlen; nextlen = tree[n+1].dl.len;
- if (++count < max_count && curlen == nextlen) {
- continue;
- } else if (count < min_count) {
- do { send_code(state, curlen, state.ts.bl_tree); } while (--count != 0);
-
- } else if (curlen != 0) {
- if (curlen != prevlen) {
- send_code(state, curlen, state.ts.bl_tree); count--;
- }
- Assert(state,count >= 3 && count <= 6, " 3_6?");
- send_code(state,REP_3_6, state.ts.bl_tree); send_bits(state,count-3, 2);
-
- } else if (count <= 10) {
- send_code(state,REPZ_3_10, state.ts.bl_tree); send_bits(state,count-3, 3);
-
- } else {
- send_code(state,REPZ_11_138, state.ts.bl_tree); send_bits(state,count-11, 7);
- }
- count = 0; prevlen = curlen;
- if (nextlen == 0) {
- max_count = 138, min_count = 3;
- } else if (curlen == nextlen) {
- max_count = 6, min_count = 3;
- } else {
- max_count = 7, min_count = 4;
- }
- }
-}
-
-/* ===========================================================================
- * Construct the Huffman tree for the bit lengths and return the index in
- * bl_order of the last bit length code to send.
- */
-int build_bl_tree(TState &state)
-{
- int max_blindex; /* index of last bit length code of non zero freq */
-
- /* Determine the bit length frequencies for literal and distance trees */
- scan_tree(state,(ct_data *)state.ts.dyn_ltree, state.ts.l_desc.max_code);
- scan_tree(state,(ct_data *)state.ts.dyn_dtree, state.ts.d_desc.max_code);
-
- /* Build the bit length tree: */
- build_tree(state,(tree_desc *)(&state.ts.bl_desc));
- /* opt_len now includes the length of the tree representations, except
- * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
- */
-
- /* Determine the number of bit length codes to send. The pkzip format
- * requires that at least 4 bit length codes be sent. (appnote.txt says
- * 3 but the actual value used is 4.)
- */
- for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
- if (state.ts.bl_tree[bl_order[max_blindex]].dl.len != 0) break;
- }
- /* Update opt_len to include the bit length tree and counts */
- state.ts.opt_len += 3*(max_blindex+1) + 5+5+4;
- Trace("\ndyn trees: dyn %ld, stat %ld", state.ts.opt_len, state.ts.static_len);
-
- return max_blindex;
-}
-
-/* ===========================================================================
- * Send the header for a block using dynamic Huffman trees: the counts, the
- * lengths of the bit length codes, the literal tree and the distance tree.
- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
- */
-void send_all_trees(TState &state,int lcodes, int dcodes, int blcodes)
-{
- int rank; /* index in bl_order */
-
- Assert(state,lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
- Assert(state,lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
- "too many codes");
- Trace("\nbl counts: ");
- send_bits(state,lcodes-257, 5);
- /* not +255 as stated in appnote.txt 1.93a or -256 in 2.04c */
- send_bits(state,dcodes-1, 5);
- send_bits(state,blcodes-4, 4); /* not -3 as stated in appnote.txt */
- for (rank = 0; rank < blcodes; rank++) {
- Trace("\nbl code %2d ", bl_order[rank]);
- send_bits(state,state.ts.bl_tree[bl_order[rank]].dl.len, 3);
- }
- Trace("\nbl tree: sent %ld", state.bs.bits_sent);
-
- send_tree(state,(ct_data *)state.ts.dyn_ltree, lcodes-1); /* send the literal tree */
- Trace("\nlit tree: sent %ld", state.bs.bits_sent);
-
- send_tree(state,(ct_data *)state.ts.dyn_dtree, dcodes-1); /* send the distance tree */
- Trace("\ndist tree: sent %ld", state.bs.bits_sent);
-}
-
-/* ===========================================================================
- * Determine the best encoding for the current block: dynamic trees, static
- * trees or store, and output the encoded block to the zip file. This function
- * returns the total compressed length (in bytes) for the file so far.
- */
-ulg flush_block(TState &state,char *buf, ulg stored_len, int eof)
-{
- ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
- int max_blindex; /* index of last bit length code of non zero freq */
-
- state.ts.flag_buf[state.ts.last_flags] = state.ts.flags; /* Save the flags for the last 8 items */
-
- /* Check if the file is ascii or binary */
- if (*state.ts.file_type == (ush)UNKNOWN) set_file_type(state);
-
- /* Construct the literal and distance trees */
- build_tree(state,(tree_desc *)(&state.ts.l_desc));
- Trace("\nlit data: dyn %ld, stat %ld", state.ts.opt_len, state.ts.static_len);
-
- build_tree(state,(tree_desc *)(&state.ts.d_desc));
- Trace("\ndist data: dyn %ld, stat %ld", state.ts.opt_len, state.ts.static_len);
- /* At this point, opt_len and static_len are the total bit lengths of
- * the compressed block data, excluding the tree representations.
- */
-
- /* Build the bit length tree for the above two trees, and get the index
- * in bl_order of the last bit length code to send.
- */
- max_blindex = build_bl_tree(state);
-
- /* Determine the best encoding. Compute first the block length in bytes */
- opt_lenb = (state.ts.opt_len+3+7)>>3;
- static_lenb = (state.ts.static_len+3+7)>>3;
- state.ts.input_len += stored_len; /* for debugging only */
-
- Trace("\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u dist %u ",
- opt_lenb, state.ts.opt_len, static_lenb, state.ts.static_len, stored_len,
- state.ts.last_lit, state.ts.last_dist);
-
- if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
-
- // Originally, zip allowed the file to be transformed from a compressed
- // into a stored file in the case where compression failed, there
- // was only one block, and it was allowed to change. I've removed this
- // possibility since the code's cleaner if no changes are allowed.
- //if (stored_len <= opt_lenb && eof && state.ts.cmpr_bytelen == 0L
- // && state.ts.cmpr_len_bits == 0L && state.seekable)
- //{ // && state.ts.file_method != NULL
- // // Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there:
- // Assert(state,buf!=NULL,"block vanished");
- // copy_block(state,buf, (unsigned)stored_len, 0); // without header
- // state.ts.cmpr_bytelen = stored_len;
- // Assert(state,false,"unimplemented *state.ts.file_method = STORE;");
- // //*state.ts.file_method = STORE;
- //}
- //else
- if (stored_len+4 <= opt_lenb && buf != (char*)NULL) {
- /* 4: two words for the lengths */
- /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
- * Otherwise we can't have processed more than WSIZE input bytes since
- * the last block flush, because compression would have been
- * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
- * transform a block into a stored block.
- */
- send_bits(state,(STORED_BLOCK<<1)+eof, 3); /* send block type */
- state.ts.cmpr_bytelen += ((state.ts.cmpr_len_bits + 3 + 7) >> 3) + stored_len + 4;
- state.ts.cmpr_len_bits = 0L;
-
- copy_block(state,buf, (unsigned)stored_len, 1); /* with header */
- }
- else if (static_lenb == opt_lenb) {
- send_bits(state,(STATIC_TREES<<1)+eof, 3);
- compress_block(state,(ct_data *)state.ts.static_ltree, (ct_data *)state.ts.static_dtree);
- state.ts.cmpr_len_bits += 3 + state.ts.static_len;
- state.ts.cmpr_bytelen += state.ts.cmpr_len_bits >> 3;
- state.ts.cmpr_len_bits &= 7L;
- }
- else {
- send_bits(state,(DYN_TREES<<1)+eof, 3);
- send_all_trees(state,state.ts.l_desc.max_code+1, state.ts.d_desc.max_code+1, max_blindex+1);
- compress_block(state,(ct_data *)state.ts.dyn_ltree, (ct_data *)state.ts.dyn_dtree);
- state.ts.cmpr_len_bits += 3 + state.ts.opt_len;
- state.ts.cmpr_bytelen += state.ts.cmpr_len_bits >> 3;
- state.ts.cmpr_len_bits &= 7L;
- }
- Assert(state,((state.ts.cmpr_bytelen << 3) + state.ts.cmpr_len_bits) == state.bs.bits_sent, "bad compressed size");
- init_block(state);
-
- if (eof) {
- // Assert(state,input_len == isize, "bad input size");
- bi_windup(state);
- state.ts.cmpr_len_bits += 7; /* align on byte boundary */
- }
- Trace("\n");
-
- return state.ts.cmpr_bytelen + (state.ts.cmpr_len_bits >> 3);
-}
-
-/* ===========================================================================
- * Save the match info and tally the frequency counts. Return true if
- * the current block must be flushed.
- */
-int ct_tally (TState &state,int dist, int lc)
-{
- state.ts.l_buf[state.ts.last_lit++] = (uch)lc;
- if (dist == 0) {
- /* lc is the unmatched char */
- state.ts.dyn_ltree[lc].fc.freq++;
- } else {
- /* Here, lc is the match length - MIN_MATCH */
- dist--; /* dist = match distance - 1 */
- Assert(state,(ush)dist < (ush)MAX_DIST &&
- (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
- (ush)d_code(dist) < (ush)D_CODES, "ct_tally: bad match");
-
- state.ts.dyn_ltree[state.ts.length_code[lc]+LITERALS+1].fc.freq++;
- state.ts.dyn_dtree[d_code(dist)].fc.freq++;
-
- state.ts.d_buf[state.ts.last_dist++] = (ush)dist;
- state.ts.flags |= state.ts.flag_bit;
- }
- state.ts.flag_bit <<= 1;
-
- /* Output the flags if they fill a byte: */
- if ((state.ts.last_lit & 7) == 0) {
- state.ts.flag_buf[state.ts.last_flags++] = state.ts.flags;
- state.ts.flags = 0, state.ts.flag_bit = 1;
- }
- /* Try to guess if it is profitable to stop the current block here */
- if (state.level > 2 && (state.ts.last_lit & 0xfff) == 0) {
- /* Compute an upper bound for the compressed length */
- ulg out_length = (ulg)state.ts.last_lit*8L;
- ulg in_length = (ulg)state.ds.strstart-state.ds.block_start;
- int dcode;
- for (dcode = 0; dcode < D_CODES; dcode++) {
- out_length += (ulg)state.ts.dyn_dtree[dcode].fc.freq*(5L+extra_dbits[dcode]);
- }
- out_length >>= 3;
- Trace("\nlast_lit %u, last_dist %u, in %ld, out ~%ld(%ld%%) ",
- state.ts.last_lit, state.ts.last_dist, in_length, out_length,
- 100L - out_length*100L/in_length);
- if (state.ts.last_dist < state.ts.last_lit/2 && out_length < in_length/2) return 1;
- }
- return (state.ts.last_lit == LIT_BUFSIZE-1 || state.ts.last_dist == DIST_BUFSIZE);
- /* We avoid equality with LIT_BUFSIZE because of wraparound at 64K
- * on 16 bit machines and because stored blocks are restricted to
- * 64K-1 bytes.
- */
-}
-
-/* ===========================================================================
- * Send the block data compressed using the given Huffman trees
- */
-void compress_block(TState &state,ct_data *ltree, ct_data *dtree)
-{
- unsigned dist; /* distance of matched string */
- int lc; /* match length or unmatched char (if dist == 0) */
- unsigned lx = 0; /* running index in l_buf */
- unsigned dx = 0; /* running index in d_buf */
- unsigned fx = 0; /* running index in flag_buf */
- uch flag = 0; /* current flags */
- unsigned code; /* the code to send */
- int extra; /* number of extra bits to send */
-
- if (state.ts.last_lit != 0) do {
- if ((lx & 7) == 0) flag = state.ts.flag_buf[fx++];
- lc = state.ts.l_buf[lx++];
- if ((flag & 1) == 0) {
- send_code(state,lc, ltree); /* send a literal byte */
- } else {
- /* Here, lc is the match length - MIN_MATCH */
- code = state.ts.length_code[lc];
- send_code(state,code+LITERALS+1, ltree); /* send the length code */
- extra = extra_lbits[code];
- if (extra != 0) {
- lc -= state.ts.base_length[code];
- send_bits(state,lc, extra); /* send the extra length bits */
- }
- dist = state.ts.d_buf[dx++];
- /* Here, dist is the match distance - 1 */
- code = d_code(dist);
- Assert(state,code < D_CODES, "bad d_code");
-
- send_code(state,code, dtree); /* send the distance code */
- extra = extra_dbits[code];
- if (extra != 0) {
- dist -= state.ts.base_dist[code];
- send_bits(state,dist, extra); /* send the extra distance bits */
- }
- } /* literal or match pair ? */
- flag >>= 1;
- } while (lx < state.ts.last_lit);
-
- send_code(state,END_BLOCK, ltree);
-}
-
-/* ===========================================================================
- * Set the file type to ASCII or BINARY, using a crude approximation:
- * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
- * IN assertion: the fields freq of dyn_ltree are set and the total of all
- * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
- */
-void set_file_type(TState &state)
-{
- int n = 0;
- unsigned ascii_freq = 0;
- unsigned bin_freq = 0;
- while (n < 7) bin_freq += state.ts.dyn_ltree[n++].fc.freq;
- while (n < 128) ascii_freq += state.ts.dyn_ltree[n++].fc.freq;
- while (n < LITERALS) bin_freq += state.ts.dyn_ltree[n++].fc.freq;
- *state.ts.file_type = (ush)(bin_freq > (ascii_freq >> 2) ? BINARY : ASCII);
-}
-
-
-/* ===========================================================================
- * Initialize the bit string routines.
- */
-void bi_init (TState &state,char *tgt_buf, unsigned tgt_size, int flsh_allowed)
-{
- state.bs.out_buf = tgt_buf;
- state.bs.out_size = tgt_size;
- state.bs.out_offset = 0;
- state.bs.flush_flg = flsh_allowed;
-
- state.bs.bi_buf = 0;
- state.bs.bi_valid = 0;
- state.bs.bits_sent = 0L;
-}
-
-/* ===========================================================================
- * Send a value on a given number of bits.
- * IN assertion: length <= 16 and value fits in length bits.
- */
-void send_bits(TState &state,int value, int length)
-{
- Assert(state,length > 0 && length <= 15, "invalid length");
- state.bs.bits_sent += (ulg)length;
- /* If not enough room in bi_buf, use (bi_valid) bits from bi_buf and
- * (Buf_size - bi_valid) bits from value to flush the filled bi_buf,
- * then fill in the rest of (value), leaving (length - (Buf_size-bi_valid))
- * unused bits in bi_buf.
- */
- state.bs.bi_buf |= (value << state.bs.bi_valid);
- state.bs.bi_valid += length;
- if (state.bs.bi_valid > (int)Buf_size) {
- PUTSHORT(state,state.bs.bi_buf);
- state.bs.bi_valid -= Buf_size;
- state.bs.bi_buf = (unsigned)value >> (length - state.bs.bi_valid);
- }
-}
-
-/* ===========================================================================
- * Reverse the first len bits of a code, using straightforward code (a faster
- * method would use a table)
- * IN assertion: 1 <= len <= 15
- */
-unsigned bi_reverse(unsigned code, int len)
-{
- register unsigned res = 0;
- do {
- res |= code & 1;
- code >>= 1, res <<= 1;
- } while (--len > 0);
- return res >> 1;
-}
-
-/* ===========================================================================
- * Write out any remaining bits in an incomplete byte.
- */
-void bi_windup(TState &state)
-{
- if (state.bs.bi_valid > 8) {
- PUTSHORT(state,state.bs.bi_buf);
- } else if (state.bs.bi_valid > 0) {
- PUTBYTE(state,state.bs.bi_buf);
- }
- if (state.bs.flush_flg) {
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset);
- }
- state.bs.bi_buf = 0;
- state.bs.bi_valid = 0;
- state.bs.bits_sent = (state.bs.bits_sent+7) & ~7;
-}
-
-/* ===========================================================================
- * Copy a stored block to the zip file, storing first the length and its
- * one's complement if requested.
- */
-void copy_block(TState &state, char *block, unsigned len, int header)
-{
- bi_windup(state); /* align on byte boundary */
-
- if (header) {
- PUTSHORT(state,(ush)len);
- PUTSHORT(state,(ush)~len);
- state.bs.bits_sent += 2*16;
- }
- if (state.bs.flush_flg) {
- state.flush_outbuf(state.param,state.bs.out_buf, &state.bs.out_offset);
- state.bs.out_offset = len;
- state.flush_outbuf(state.param,block, &state.bs.out_offset);
- } else if (state.bs.out_offset + len > state.bs.out_size) {
- Assert(state,false,"output buffer too small for in-memory compression");
- } else {
- memcpy(state.bs.out_buf + state.bs.out_offset, block, len);
- state.bs.out_offset += len;
- }
- state.bs.bits_sent += (ulg)len<<3;
-}
-
-
-
-
-
-
-
-
-/* ===========================================================================
- * Prototypes for functions.
- */
-
-void fill_window (TState &state);
-ulg deflate_fast (TState &state);
-
-int longest_match (TState &state,IPos cur_match);
-
-
-/* ===========================================================================
- * Update a hash value with the given input byte
- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
- * input characters, so that a running hash key can be computed from the
- * previous key instead of complete recalculation each time.
- */
-#define UPDATE_HASH(h,c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK)
-
-/* ===========================================================================
- * Insert string s in the dictionary and set match_head to the previous head
- * of the hash chain (the most recent string with same hash key). Return
- * the previous length of the hash chain.
- * IN assertion: all calls to to INSERT_STRING are made with consecutive
- * input characters and the first MIN_MATCH bytes of s are valid
- * (except for the last MIN_MATCH-1 bytes of the input file).
- */
-#define INSERT_STRING(s, match_head) \
- (UPDATE_HASH(state.ds.ins_h, state.ds.window[(s) + (MIN_MATCH-1)]), \
- state.ds.prev[(s) & WMASK] = match_head = state.ds.head[state.ds.ins_h], \
- state.ds.head[state.ds.ins_h] = (s))
-
-/* ===========================================================================
- * Initialize the "longest match" routines for a new file
- *
- * IN assertion: window_size is > 0 if the input file is already read or
- * mmap'ed in the window[] array, 0 otherwise. In the first case,
- * window_size is sufficient to contain the whole input file plus
- * MIN_LOOKAHEAD bytes (to avoid referencing memory beyond the end
- * of window[] when looking for matches towards the end).
- */
-void lm_init (TState &state, int pack_level, ush *flags)
-{
- register unsigned j;
-
- Assert(state,pack_level>=1 && pack_level<=8,"bad pack level");
-
- /* Do not slide the window if the whole input is already in memory
- * (window_size > 0)
- */
- state.ds.sliding = 0;
- if (state.ds.window_size == 0L) {
- state.ds.sliding = 1;
- state.ds.window_size = (ulg)2L*WSIZE;
- }
-
- /* Initialize the hash table (avoiding 64K overflow for 16 bit systems).
- * prev[] will be initialized on the fly.
- */
- state.ds.head[HASH_SIZE-1] = NIL;
- memset((char*)state.ds.head, NIL, (unsigned)(HASH_SIZE-1)*sizeof(*state.ds.head));
-
- /* Set the default configuration parameters:
- */
- state.ds.max_lazy_match = configuration_table[pack_level].max_lazy;
- state.ds.good_match = configuration_table[pack_level].good_length;
- state.ds.nice_match = configuration_table[pack_level].nice_length;
- state.ds.max_chain_length = configuration_table[pack_level].max_chain;
- if (pack_level <= 2) {
- *flags |= FAST;
- } else if (pack_level >= 8) {
- *flags |= SLOW;
- }
- /* ??? reduce max_chain_length for binary files */
-
- state.ds.strstart = 0;
- state.ds.block_start = 0L;
-
- j = WSIZE;
- j <<= 1; // Can read 64K in one step
- state.ds.lookahead = state.readfunc(state, (char*)state.ds.window, j);
-
- if (state.ds.lookahead == 0 || state.ds.lookahead == (unsigned)EOF) {
- state.ds.eofile = 1, state.ds.lookahead = 0;
- return;
- }
- state.ds.eofile = 0;
- /* Make sure that we always have enough lookahead. This is important
- * if input comes from a device such as a tty.
- */
- if (state.ds.lookahead < MIN_LOOKAHEAD) fill_window(state);
-
- state.ds.ins_h = 0;
- for (j=0; j<MIN_MATCH-1; j++) UPDATE_HASH(state.ds.ins_h, state.ds.window[j]);
- /* If lookahead < MIN_MATCH, ins_h is garbage, but this is
- * not important since only literal bytes will be emitted.
- */
-}
-
-
-/* ===========================================================================
- * Set match_start to the longest match starting at the given string and
- * return its length. Matches shorter or equal to prev_length are discarded,
- * in which case the result is equal to prev_length and match_start is
- * garbage.
- * IN assertions: cur_match is the head of the hash chain for the current
- * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
- */
-// For 80x86 and 680x0 and ARM, an optimized version is in match.asm or
-// match.S. The code is functionally equivalent, so you can use the C version
-// if desired. Which I do so desire!
-int longest_match(TState &state,IPos cur_match)
-{
- unsigned chain_length = state.ds.max_chain_length; /* max hash chain length */
- register uch far *scan = state.ds.window + state.ds.strstart; /* current string */
- register uch far *match; /* matched string */
- register int len; /* length of current match */
- int best_len = state.ds.prev_length; /* best match length so far */
- IPos limit = state.ds.strstart > (IPos)MAX_DIST ? state.ds.strstart - (IPos)MAX_DIST : NIL;
- /* Stop when cur_match becomes <= limit. To simplify the code,
- * we prevent matches with the string of window index 0.
- */
-
- // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
- // It is easy to get rid of this optimization if necessary.
- Assert(state,HASH_BITS>=8 && MAX_MATCH==258,"Code too clever");
-
-
-
- register uch far *strend = state.ds.window + state.ds.strstart + MAX_MATCH;
- register uch scan_end1 = scan[best_len-1];
- register uch scan_end = scan[best_len];
-
- /* Do not waste too much time if we already have a good match: */
- if (state.ds.prev_length >= state.ds.good_match) {
- chain_length >>= 2;
- }
-
- Assert(state,state.ds.strstart <= state.ds.window_size-MIN_LOOKAHEAD, "insufficient lookahead");
-
- do {
- Assert(state,cur_match < state.ds.strstart, "no future");
- match = state.ds.window + cur_match;
-
- /* Skip to next match if the match length cannot increase
- * or if the match length is less than 2:
- */
- if (match[best_len] != scan_end ||
- match[best_len-1] != scan_end1 ||
- *match != *scan ||
- *++match != scan[1]) continue;
-
- /* The check at best_len-1 can be removed because it will be made
- * again later. (This heuristic is not always a win.)
- * It is not necessary to compare scan[2] and match[2] since they
- * are always equal when the other bytes match, given that
- * the hash keys are equal and that HASH_BITS >= 8.
- */
- scan += 2, match++;
-
- /* We check for insufficient lookahead only every 8th comparison;
- * the 256th check will be made at strstart+258.
- */
- do {
- } while (*++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- *++scan == *++match && *++scan == *++match &&
- scan < strend);
-
- Assert(state,scan <= state.ds.window+(unsigned)(state.ds.window_size-1), "wild scan");
-
- len = MAX_MATCH - (int)(strend - scan);
- scan = strend - MAX_MATCH;
-
-
- if (len > best_len) {
- state.ds.match_start = cur_match;
- best_len = len;
- if (len >= state.ds.nice_match) break;
- scan_end1 = scan[best_len-1];
- scan_end = scan[best_len];
- }
- } while ((cur_match = state.ds.prev[cur_match & WMASK]) > limit
- && --chain_length != 0);
-
- return best_len;
-}
-
-
-
-#define check_match(state,start, match, length)
-// or alternatively...
-//void check_match(TState &state,IPos start, IPos match, int length)
-//{ // check that the match is indeed a match
-// if (memcmp((char*)state.ds.window + match,
-// (char*)state.ds.window + start, length) != EQUAL) {
-// fprintf(stderr,
-// " start %d, match %d, length %d\n",
-// start, match, length);
-// error("invalid match");
-// }
-// if (state.verbose > 1) {
-// fprintf(stderr,"\\[%d,%d]", start-match, length);
-// do { fprintf(stdout,"%c",state.ds.window[start++]); } while (--length != 0);
-// }
-//}
-
-/* ===========================================================================
- * Fill the window when the lookahead becomes insufficient.
- * Updates strstart and lookahead, and sets eofile if end of input file.
- *
- * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
- * At least one byte has been read, or eofile is set; file reads are
- * performed for at least two bytes (required for the translate_eol option).
- */
-void fill_window(TState &state)
-{
- register unsigned n, m;
- unsigned more; /* Amount of free space at the end of the window. */
-
- do {
- more = (unsigned)(state.ds.window_size - (ulg)state.ds.lookahead - (ulg)state.ds.strstart);
-
- /* If the window is almost full and there is insufficient lookahead,
- * move the upper half to the lower one to make room in the upper half.
- */
- if (more == (unsigned)EOF) {
- /* Very unlikely, but possible on 16 bit machine if strstart == 0
- * and lookahead == 1 (input done one byte at time)
- */
- more--;
-
- /* For MMAP or BIG_MEM, the whole input file is already in memory so
- * we must not perform sliding. We must however call (*read_buf)() in
- * order to compute the crc, update lookahead and possibly set eofile.
- */
- } else if (state.ds.strstart >= WSIZE+MAX_DIST && state.ds.sliding) {
-
- /* By the IN assertion, the window is not empty so we can't confuse
- * more == 0 with more == 64K on a 16 bit machine.
- */
- memcpy((char*)state.ds.window, (char*)state.ds.window+WSIZE, (unsigned)WSIZE);
- state.ds.match_start -= WSIZE;
- state.ds.strstart -= WSIZE; /* we now have strstart >= MAX_DIST: */
-
- state.ds.block_start -= (long) WSIZE;
-
- for (n = 0; n < HASH_SIZE; n++) {
- m = state.ds.head[n];
- state.ds.head[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
- }
- for (n = 0; n < WSIZE; n++) {
- m = state.ds.prev[n];
- state.ds.prev[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
- /* If n is not on any hash chain, prev[n] is garbage but
- * its value will never be used.
- */
- }
- more += WSIZE;
- }
- if (state.ds.eofile) return;
-
- /* If there was no sliding:
- * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
- * more == window_size - lookahead - strstart
- * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
- * => more >= window_size - 2*WSIZE + 2
- * In the MMAP or BIG_MEM case (not yet supported in gzip),
- * window_size == input_size + MIN_LOOKAHEAD &&
- * strstart + lookahead <= input_size => more >= MIN_LOOKAHEAD.
- * Otherwise, window_size == 2*WSIZE so more >= 2.
- * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
- */
- Assert(state,more >= 2, "more < 2");
-
- n = state.readfunc(state, (char*)state.ds.window+state.ds.strstart+state.ds.lookahead, more);
-
- if (n == 0 || n == (unsigned)EOF) {
- state.ds.eofile = 1;
- } else {
- state.ds.lookahead += n;
- }
- } while (state.ds.lookahead < MIN_LOOKAHEAD && !state.ds.eofile);
-}
-
-/* ===========================================================================
- * Flush the current block, with given end-of-file flag.
- * IN assertion: strstart is set to the end of the current match.
- */
-#define FLUSH_BLOCK(state,eof) \
- flush_block(state,state.ds.block_start >= 0L ? (char*)&state.ds.window[(unsigned)state.ds.block_start] : \
- (char*)NULL, (long)state.ds.strstart - state.ds.block_start, (eof))
-
-/* ===========================================================================
- * Processes a new input file and return its compressed length. This
- * function does not perform lazy evaluation of matches and inserts
- * new strings in the dictionary only for unmatched strings or for short
- * matches. It is used only for the fast compression options.
- */
-ulg deflate_fast(TState &state)
-{
- IPos hash_head = NIL; /* head of the hash chain */
- int flush; /* set if current block must be flushed */
- unsigned match_length = 0; /* length of best match */
-
- state.ds.prev_length = MIN_MATCH-1;
- while (state.ds.lookahead != 0) {
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- if (state.ds.lookahead >= MIN_MATCH)
- INSERT_STRING(state.ds.strstart, hash_head);
-
- /* Find the longest match, discarding those <= prev_length.
- * At this point we have always match_length < MIN_MATCH
- */
- if (hash_head != NIL && state.ds.strstart - hash_head <= MAX_DIST) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- /* Do not look for matches beyond the end of the input.
- * This is necessary to make deflate deterministic.
- */
- if ((unsigned)state.ds.nice_match > state.ds.lookahead) state.ds.nice_match = (int)state.ds.lookahead;
- match_length = longest_match (state,hash_head);
- /* longest_match() sets match_start */
- if (match_length > state.ds.lookahead) match_length = state.ds.lookahead;
- }
- if (match_length >= MIN_MATCH) {
- check_match(state,state.ds.strstart, state.ds.match_start, match_length);
-
- flush = ct_tally(state,state.ds.strstart-state.ds.match_start, match_length - MIN_MATCH);
-
- state.ds.lookahead -= match_length;
-
- /* Insert new strings in the hash table only if the match length
- * is not too large. This saves time but degrades compression.
- */
- if (match_length <= state.ds.max_insert_length
- && state.ds.lookahead >= MIN_MATCH) {
- match_length--; /* string at strstart already in hash table */
- do {
- state.ds.strstart++;
- INSERT_STRING(state.ds.strstart, hash_head);
- /* strstart never exceeds WSIZE-MAX_MATCH, so there are
- * always MIN_MATCH bytes ahead.
- */
- } while (--match_length != 0);
- state.ds.strstart++;
- } else {
- state.ds.strstart += match_length;
- match_length = 0;
- state.ds.ins_h = state.ds.window[state.ds.strstart];
- UPDATE_HASH(state.ds.ins_h, state.ds.window[state.ds.strstart+1]);
- Assert(state,MIN_MATCH==3,"Call UPDATE_HASH() MIN_MATCH-3 more times");
- }
- } else {
- /* No match, output a literal byte */
- flush = ct_tally (state,0, state.ds.window[state.ds.strstart]);
- state.ds.lookahead--;
- state.ds.strstart++;
- }
- if (flush) FLUSH_BLOCK(state,0), state.ds.block_start = state.ds.strstart;
-
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (state.ds.lookahead < MIN_LOOKAHEAD) fill_window(state);
- }
- return FLUSH_BLOCK(state,1); /* eof */
-}
-
-/* ===========================================================================
- * Same as above, but achieves better compression. We use a lazy
- * evaluation for matches: a match is finally adopted only if there is
- * no better match at the next window position.
- */
-ulg deflate(TState &state)
-{
- IPos hash_head = NIL; /* head of hash chain */
- IPos prev_match; /* previous match */
- int flush; /* set if current block must be flushed */
- int match_available = 0; /* set if previous match exists */
- register unsigned match_length = MIN_MATCH-1; /* length of best match */
-
- if (state.level <= 3) return deflate_fast(state); /* optimized for speed */
-
- /* Process the input block. */
- while (state.ds.lookahead != 0) {
- /* Insert the string window[strstart .. strstart+2] in the
- * dictionary, and set hash_head to the head of the hash chain:
- */
- if (state.ds.lookahead >= MIN_MATCH)
- INSERT_STRING(state.ds.strstart, hash_head);
-
- /* Find the longest match, discarding those <= prev_length.
- */
- state.ds.prev_length = match_length, prev_match = state.ds.match_start;
- match_length = MIN_MATCH-1;
-
- if (hash_head != NIL && state.ds.prev_length < state.ds.max_lazy_match &&
- state.ds.strstart - hash_head <= MAX_DIST) {
- /* To simplify the code, we prevent matches with the string
- * of window index 0 (in particular we have to avoid a match
- * of the string with itself at the start of the input file).
- */
- /* Do not look for matches beyond the end of the input.
- * This is necessary to make deflate deterministic.
- */
- if ((unsigned)state.ds.nice_match > state.ds.lookahead) state.ds.nice_match = (int)state.ds.lookahead;
- match_length = longest_match (state,hash_head);
- /* longest_match() sets match_start */
- if (match_length > state.ds.lookahead) match_length = state.ds.lookahead;
-
- /* Ignore a length 3 match if it is too distant: */
- if (match_length == MIN_MATCH && state.ds.strstart-state.ds.match_start > TOO_FAR){
- /* If prev_match is also MIN_MATCH, match_start is garbage
- * but we will ignore the current match anyway.
- */
- match_length = MIN_MATCH-1;
- }
- }
- /* If there was a match at the previous step and the current
- * match is not better, output the previous match:
- */
- if (state.ds.prev_length >= MIN_MATCH && match_length <= state.ds.prev_length) {
- unsigned max_insert = state.ds.strstart + state.ds.lookahead - MIN_MATCH;
- check_match(state,state.ds.strstart-1, prev_match, state.ds.prev_length);
- flush = ct_tally(state,state.ds.strstart-1-prev_match, state.ds.prev_length - MIN_MATCH);
-
- /* Insert in hash table all strings up to the end of the match.
- * strstart-1 and strstart are already inserted.
- */
- state.ds.lookahead -= state.ds.prev_length-1;
- state.ds.prev_length -= 2;
- do {
- if (++state.ds.strstart <= max_insert) {
- INSERT_STRING(state.ds.strstart, hash_head);
- /* strstart never exceeds WSIZE-MAX_MATCH, so there are
- * always MIN_MATCH bytes ahead.
- */
- }
- } while (--state.ds.prev_length != 0);
- state.ds.strstart++;
- match_available = 0;
- match_length = MIN_MATCH-1;
-
- if (flush) FLUSH_BLOCK(state,0), state.ds.block_start = state.ds.strstart;
-
- } else if (match_available) {
- /* If there was no match at the previous position, output a
- * single literal. If there was a match but the current match
- * is longer, truncate the previous match to a single literal.
- */
- if (ct_tally (state,0, state.ds.window[state.ds.strstart-1])) {
- FLUSH_BLOCK(state,0), state.ds.block_start = state.ds.strstart;
- }
- state.ds.strstart++;
- state.ds.lookahead--;
- } else {
- /* There is no previous match to compare with, wait for
- * the next step to decide.
- */
- match_available = 1;
- state.ds.strstart++;
- state.ds.lookahead--;
- }
-// Assert(state,strstart <= isize && lookahead <= isize, "a bit too far");
-
- /* Make sure that we always have enough lookahead, except
- * at the end of the input file. We need MAX_MATCH bytes
- * for the next match, plus MIN_MATCH bytes to insert the
- * string following the next match.
- */
- if (state.ds.lookahead < MIN_LOOKAHEAD) fill_window(state);
- }
- if (match_available) ct_tally (state,0, state.ds.window[state.ds.strstart-1]);
-
- return FLUSH_BLOCK(state,1); /* eof */
-}
-
-
-
-
-
-
-
-
-
-
-
-
-int putlocal(struct zlist far *z, WRITEFUNC wfunc,void *param)
-{ // Write a local header described by *z to file *f. Return a ZE_ error code.
- PUTLG(LOCSIG, f);
- PUTSH(z->ver, f);
- PUTSH(z->lflg, f);
- PUTSH(z->how, f);
- PUTLG(z->tim, f);
- PUTLG(z->crc, f);
- PUTLG(z->siz, f);
- PUTLG(z->len, f);
- PUTSH(z->nam, f);
- PUTSH(z->ext, f);
- size_t res = (size_t)wfunc(param, z->iname, (unsigned int)z->nam);
- if (res!=z->nam) return ZE_TEMP;
- if (z->ext)
- { res = (size_t)wfunc(param, z->extra, (unsigned int)z->ext);
- if (res!=z->ext) return ZE_TEMP;
- }
- return ZE_OK;
-}
-
-int putextended(struct zlist far *z, WRITEFUNC wfunc, void *param)
-{ // Write an extended local header described by *z to file *f. Returns a ZE_ code
- PUTLG(EXTLOCSIG, f);
- PUTLG(z->crc, f);
- PUTLG(z->siz, f);
- PUTLG(z->len, f);
- return ZE_OK;
-}
-
-int putcentral(struct zlist far *z, WRITEFUNC wfunc, void *param)
-{ // Write a central header entry of *z to file *f. Returns a ZE_ code.
- PUTLG(CENSIG, f);
- PUTSH(z->vem, f);
- PUTSH(z->ver, f);
- PUTSH(z->flg, f);
- PUTSH(z->how, f);
- PUTLG(z->tim, f);
- PUTLG(z->crc, f);
- PUTLG(z->siz, f);
- PUTLG(z->len, f);
- PUTSH(z->nam, f);
- PUTSH(z->cext, f);
- PUTSH(z->com, f);
- PUTSH(z->dsk, f);
- PUTSH(z->att, f);
- PUTLG(z->atx, f);
- PUTLG(z->off, f);
- if ((size_t)wfunc(param, z->iname, (unsigned int)z->nam) != z->nam ||
- (z->cext && (size_t)wfunc(param, z->cextra, (unsigned int)z->cext) != z->cext) ||
- (z->com && (size_t)wfunc(param, z->comment, (unsigned int)z->com) != z->com))
- return ZE_TEMP;
- return ZE_OK;
-}
-
-
-int putend(int n, ulg s, ulg c, extent m, char *z, WRITEFUNC wfunc, void *param)
-{ // write the end of the central-directory-data to file *f.
- PUTLG(ENDSIG, f);
- PUTSH(0, f);
- PUTSH(0, f);
- PUTSH(n, f);
- PUTSH(n, f);
- PUTLG(s, f);
- PUTLG(c, f);
- PUTSH(m, f);
- // Write the comment, if any
- if (m && wfunc(param, z, (unsigned int)m) != m) return ZE_TEMP;
- return ZE_OK;
-}
-
-
-
-
-
-
-const ulg crc_table[256] = {
- 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
- 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
- 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
- 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
- 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
- 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
- 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
- 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
- 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
- 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
- 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
- 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
- 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
- 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
- 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
- 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
- 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
- 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
- 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
- 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
- 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
- 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
- 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
- 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
- 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
- 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
- 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
- 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
- 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
- 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
- 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
- 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
- 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
- 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
- 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
- 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
- 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
- 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
- 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
- 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
- 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
- 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
- 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
- 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
- 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
- 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
- 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
- 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
- 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
- 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
- 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
- 0x2d02ef8dL
-};
-
-#define CRC32(c, b) (crc_table[((int)(c) ^ (b)) & 0xff] ^ ((c) >> 8))
-#define DO1(buf) crc = CRC32(crc, *buf++)
-#define DO2(buf) DO1(buf); DO1(buf)
-#define DO4(buf) DO2(buf); DO2(buf)
-#define DO8(buf) DO4(buf); DO4(buf)
-
-ulg crc32(ulg crc, const uch *buf, extent len)
-{ if (buf==NULL) return 0L;
- crc = crc ^ 0xffffffffL;
- while (len >= 8) {DO8(buf); len -= 8;}
- if (len) do {DO1(buf);} while (--len);
- return crc ^ 0xffffffffL; // (instead of ~c for 64-bit machines)
-}
-
-
-
-
-
-
-
-
-bool HasZipSuffix(const char *fn)
-{ const char *ext = fn+strlen(fn);
- while (ext>fn && *ext!='.') ext--;
- if (ext==fn && *ext!='.') return false;
- if (stricmp(ext,".Z")==0) return true;
- if (stricmp(ext,".zip")==0) return true;
- if (stricmp(ext,".zoo")==0) return true;
- if (stricmp(ext,".arc")==0) return true;
- if (stricmp(ext,".lzh")==0) return true;
- if (stricmp(ext,".arj")==0) return true;
- if (stricmp(ext,".gz")==0) return true;
- if (stricmp(ext,".tgz")==0) return true;
- return false;
-}
-
-
-__time32_t filetime2timet(const FILETIME ft)
-{ SYSTEMTIME st; FileTimeToSystemTime(&ft,&st);
- if (st.wYear<1970) {st.wYear=1970; st.wMonth=1; st.wDay=1;}
- if (st.wYear>=2038) {st.wYear=2037; st.wMonth=12; st.wDay=31;}
- struct tm tm;
- tm.tm_sec = st.wSecond;
- tm.tm_min = st.wMinute;
- tm.tm_hour = st.wHour;
- tm.tm_mday = st.wDay;
- tm.tm_mon = st.wMonth-1;
- tm.tm_year = st.wYear-1900;
- tm.tm_isdst = 0;
- __time32_t t = _mktime32(&tm);
- return t;
-}
-
-
-ZRESULT GetFileInfo(HANDLE hf, ulg *attr, long *size, iztimes *times, ulg *timestamp)
-{
- DWORD type=GetFileType(hf);
- if (type!=FILE_TYPE_DISK)
- return ZR_NOTINITED;
- // The handle must be a handle to a file
- // The date and time is returned in a long with the date most significant to allow
- // unsigned integer comparison of absolute times. The attributes have two
- // high bytes unix attr, and two low bytes a mapping of that to DOS attr.
- //struct stat s; int res=stat(fn,&s); if (res!=0) return false;
- // translate windows file attributes into zip ones.
- BY_HANDLE_FILE_INFORMATION bhi;
- BOOL res=GetFileInformationByHandle(hf,&bhi);
- if (!res)
- return ZR_NOFILE;
-
- // +++1.3
- /// Convert times from UTC to local time. MSDN says that FILETIME is local
- /// for FAT file system and UTC for NTFS system, but tests show that both FAT and NTFS
- /// return UTC time.
- {
- // Get time zone difference
- SYSTEMTIME stUTC, stLocal;
- GetSystemTime(&stUTC);
- GetLocalTime(&stLocal); // could be a few milliseconds difference, but should we care?
- FILETIME ftUTC, ftLocal;
- SystemTimeToFileTime(&stUTC, &ftUTC);
- SystemTimeToFileTime(&stLocal, &ftLocal);
- LONG64 uiUTC, uiLocal;
- memcpy (&uiUTC, &ftUTC, min(sizeof(LONG64), sizeof(FILETIME))); // use 'min' as safeguard, however both sizes should be the same: 64-bit
- memcpy (&uiLocal, &ftLocal, min(sizeof(LONG64), sizeof(FILETIME)));
- LONG64 uiTimeDiff = uiUTC - uiLocal;
-
- // apply difference
- FILETIME* pFileTimes[3] = { &bhi.ftLastWriteTime, &bhi.ftLastAccessTime, &bhi.ftCreationTime };
- for (int i=0; i<3; i++){
- LONG64 uiUTC_file;
- memcpy (&uiUTC_file, pFileTimes[i], min(sizeof(LONG64), sizeof(FILETIME)));
- LONG64 uiLocal_file = uiUTC_file - uiTimeDiff;
- memcpy (pFileTimes[i], &uiLocal_file, min(sizeof(LONG64), sizeof(FILETIME)));
- }
- }
-
- DWORD fa=bhi.dwFileAttributes;
- ulg a=0;
- // Zip uses the lower word for its interpretation of windows stuff
- if (fa&FILE_ATTRIBUTE_READONLY) a|=0x01;
- if (fa&FILE_ATTRIBUTE_HIDDEN) a|=0x02;
- if (fa&FILE_ATTRIBUTE_SYSTEM) a|=0x04;
- if (fa&FILE_ATTRIBUTE_DIRECTORY)a|=0x10;
- if (fa&FILE_ATTRIBUTE_ARCHIVE) a|=0x20;
- // It uses the upper word for standard unix attr, which we must manually construct
- if (fa&FILE_ATTRIBUTE_DIRECTORY)a|=0x40000000; // directory
- else a|=0x80000000; // normal file
- a|=0x01000000; // readable
- if (fa&FILE_ATTRIBUTE_READONLY) {}
- else a|=0x00800000; // writeable
- // now just a small heuristic to check if it's an executable:
- DWORD red, hsize=GetFileSize(hf,NULL); if (hsize>40)
- { SetFilePointer(hf,0,NULL,FILE_BEGIN); unsigned short magic; ReadFile(hf,&magic,sizeof(magic),&red,NULL);
- SetFilePointer(hf,36,NULL,FILE_BEGIN); unsigned long hpos; ReadFile(hf,&hpos,sizeof(hpos),&red,NULL);
- if (magic==0x54AD && hsize>hpos+4+20+28)
- { SetFilePointer(hf,hpos,NULL,FILE_BEGIN); unsigned long signature; ReadFile(hf,&signature,sizeof(signature),&red,NULL);
- if (signature==IMAGE_DOS_SIGNATURE || signature==IMAGE_OS2_SIGNATURE
- || signature==IMAGE_OS2_SIGNATURE_LE || signature==IMAGE_NT_SIGNATURE)
- { a |= 0x00400000; // executable
- }
- }
- }
- //
- if (attr!=NULL) *attr = a;
- if (size!=NULL) *size = hsize;
- if (times!=NULL)
- { // time_t is 32bit number of seconds elapsed since 0:0:0GMT, Jan1, 1970.
- // but FILETIME is 64bit number of 100-nanosecs since Jan1, 1601
- times->atime = filetime2timet(bhi.ftLastAccessTime);
- times->mtime = filetime2timet(bhi.ftLastWriteTime);
- times->ctime = filetime2timet(bhi.ftCreationTime);
- }
- if (timestamp!=NULL)
- { WORD dosdate,dostime;
- FileTimeToDosDateTime(&bhi.ftLastWriteTime,&dosdate,&dostime);
- *timestamp = (WORD)dostime | (((DWORD)dosdate)<<16);
- }
- return ZR_OK;
-}
-
-
-
-
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-class TZip
-{ public:
- TZip() : hfout(0),hmapout(0),zfis(0),obuf(0),hfin(0),writ(0),oerr(false),hasputcen(false),ooffset(0) {}
- ~TZip() {}
-
- // These variables say about the file we're writing into
- // We can write to pipe, file-by-handle, file-by-name, memory-to-memmapfile
- HANDLE hfout; // if valid, we'll write here (for files or pipes)
- HANDLE hmapout; // otherwise, we'll write here (for memmap)
- unsigned ooffset; // for hfout, this is where the pointer was initially
- ZRESULT oerr; // did a write operation give rise to an error?
- unsigned writ; // how far have we written. This is maintained by Add, not write(), to avoid confusion over seeks
- bool ocanseek; // can we seek?
- char *obuf; // this is where we've locked mmap to view.
- unsigned int opos; // current pos in the mmap
- unsigned int mapsize; // the size of the map we created
- bool hasputcen; // have we yet placed the central directory?
- //
- TZipFileInfo *zfis; // each file gets added onto this list, for writing the table at the end
-
- ZRESULT Create(void *z,unsigned int len,DWORD flags);
- static unsigned sflush(void *param,const char *buf, unsigned *size);
- static unsigned swrite(void *param,const char *buf, unsigned size);
- unsigned int write(const char *buf,unsigned int size);
- bool oseek(unsigned int pos);
- ZRESULT GetMemory(void **pbuf, unsigned long *plen);
- ZRESULT Close();
-
- // some variables to do with the file currently being read:
- // I haven't done it object-orientedly here, just put them all
- // together, since OO didn't seem to make the design any clearer.
- ulg attr; iztimes times; ulg timestamp; // all open_* methods set these
- bool iseekable; long isize,ired; // size is not set until close() on pips
- ulg crc; // crc is not set until close(). iwrit is cumulative
- HANDLE hfin; bool selfclosehf; // for input files and pipes
- const char *bufin; unsigned int lenin,posin; // for memory
- // and a variable for what we've done with the input: (i.e. compressed it!)
- ulg csize; // compressed size, set by the compression routines
- // and this is used by some of the compression routines
- char buf[16384];
-
-
- ZRESULT open_file(const TCHAR *fn);
- ZRESULT open_handle(HANDLE hf,unsigned int len);
- ZRESULT open_mem(void *src,unsigned int len);
- ZRESULT open_dir();
- static unsigned sread(TState &s,char *buf,unsigned size);
- unsigned read(char *buf, unsigned size);
- ZRESULT iclose();
-
- ZRESULT ideflate(TZipFileInfo *zfi);
- ZRESULT istore();
-
- ZRESULT Add(const char *odstzn, void *src,unsigned int len, DWORD flags);
- ZRESULT AddCentral();
-
-};
-
-ZRESULT TZip::Create(void *z,unsigned int len,DWORD flags)
-{
- if (hfout!=0 || hmapout!=0 || obuf!=0 || writ!=0 || oerr!=ZR_OK || hasputcen)
- return ZR_NOTINITED;
- //
- if (flags==ZIP_HANDLE)
- {
- HANDLE hf = (HANDLE)z;
- BOOL res = DuplicateHandle(GetCurrentProcess(),hf,GetCurrentProcess(),&hfout,0,FALSE,DUPLICATE_SAME_ACCESS);
- if (!res)
- return ZR_NODUPH;
- // now we have our own hfout, which we must close. And the caller will close hf
- DWORD type = GetFileType(hfout);
- ocanseek = (type==FILE_TYPE_DISK);
- if (type==FILE_TYPE_DISK)
- ooffset=SetFilePointer(hfout,0,NULL,FILE_CURRENT);
- else
- ooffset=0;
- return ZR_OK;
- }
- else if (flags==ZIP_FILENAME)
- {
-#ifdef _UNICODE
- const TCHAR *fn = (const TCHAR*)z;
- hfout = CreateFileW(fn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
-#else
- const char *fn = (const char*)z;
- hfout = CreateFileA(fn,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
-#endif
-
- if (hfout==INVALID_HANDLE_VALUE)
- {
- hfout=0;
- return ZR_NOFILE;
- }
- ocanseek=true;
- ooffset=0;
- return ZR_OK;
- }
- else if (flags==ZIP_MEMORY)
- {
- unsigned int size = len;
- if (size==0)
- return ZR_MEMSIZE;
- if (z!=0)
- obuf=(char*)z;
- else
- {
- hmapout = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,size,NULL);
- if (hmapout==NULL)
- return ZR_NOALLOC;
- obuf = (char*)MapViewOfFile(hmapout,FILE_MAP_ALL_ACCESS,0,0,size);
- if (obuf==0)
- {
- CloseHandle(hmapout);
- hmapout=0;
- return ZR_NOALLOC;
- }
- }
- ocanseek=true;
- opos=0;
- mapsize=size;
- return ZR_OK;
- }
- else
- return ZR_ARGS;
-}
-
-
-unsigned TZip::sflush(void *param,const char *buf, unsigned *size)
-{ // static
- if (*size==0) return 0;
- TZip *zip = (TZip*)param;
- unsigned int writ = zip->write(buf,*size);
- if (writ!=0) *size=0;
- return writ;
-}
-unsigned TZip::swrite(void *param,const char *buf, unsigned size)
-{ // static
- if (size==0) return 0;
- TZip *zip=(TZip*)param; return zip->write(buf,size);
-}
-
-#if 0 // -----------------------------------------------------------
-unsigned int TZip::write(const char *buf,unsigned int size)
-{ if (obuf!=0)
- { if (opos+size>=mapsize) {oerr=ZR_MEMSIZE; return 0;}
- memcpy(obuf+opos, buf, size);
- opos+=size;
- return size;
- }
- else if (hfout!=0)
- { DWORD writ; WriteFile(hfout,buf,size,&writ,NULL);
- return writ;
- }
- oerr=ZR_NOTINITED; return 0;
-}
-#endif // -----------------------------------------------------------
-
-//+++1.2
-unsigned int TZip::write(const char *buf, unsigned int size)
-{
- if (obuf != 0)
- {
- if (opos+size >= mapsize)
- {
- int newmapsize = 2*mapsize>opos+size?2*mapsize:opos+size;
- HANDLE hmapout2 = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,newmapsize,NULL);
- if (hmapout2 == NULL)
- return ZR_NOALLOC;
- char *obuf2 = NULL; // this is where we've locked mmap to view.
-
- obuf2 = (char*)MapViewOfFile(hmapout2,FILE_MAP_ALL_ACCESS,0,0,newmapsize);
- if (obuf2 == 0)
- {
- CloseHandle(hmapout2);
- hmapout2 = 0;
- return ZR_NOALLOC;
- }
-
- memcpy(obuf2, obuf, mapsize);
-
- UnmapViewOfFile(obuf);
- CloseHandle(hmapout);
-
- mapsize = newmapsize;
- obuf = obuf2;
- hmapout = hmapout2;
- }
- memcpy(obuf+opos, buf, size);
- opos += size;
- return size;
- }
- else if (hfout!=0)
- {
- DWORD writ = 0;
- WriteFile(hfout,buf,size,&writ,NULL);
- return writ;
- }
- oerr = ZR_NOTINITED;
- return 0;
-}
-
-
-bool TZip::oseek(unsigned int pos)
-{ if (!ocanseek) {oerr=ZR_SEEK; return false;}
- if (obuf!=0)
- { if (pos>=mapsize) {oerr=ZR_MEMSIZE; return false;}
- opos=pos;
- return true;
- }
- else if (hfout!=0)
- { SetFilePointer(hfout,pos+ooffset,NULL,FILE_BEGIN);
- return true;
- }
- oerr=ZR_NOTINITED; return 0;
-}
-
-ZRESULT TZip::GetMemory(void **pbuf, unsigned long *plen)
-{ // When the user calls GetMemory, they're presumably at the end
- // of all their adding. In any case, we have to add the central
- // directory now, otherwise the memory we tell them won't be complete.
- if (!hasputcen) AddCentral(); hasputcen=true;
- if (pbuf!=NULL) *pbuf=(void*)obuf;
- if (plen!=NULL) *plen=writ;
- if (obuf==NULL) return ZR_NOTMMAP;
- return ZR_OK;
-}
-
-ZRESULT TZip::Close()
-{ // if the directory hadn't already been added through a call to GetMemory,
- // then we do it now
- ZRESULT res=ZR_OK; if (!hasputcen) res=AddCentral(); hasputcen=true;
- if (obuf!=0 && hmapout!=0) UnmapViewOfFile(obuf); obuf=0;
- if (hmapout!=0) CloseHandle(hmapout); hmapout=0;
- if (hfout!=0) CloseHandle(hfout); hfout=0;
- return res;
-}
-
-
-
-
-ZRESULT TZip::open_file(const TCHAR *fn)
-{ hfin=0; bufin=0; selfclosehf=false; crc=CRCVAL_INITIAL; isize=0; csize=0; ired=0;
- if (fn==0) return ZR_ARGS;
- HANDLE hf = CreateFile(fn,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
- if (hf==INVALID_HANDLE_VALUE) return ZR_NOFILE;
- ZRESULT res = open_handle(hf,0);
- if (res!=ZR_OK) {CloseHandle(hf); return res;}
- selfclosehf=true;
- return ZR_OK;
-}
-ZRESULT TZip::open_handle(HANDLE hf,unsigned int len)
-{ hfin=0; bufin=0; selfclosehf=false; crc=CRCVAL_INITIAL; isize=0; csize=0; ired=0;
- if (hf==0 || hf==INVALID_HANDLE_VALUE) return ZR_ARGS;
- DWORD type = GetFileType(hf);
- if (type==FILE_TYPE_DISK)
- { ZRESULT res = GetFileInfo(hf,&attr,&isize,&times,&timestamp);
- if (res!=ZR_OK) return res;
- SetFilePointer(hf,0,NULL,FILE_BEGIN); // because GetFileInfo will have screwed it up
- iseekable=true; hfin=hf;
- return ZR_OK;
- }
- else
- { attr= 0x80000000; // just a normal file
- isize = -1; // can't know size until at the end
- if (len!=0) isize=len; // unless we were told explicitly!
- iseekable=false;
- SYSTEMTIME st; GetLocalTime(&st);
- FILETIME ft; SystemTimeToFileTime(&st,&ft);
- WORD dosdate,dostime; FileTimeToDosDateTime(&ft,&dosdate,&dostime);
- times.atime = filetime2timet(ft);
- times.mtime = times.atime;
- times.ctime = times.atime;
- timestamp = (WORD)dostime | (((DWORD)dosdate)<<16);
- hfin=hf;
- return ZR_OK;
- }
-}
-ZRESULT TZip::open_mem(void *src,unsigned int len)
-{ hfin=0; bufin=(const char*)src; selfclosehf=false; crc=CRCVAL_INITIAL; ired=0; csize=0; ired=0;
- lenin=len; posin=0;
- if (src==0 || len==0) return ZR_ARGS;
- attr= 0x80000000; // just a normal file
- isize = len;
- iseekable=true;
- SYSTEMTIME st; GetLocalTime(&st);
- FILETIME ft; SystemTimeToFileTime(&st,&ft);
- WORD dosdate,dostime; FileTimeToDosDateTime(&ft,&dosdate,&dostime);
- times.atime = filetime2timet(ft);
- times.mtime = times.atime;
- times.ctime = times.atime;
- timestamp = (WORD)dostime | (((DWORD)dosdate)<<16);
- return ZR_OK;
-}
-ZRESULT TZip::open_dir()
-{ hfin=0; bufin=0; selfclosehf=false; crc=CRCVAL_INITIAL; isize=0; csize=0; ired=0;
- attr= 0x41C00010; // a readable writable directory, and again directory
- isize = 0;
- iseekable=false;
- SYSTEMTIME st; GetLocalTime(&st);
- FILETIME ft; SystemTimeToFileTime(&st,&ft);
- WORD dosdate,dostime; FileTimeToDosDateTime(&ft,&dosdate,&dostime);
- times.atime = filetime2timet(ft);
- times.mtime = times.atime;
- times.ctime = times.atime;
- timestamp = (WORD)dostime | (((DWORD)dosdate)<<16);
- return ZR_OK;
-}
-
-unsigned TZip::sread(TState &s,char *buf,unsigned size)
-{ // static
- TZip *zip = (TZip*)s.param;
- return zip->read(buf,size);
-}
-
-unsigned TZip::read(char *buf, unsigned size)
-{ if (bufin!=0)
- { if (posin>=lenin) return 0; // end of input
- ulg red = lenin-posin;
- if (red>size) red=size;
- memcpy(buf, bufin+posin, red);
- posin += red;
- ired += red;
- crc = crc32(crc, (uch*)buf, red);
- return red;
- }
- else if (hfin!=0)
- { DWORD red;
- BOOL ok = ReadFile(hfin,buf,size,&red,NULL);
- if (!ok) return 0;
- ired += red;
- crc = crc32(crc, (uch*)buf, red);
- return red;
- }
- else {oerr=ZR_NOTINITED; return 0;}
-}
-
-ZRESULT TZip::iclose()
-{ if (selfclosehf && hfin!=0) CloseHandle(hfin); hfin=0;
- bool mismatch = (isize!=-1 && isize!=ired);
- isize=ired; // and crc has been being updated anyway
- if (mismatch) return ZR_MISSIZE;
- else return ZR_OK;
-}
-
-
-
-#if 0 // -----------------------------------------------------------
-ZRESULT TZip::ideflate(TZipFileInfo *zfi)
-{ TState state;
- state.readfunc=sread; state.flush_outbuf=sflush;
- state.param=this; state.level=8; state.seekable=iseekable; state.err=NULL;
- // the following line will make ct_init realise it has to perform the init
- state.ts.static_dtree[0].dl.len = 0;
- // It would be nicer if I could figure out precisely which data had to
- // be initted each time, and which didn't, but that's kind of difficult.
- // Maybe for the next version...
- //
- bi_init(state,buf, sizeof(buf), TRUE); // it used to be just 1024-size, not 16384 as here
- ct_init(state,&zfi->att);
- lm_init(state,state.level, &zfi->flg);
- ulg sz = deflate(state);
- csize=sz;
- if (state.err!=NULL) return ZR_FLATE;
- else return ZR_OK;
-}
-#endif // -----------------------------------------------------------
-
-//+++1.2
-// create state object on heap
-ZRESULT TZip::ideflate(TZipFileInfo *zfi)
-{
- ZRESULT zr = ZR_OK;
- TState* state=new TState();
- (*state).readfunc=sread; (*state).flush_outbuf=sflush;
- (*state).param=this; (*state).level=8; (*state).seekable=iseekable; (*state).err=NULL;
- // the following line will make ct_init realise it has to perform the init
- (*state).ts.static_dtree[0].dl.len = 0;
- // It would be nicer if I could figure out precisely which data had to
- // be initted each time, and which didn't, but that's kind of difficult.
- // Maybe for the next version...
- //
- bi_init(*state,buf, sizeof(buf), TRUE); // it used to be just 1024-size, not 16384 as here
- ct_init(*state,&zfi->att);
- lm_init(*state,(*state).level, &zfi->flg);
- ulg sz = deflate(*state);
- csize=sz;
- if ((*state).err!=NULL)
- {
- zr = ZR_FLATE;
- }
- delete state;
- return zr;
-}
-
-ZRESULT TZip::istore()
-{ ulg size=0;
- for (;;)
- { unsigned int cin=read(buf,16384); if (cin<=0 || cin==(unsigned int)EOF) break;
- unsigned int cout = write(buf,cin); if (cout!=cin) return ZR_MISSIZE;
- size += cin;
- }
- csize=size;
- return ZR_OK;
-}
-
-
-
-
-ZRESULT TZip::Add(const char *odstzn, void *src,unsigned int len, DWORD flags)
-{
- if (oerr)
- return ZR_FAILED;
- if (hasputcen)
- return ZR_ENDED;
-
- // zip has its own notion of what its names should look like: i.e. dir/file.stuff
- char dstzn[MAX_PATH];
- strcpy(dstzn, odstzn);
- if (*dstzn == 0)
- return ZR_ARGS;
- char *d=dstzn;
- while (*d != 0)
- {
- if (*d == '\\')
- *d = '/'; d++;
- }
- bool isdir = (flags==ZIP_FOLDER);
- bool needs_trailing_slash = (isdir && dstzn[strlen(dstzn)-1]!='/');
- int method=DEFLATE;
- if (isdir || HasZipSuffix(dstzn))
- method=STORE;
-
- // now open whatever was our input source:
- ZRESULT openres;
- if (flags==ZIP_FILENAME)
- openres=open_file((const TCHAR*)src);
- else if (flags==ZIP_HANDLE)
- openres=open_handle((HANDLE)src,len);
- else if (flags==ZIP_MEMORY)
- openres=open_mem(src,len);
- else if (flags==ZIP_FOLDER)
- openres=open_dir();
- else return ZR_ARGS;
- if (openres!=ZR_OK)
- return openres;
-
- // A zip "entry" consists of a local header (which includes the file name),
- // then the compressed data, and possibly an extended local header.
-
- // Initialize the local header
- TZipFileInfo zfi; zfi.nxt=NULL;
- strcpy(zfi.name,"");
- strcpy(zfi.iname,dstzn);
- zfi.nam=strlen(zfi.iname);
- if (needs_trailing_slash)
- {
- strcat(zfi.iname,"/");
- zfi.nam++;
- }
- strcpy(zfi.zname,"");
- zfi.extra=NULL; zfi.ext=0; // extra header to go after this compressed data, and its length
- zfi.cextra=NULL; zfi.cext=0; // extra header to go in the central end-of-zip directory, and its length
- zfi.comment=NULL; zfi.com=0; // comment, and its length
- zfi.mark = 1;
- zfi.dosflag = 0;
- zfi.att = (ush)BINARY;
- zfi.vem = (ush)0xB17; // 0xB00 is win32 os-code. 0x17 is 23 in decimal: zip 2.3
- zfi.ver = (ush)20; // Needs PKUNZIP 2.0 to unzip it
- zfi.tim = timestamp;
- // Even though we write the header now, it will have to be rewritten, since we don't know compressed size or crc.
- zfi.crc = 0; // to be updated later
- zfi.flg = 8; // 8 means 'there is an extra header'. Assume for the moment that we need it.
- zfi.lflg = zfi.flg; // to be updated later
- zfi.how = (ush)method; // to be updated later
- zfi.siz = (ulg)(method==STORE && isize>=0 ? isize : 0); // to be updated later
- zfi.len = (ulg)(isize); // to be updated later
- zfi.dsk = 0;
- zfi.atx = attr;
- zfi.off = writ+ooffset; // offset within file of the start of this local record
- // stuff the 'times' structure into zfi.extra
- char xloc[EB_L_UT_SIZE];
- zfi.extra=xloc;
- zfi.ext=EB_L_UT_SIZE;
- char xcen[EB_C_UT_SIZE];
- zfi.cextra=xcen;
- zfi.cext=EB_C_UT_SIZE;
- xloc[0] = 'U';
- xloc[1] = 'T';
- xloc[2] = EB_UT_LEN(3); // length of data part of e.f.
- xloc[3] = 0;
- xloc[4] = EB_UT_FL_MTIME | EB_UT_FL_ATIME | EB_UT_FL_CTIME;
- xloc[5] = (char)(times.mtime);
- xloc[6] = (char)(times.mtime >> 8);
- xloc[7] = (char)(times.mtime >> 16);
- xloc[8] = (char)(times.mtime >> 24);
- xloc[9] = (char)(times.atime);
- xloc[10] = (char)(times.atime >> 8);
- xloc[11] = (char)(times.atime >> 16);
- xloc[12] = (char)(times.atime >> 24);
- xloc[13] = (char)(times.ctime);
- xloc[14] = (char)(times.ctime >> 8);
- xloc[15] = (char)(times.ctime >> 16);
- xloc[16] = (char)(times.ctime >> 24);
- memcpy(zfi.cextra,zfi.extra,EB_C_UT_SIZE);
- zfi.cextra[EB_LEN] = EB_UT_LEN(1);
-
-
- // (1) Start by writing the local header:
- int r = putlocal(&zfi,swrite,this);
- if (r!=ZE_OK)
- {
- iclose();
- return ZR_WRITE;
- }
- writ += 4 + LOCHEAD + (unsigned int)zfi.nam + (unsigned int)zfi.ext;
- if (oerr!=ZR_OK)
- {
- iclose();
- return oerr;
- }
-
- //(2) Write deflated/stored file to zip file
- ZRESULT writeres=ZR_OK;
- if (!isdir && method==DEFLATE)
- writeres=ideflate(&zfi);
- else if (!isdir && method==STORE)
- writeres=istore();
- else if (isdir)
- csize=0;
- iclose();
- writ += csize;
- if (oerr!=ZR_OK)
- return oerr;
- if (writeres!=ZR_OK)
- return ZR_WRITE;
-
- // (3) Either rewrite the local header with correct information...
- bool first_header_has_size_right = (zfi.siz==csize);
- zfi.crc = crc;
- zfi.siz = csize;
- zfi.len = isize;
- if (ocanseek)
- {
- zfi.how = (ush)method;
- if ((zfi.flg & 1) == 0)
- zfi.flg &= ~8; // clear the extended local header flag
- zfi.lflg = zfi.flg;
- // rewrite the local header:
- if (!oseek(zfi.off-ooffset))
- return ZR_SEEK;
- if ((r = putlocal(&zfi, swrite,this)) != ZE_OK)
- return ZR_WRITE;
- if (!oseek(writ))
- return ZR_SEEK;
- }
- else
- {
- // (4) ... or put an updated header at the end
- if (zfi.how != (ush) method)
- return ZR_NOCHANGE;
- if (method==STORE && !first_header_has_size_right)
- return ZR_NOCHANGE;
- if ((r = putextended(&zfi, swrite,this)) != ZE_OK)
- return ZR_WRITE;
- writ += 16L;
- zfi.flg = zfi.lflg; // if flg modified by inflate, for the central index
- }
- if (oerr!=ZR_OK)
- return oerr;
-
- // Keep a copy of the zipfileinfo, for our end-of-zip directory
- char *cextra = new char[zfi.cext];
- memcpy(cextra,zfi.cextra,zfi.cext); zfi.cextra=cextra;
- TZipFileInfo *pzfi = new TZipFileInfo;
- memcpy(pzfi,&zfi,sizeof(zfi));
- if (zfis==NULL)
- zfis=pzfi;
- else
- {
- TZipFileInfo *z=zfis;
- while (z->nxt!=NULL)
- z=z->nxt;
- z->nxt=pzfi;
- }
- return ZR_OK;
-}
-
-ZRESULT TZip::AddCentral()
-{ // write central directory
- int numentries = 0;
- ulg pos_at_start_of_central = writ;
- //ulg tot_unc_size=0, tot_compressed_size=0;
- bool okay=true;
- for (TZipFileInfo *zfi=zfis; zfi!=NULL; )
- { if (okay)
- { int res = putcentral(zfi, swrite,this);
- if (res!=ZE_OK) okay=false;
- }
- writ += 4 + CENHEAD + (unsigned int)zfi->nam + (unsigned int)zfi->cext + (unsigned int)zfi->com;
- //tot_unc_size += zfi->len;
- //tot_compressed_size += zfi->siz;
- numentries++;
- //
- TZipFileInfo *zfinext = zfi->nxt;
- if (zfi->cextra!=0) delete[] zfi->cextra;
- delete zfi;
- zfi = zfinext;
- }
- ulg center_size = writ - pos_at_start_of_central;
- if (okay)
- { int res = putend(numentries, center_size, pos_at_start_of_central+ooffset, 0, NULL, swrite,this);
- if (res!=ZE_OK) okay=false;
- writ += 4 + ENDHEAD + 0;
- }
- if (!okay) return ZR_WRITE;
- return ZR_OK;
-}
-
-
-
-
-
-ZRESULT lasterrorZ=ZR_OK;
-
-unsigned int FormatZipMessageZ(ZRESULT code, char *buf,unsigned int len)
-{ if (code==ZR_RECENT) code=lasterrorZ;
- const char *msg="unknown zip result code";
- switch (code)
- { case ZR_OK: msg="Success"; break;
- case ZR_NODUPH: msg="Culdn't duplicate handle"; break;
- case ZR_NOFILE: msg="Couldn't create/open file"; break;
- case ZR_NOALLOC: msg="Failed to allocate memory"; break;
- case ZR_WRITE: msg="Error writing to file"; break;
- case ZR_NOTFOUND: msg="File not found in the zipfile"; break;
- case ZR_MORE: msg="Still more data to unzip"; break;
- case ZR_CORRUPT: msg="Zipfile is corrupt or not a zipfile"; break;
- case ZR_READ: msg="Error reading file"; break;
- case ZR_ARGS: msg="Caller: faulty arguments"; break;
- case ZR_PARTIALUNZ: msg="Caller: the file had already been partially unzipped"; break;
- case ZR_NOTMMAP: msg="Caller: can only get memory of a memory zipfile"; break;
- case ZR_MEMSIZE: msg="Caller: not enough space allocated for memory zipfile"; break;
- case ZR_FAILED: msg="Caller: there was a previous error"; break;
- case ZR_ENDED: msg="Caller: additions to the zip have already been ended"; break;
- case ZR_ZMODE: msg="Caller: mixing creation and opening of zip"; break;
- case ZR_NOTINITED: msg="Zip-bug: internal initialisation not completed"; break;
- case ZR_SEEK: msg="Zip-bug: trying to seek the unseekable"; break;
- case ZR_MISSIZE: msg="Zip-bug: the anticipated size turned out wrong"; break;
- case ZR_NOCHANGE: msg="Zip-bug: tried to change mind, but not allowed"; break;
- case ZR_FLATE: msg="Zip-bug: an internal error during flation"; break;
- }
- unsigned int mlen=(unsigned int)strlen(msg);
- if (buf==0 || len==0) return mlen;
- unsigned int n=mlen; if (n+1>len) n=len-1;
- strncpy(buf,msg,n); buf[n]=0;
- return mlen;
-}
-
-
-
-typedef struct
-{ DWORD flag;
- TZip *zip;
-} TZipHandleData;
-
-
-HZIP CreateZipZ(void *z,unsigned int len,DWORD flags)
-{
- tzset();
- TZip *zip = new TZip();
- lasterrorZ = zip->Create(z,len,flags);
- if (lasterrorZ != ZR_OK)
- {
- delete zip;
- return 0;
- }
- TZipHandleData *han = new TZipHandleData;
- han->flag = 2;
- han->zip = zip;
- return (HZIP)han;
-}
-
-ZRESULT ZipAdd(HZIP hz, const TCHAR *dstzn, void *src, unsigned int len, DWORD flags)
-{
- if (hz == 0)
- {
- lasterrorZ = ZR_ARGS;
- return ZR_ARGS;
- }
-
- if (dstzn == NULL)
- {
- lasterrorZ = ZR_ARGS;
- return ZR_ARGS;
- }
-
- TZipHandleData *han = (TZipHandleData*)hz;
- if (han->flag != 2)
- {
- lasterrorZ = ZR_ZMODE;
- return ZR_ZMODE;
- }
- TZip *zip = han->zip;
-
-
- char szDest[MAX_PATH*2];
- memset(szDest, 0, sizeof(szDest));
-
-#ifdef _UNICODE
- // need to convert Unicode dest to ANSI
- int nActualChars = WideCharToMultiByte(CP_ACP, // code page
- 0, // performance and mapping flags
- (LPCWSTR) dstzn, // wide-character string
- -1, // number of chars in string
- szDest, // buffer for new string
- MAX_PATH*2, // size of buffer
- NULL, // default for unmappable chars
- NULL); // set when default char used
- if (nActualChars == 0)
- return ZR_ARGS;
-#else
- strcpy(szDest, dstzn);
-#endif
-
- lasterrorZ = zip->Add(szDest, src, len, flags);
-
- return lasterrorZ;
-}
-
-ZRESULT ZipGetMemory(HZIP hz, void **buf, unsigned long *len)
-{ if (hz==0) {if (buf!=0) *buf=0; if (len!=0) *len=0; lasterrorZ=ZR_ARGS;return ZR_ARGS;}
- TZipHandleData *han = (TZipHandleData*)hz;
- if (han->flag!=2) {lasterrorZ=ZR_ZMODE;return ZR_ZMODE;}
- TZip *zip = han->zip;
- lasterrorZ = zip->GetMemory(buf,len);
- return lasterrorZ;
-}
-
-ZRESULT CloseZipZ(HZIP hz)
-{ if (hz==0) {lasterrorZ=ZR_ARGS;return ZR_ARGS;}
- TZipHandleData *han = (TZipHandleData*)hz;
- if (han->flag!=2) {lasterrorZ=ZR_ZMODE;return ZR_ZMODE;}
- TZip *zip = han->zip;
- lasterrorZ = zip->Close();
- delete zip;
- delete han;
- return lasterrorZ;
-}
-
-bool IsZipHandleZ(HZIP hz)
-{ if (hz==0) return true;
- TZipHandleData *han = (TZipHandleData*)hz;
- return (han->flag==2);
-}
-
-//+++1.2
-/**
-* Added by Renaud Deysine. This fonctionnality was missing in API
-* @brief Add a folder to the zip file. Empty folders will also be added.
-* This method add recursively the content of a directory
-* @param AbsolutePath like "C:\\Windows" or "C:\\Windows\"
-* @param DirToAdd like "System32"
-*
-*/
-BOOL AddFolderContent(HZIP hZip, TCHAR* AbsolutePath, TCHAR* DirToAdd)
-{
- HANDLE hFind; // file handle
- WIN32_FIND_DATA FindFileData;
- TCHAR PathToSearchInto [MAX_PATH] = {0};
-
- if (NULL != DirToAdd)
- {
- ZipAdd(hZip, DirToAdd, 0, 0, ZIP_FOLDER);
- }
-
- // Construct the path to search into "C:\\Windows\\System32\\*"
- _tcscpy(PathToSearchInto, AbsolutePath);
- _tcscat(PathToSearchInto, _T("\\"));
- _tcscat(PathToSearchInto, DirToAdd);
- _tcscat(PathToSearchInto, _T("\\*"));
-
- hFind = FindFirstFile(PathToSearchInto,&FindFileData); // find the first file
- if(hFind == INVALID_HANDLE_VALUE)
- {
- return FALSE;
- }
-
- bool bSearch = true;
- while(bSearch) // until we finds an entry
- {
- if(FindNextFile(hFind,&FindFileData))
- {
- // Don't care about . and ..
- //if(IsDots(FindFileData.cFileName))
- if ((_tcscmp(FindFileData.cFileName, _T(".")) == 0) ||
- (_tcscmp(FindFileData.cFileName, _T("..")) == 0))
- continue;
-
- // We have found a directory
- if((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
- {
- TCHAR RelativePathNewDirFound[MAX_PATH] = {0};
- _tcscat(RelativePathNewDirFound, DirToAdd);
- _tcscat(RelativePathNewDirFound, _T("\\"));
- _tcscat(RelativePathNewDirFound, FindFileData.cFileName);
-
- // Recursive call with the new directory found
- if (AddFolderContent(hZip, AbsolutePath, RelativePathNewDirFound)== FALSE)
- {
- return FALSE ;
- }
-
- }
- // We have found a file
- else
- {
- // Add the found file to the zip file
- TCHAR RelativePathNewFileFound[MAX_PATH] = {0};
- _tcscpy(RelativePathNewFileFound, DirToAdd);
- _tcscat(RelativePathNewFileFound, _T("\\"));
- _tcscat(RelativePathNewFileFound, FindFileData.cFileName);
-
- TCHAR AbsoluteSourceFile[MAX_PATH] = { 0 };
- _tcscpy(AbsoluteSourceFile, AbsolutePath);
- _tcscat(AbsoluteSourceFile, RelativePathNewFileFound);
-
- if (ZipAdd(hZip, RelativePathNewFileFound, AbsoluteSourceFile, 0, ZIP_FILENAME) != ZR_OK)
- {
- return FALSE;
- }
- }
-
- }//FindNextFile
- else
- {
- if(GetLastError() == ERROR_NO_MORE_FILES) // no more files there
- bSearch = false;
- else {
- // some error occured, close the handle and return FALSE
- FindClose(hFind);
- return FALSE;
- }
- }
- }//while
-
- FindClose(hFind); // closing file handle
- return true;
-
-}
-
diff --git a/src/Common/XZip.h b/src/Common/XZip.h
deleted file mode 100644
index b1d43a9..0000000
--- a/src/Common/XZip.h
+++ /dev/null
@@ -1,323 +0,0 @@
-// XZip.h Version 1.3
-//
-// Authors: Mark Adler et al. (see below)
-//
-// Modified by: Lucian Wischik
-// lu@wischik.com
-//
-// Version 1.0 - Turned C files into just a single CPP file
-// - Made them compile cleanly as C++ files
-// - Gave them simpler APIs
-// - Added the ability to zip/unzip directly in memory without
-// any intermediate files
-//
-// Modified by: Hans Dietrich
-// hdietrich@gmail.com
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Lucian Wischik's comments:
-// --------------------------
-// THIS FILE is almost entirely based upon code by info-zip.
-// It has been modified by Lucian Wischik.
-// The original code may be found at http://www.info-zip.org
-// The original copyright text follows.
-//
-///////////////////////////////////////////////////////////////////////////////
-//
-// Original authors' comments:
-// ---------------------------
-// This is version 2002-Feb-16 of the Info-ZIP copyright and license. The
-// definitive version of this document should be available at
-// ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely.
-//
-// Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
-//
-// For the purposes of this copyright and license, "Info-ZIP" is defined as
-// the following set of individuals:
-//
-// Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
-// Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase,
-// Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
-// David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
-// Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
-// Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler,
-// Antoine Verheijen, Paul von Behren, Rich Wales, Mike White
-//
-// This software is provided "as is", without warranty of any kind, express
-// or implied. In no event shall Info-ZIP or its contributors be held liable
-// for any direct, indirect, incidental, special or consequential damages
-// arising out of the use of or inability to use this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// definition, disclaimer, and this list of conditions.
-//
-// 2. Redistributions in binary form (compiled executables) must reproduce
-// the above copyright notice, definition, disclaimer, and this list of
-// conditions in documentation and/or other materials provided with the
-// distribution. The sole exception to this condition is redistribution
-// of a standard UnZipSFX binary as part of a self-extracting archive;
-// that is permitted without inclusion of this license, as long as the
-// normal UnZipSFX banner has not been removed from the binary or disabled.
-//
-// 3. Altered versions--including, but not limited to, ports to new
-// operating systems, existing ports with new graphical interfaces, and
-// dynamic, shared, or static library versions--must be plainly marked
-// as such and must not be misrepresented as being the original source.
-// Such altered versions also must not be misrepresented as being
-// Info-ZIP releases--including, but not limited to, labeling of the
-// altered versions with the names "Info-ZIP" (or any variation thereof,
-// including, but not limited to, different capitalizations),
-// "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of
-// Info-ZIP. Such altered versions are further prohibited from
-// misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or
-// of the Info-ZIP URL(s).
-//
-// 4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip",
-// "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its
-// own source and binary releases.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef XZIP_H
-#define XZIP_H
-
-// ZIP functions -- for creating zip files
-// This file is a repackaged form of the Info-Zip source code available
-// at www.info-zip.org. The original copyright notice may be found in
-// zip.cpp. The repackaging was done by Lucian Wischik to simplify its
-// use in Windows/C++.
-
-#ifndef XUNZIP_H
-DECLARE_HANDLE(HZIP); // An HZIP identifies a zip file that is being created
-#endif
-
-typedef DWORD ZRESULT; // result codes from any of the zip functions. Listed later.
-
-// flag values passed to some functions
-#define ZIP_HANDLE 1
-#define ZIP_FILENAME 2
-#define ZIP_MEMORY 3
-#define ZIP_FOLDER 4
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// CreateZip()
-//
-// Purpose: Create a zip archive file
-//
-// Parameters: z - archive file name if flags is ZIP_FILENAME; for other
-// uses see below
-// len - for memory (ZIP_MEMORY) should be the buffer size;
-// for other uses, should be 0
-// flags - indicates usage, see below; for files, this will be
-// ZIP_FILENAME
-//
-// Returns: HZIP - non-zero if zip archive created ok, otherwise 0
-//
-HZIP CreateZip(void *z, unsigned int len, DWORD flags);
-// CreateZip - call this to start the creation of a zip file.
-// As the zip is being created, it will be stored somewhere:
-// to a pipe: CreateZip(hpipe_write, 0,ZIP_HANDLE);
-// in a file (by handle): CreateZip(hfile, 0,ZIP_HANDLE);
-// in a file (by name): CreateZip("c:\\test.zip", 0,ZIP_FILENAME);
-// in memory: CreateZip(buf, len,ZIP_MEMORY);
-// or in pagefile memory: CreateZip(0, len,ZIP_MEMORY);
-// The final case stores it in memory backed by the system paging file,
-// where the zip may not exceed len bytes. This is a bit friendlier than
-// allocating memory with new[]: it won't lead to fragmentation, and the
-// memory won't be touched unless needed.
-// Note: because pipes don't allow random access, the structure of a zipfile
-// created into a pipe is slightly different from that created into a file
-// or memory. In particular, the compressed-size of the item cannot be
-// stored in the zipfile until after the item itself. (Also, for an item added
-// itself via a pipe, the uncompressed-size might not either be known until
-// after.) This is not normally a problem. But if you try to unzip via a pipe
-// as well, then the unzipper will not know these things about the item until
-// after it has been unzipped. Therefore: for unzippers which don't just write
-// each item to disk or to a pipe, but instead pre-allocate memory space into
-// which to unzip them, then either you have to create the zip not to a pipe,
-// or you have to add items not from a pipe, or at least when adding items
-// from a pipe you have to specify the length.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// ZipAdd()
-//
-// Purpose: Add a file to a zip archive
-//
-// Parameters: hz - handle to an open zip archive
-// dstzn - name used inside the zip archive to identify the file
-// src - for a file (ZIP_FILENAME) this specifies the filename
-// to be added to the archive; for other uses, see below
-// len - for memory (ZIP_MEMORY) this specifies the buffer
-// length; for other uses, this should be 0
-// flags - indicates usage, see below; for files, this will be
-// ZIP_FILENAME
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-ZRESULT ZipAdd(HZIP hz, const TCHAR *dstzn, void *src, unsigned int len, DWORD flags);
-// ZipAdd - call this for each file to be added to the zip.
-// dstzn is the name that the file will be stored as in the zip file.
-// The file to be added to the zip can come
-// from a pipe: ZipAdd(hz,"file.dat", hpipe_read,0,ZIP_HANDLE);
-// from a file: ZipAdd(hz,"file.dat", hfile,0,ZIP_HANDLE);
-// from a fname: ZipAdd(hz,"file.dat", "c:\\docs\\origfile.dat",0,ZIP_FILENAME);
-// from memory: ZipAdd(hz,"subdir\\file.dat", buf,len,ZIP_MEMORY);
-// (folder): ZipAdd(hz,"subdir", 0,0,ZIP_FOLDER);
-// Note: if adding an item from a pipe, and if also creating the zip file itself
-// to a pipe, then you might wish to pass a non-zero length to the ZipAdd
-// function. This will let the zipfile store the items size ahead of the
-// compressed item itself, which in turn makes it easier when unzipping the
-// zipfile into a pipe.
-
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// CloseZip()
-//
-// Purpose: Close an open zip archive
-//
-// Parameters: hz - handle to an open zip archive
-//
-// Returns: ZRESULT - ZR_OK if success, otherwise some other value
-//
-ZRESULT CloseZip(HZIP hz);
-// CloseZip - the zip handle must be closed with this function.
-
-
-ZRESULT ZipGetMemory(HZIP hz, void **buf, unsigned long *len);
-// ZipGetMemory - If the zip was created in memory, via ZipCreate(0,ZIP_MEMORY),
-// then this function will return information about that memory block.
-// buf will receive a pointer to its start, and len its length.
-// Note: you can't add any more after calling this.
-
-
-unsigned int FormatZipMessage(ZRESULT code, char *buf,unsigned int len);
-// FormatZipMessage - given an error code, formats it as a string.
-// It returns the length of the error message. If buf/len points
-// to a real buffer, then it also writes as much as possible into there.
-
-
-
-// These are the result codes:
-#define ZR_OK 0x00000000 // nb. the pseudo-code zr-recent is never returned,
-#define ZR_RECENT 0x00000001 // but can be passed to FormatZipMessage.
-// The following come from general system stuff (e.g. files not openable)
-#define ZR_GENMASK 0x0000FF00
-#define ZR_NODUPH 0x00000100 // couldn't duplicate the handle
-#define ZR_NOFILE 0x00000200 // couldn't create/open the file
-#define ZR_NOALLOC 0x00000300 // failed to allocate some resource
-#define ZR_WRITE 0x00000400 // a general error writing to the file
-#define ZR_NOTFOUND 0x00000500 // couldn't find that file in the zip
-#define ZR_MORE 0x00000600 // there's still more data to be unzipped
-#define ZR_CORRUPT 0x00000700 // the zipfile is corrupt or not a zipfile
-#define ZR_READ 0x00000800 // a general error reading the file
-// The following come from mistakes on the part of the caller
-#define ZR_CALLERMASK 0x00FF0000
-#define ZR_ARGS 0x00010000 // general mistake with the arguments
-#define ZR_NOTMMAP 0x00020000 // tried to ZipGetMemory, but that only works on mmap zipfiles, which yours wasn't
-#define ZR_MEMSIZE 0x00030000 // the memory size is too small
-#define ZR_FAILED 0x00040000 // the thing was already failed when you called this function
-#define ZR_ENDED 0x00050000 // the zip creation has already been closed
-#define ZR_MISSIZE 0x00060000 // the indicated input file size turned out mistaken
-#define ZR_PARTIALUNZ 0x00070000 // the file had already been partially unzipped
-#define ZR_ZMODE 0x00080000 // tried to mix creating/opening a zip
-// The following come from bugs within the zip library itself
-#define ZR_BUGMASK 0xFF000000
-#define ZR_NOTINITED 0x01000000 // initialisation didn't work
-#define ZR_SEEK 0x02000000 // trying to seek in an unseekable file
-#define ZR_NOCHANGE 0x04000000 // changed its mind on storage, but not allowed
-#define ZR_FLATE 0x05000000 // an internal error in the de/inflation code
-
-
-
-// e.g.
-//
-// (1) Traditional use, creating a zipfile from existing files
-// HZIP hz = CreateZip("c:\\temp.zip",0,ZIP_FILENAME);
-// ZipAdd(hz,"src1.txt", "c:\\src1.txt",0,ZIP_FILENAME);
-// ZipAdd(hz,"src2.bmp", "c:\\src2_origfn.bmp",0,ZIP_FILENAME);
-// CloseZip(hz);
-//
-// (2) Memory use, creating an auto-allocated mem-based zip file from various sources
-// HZIP hz = CreateZip(0,100000,ZIP_MEMORY);
-// // adding a conventional file...
-// ZipAdd(hz,"src1.txt", "c:\\src1.txt",0,ZIP_FILENAME);
-// // adding something from memory...
-// char buf[1000]; for (int i=0; i<1000; i++) buf[i]=(char)(i&0x7F);
-// ZipAdd(hz,"file.dat", buf,1000,ZIP_MEMORY);
-// // adding something from a pipe...
-// HANDLE hread,hwrite; CreatePipe(&hread,&write,NULL,0);
-// HANDLE hthread = CreateThread(ThreadFunc,(void*)hwrite);
-// ZipAdd(hz,"unz3.dat", hread,0,ZIP_HANDLE);
-// WaitForSingleObject(hthread,INFINITE);
-// CloseHandle(hthread); CloseHandle(hread);
-// ... meanwhile DWORD CALLBACK ThreadFunc(void *dat)
-// { HANDLE hwrite = (HANDLE)dat;
-// char buf[1000]={17};
-// DWORD writ; WriteFile(hwrite,buf,1000,&writ,NULL);
-// CloseHandle(hwrite);
-// return 0;
-// }
-// // and now that the zip is created, let's do something with it:
-// void *zbuf; unsigned long zlen; ZipGetMemory(hz,&zbuf,&zlen);
-// HANDLE hfz = CreateFile("test2.zip",GENERIC_WRITE,CREATE_ALWAYS);
-// DWORD writ; WriteFile(hfz,zbuf,zlen,&writ,NULL);
-// CloseHandle(hfz);
-// CloseZip(hz);
-//
-// (3) Handle use, for file handles and pipes
-// HANDLE hzread,hzwrite; CreatePipe(&hzread,&hzwrite);
-// HANDLE hthread = CreateThread(ZipReceiverThread,(void*)hread);
-// HZIP hz = ZipCreate(hzwrite,ZIP_HANDLE);
-// // ... add to it
-// CloseZip(hz);
-// CloseHandle(hzwrite);
-// WaitForSingleObject(hthread,INFINITE);
-// CloseHandle(hthread);
-// ... meanwhile DWORD CALLBACK ThreadFunc(void *dat)
-// { HANDLE hread = (HANDLE)dat;
-// char buf[1000];
-// while (true)
-// { DWORD red; ReadFile(hread,buf,1000,&red,NULL);
-// // ... and do something with this zip data we're receiving
-// if (red==0) break;
-// }
-// CloseHandle(hread);
-// return 0;
-// }
-//
-
-
-// Now we indulge in a little skullduggery so that the code works whether
-// the user has included just zip or both zip and unzip.
-// Idea: if header files for both zip and unzip are present, then presumably
-// the cpp files for zip and unzip are both present, so we will call
-// one or the other of them based on a dynamic choice. If the header file
-// for only one is present, then we will bind to that particular one.
-HZIP CreateZipZ(void *z,unsigned int len,DWORD flags);
-ZRESULT CloseZipZ(HZIP hz);
-unsigned int FormatZipMessageZ(ZRESULT code, char *buf,unsigned int len);
-bool IsZipHandleZ(HZIP hz);
-BOOL AddFolderContent(HZIP hZip, TCHAR* AbsolutePath, TCHAR* DirToAdd);
-
-#define CreateZip CreateZipZ
-
-#ifdef XUNZIP_H
-#undef CloseZip
-#define CloseZip(hz) (IsZipHandleZ(hz)?CloseZipZ(hz):CloseZipU(hz))
-#else
-#define CloseZip CloseZipZ
-#define FormatZipMessage FormatZipMessageZ
-#endif
-
-
-#endif //XZIP_H
diff --git a/src/Common/Xts.c b/src/Common/Xts.c
index 0297788..87c9de0 100644
--- a/src/Common/Xts.c
+++ b/src/Common/Xts.c
@@ -68,7 +68,7 @@ static void EncryptBufferXTSParallel (unsigned __int8 *buffer,
{
unsigned __int8 finalCarry;
unsigned __int8 whiteningValues [ENCRYPTION_DATA_UNIT_SIZE];
- unsigned __int8 whiteningValue [BYTES_PER_XTS_BLOCK];
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 whiteningValue [BYTES_PER_XTS_BLOCK];
unsigned __int8 byteBufUnitNo [BYTES_PER_XTS_BLOCK];
unsigned __int64 *whiteningValuesPtr64 = (unsigned __int64 *) whiteningValues;
unsigned __int64 *whiteningValuePtr64 = (unsigned __int64 *) whiteningValue;
@@ -208,7 +208,7 @@ static void EncryptBufferXTSNonParallel (unsigned __int8 *buffer,
int cipher)
{
unsigned __int8 finalCarry;
- unsigned __int8 whiteningValue [BYTES_PER_XTS_BLOCK];
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 whiteningValue [BYTES_PER_XTS_BLOCK];
unsigned __int8 byteBufUnitNo [BYTES_PER_XTS_BLOCK];
unsigned __int64 *whiteningValuePtr64 = (unsigned __int64 *) whiteningValue;
unsigned __int64 *bufPtr = (unsigned __int64 *) buffer;
diff --git a/src/Common/libzip/LICENSE b/src/Common/libzip/LICENSE
new file mode 100644
index 0000000..8e3a62c
--- /dev/null
+++ b/src/Common/libzip/LICENSE
@@ -0,0 +1,31 @@
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/Common/libzip/NEWS.md b/src/Common/libzip/NEWS.md
new file mode 100644
index 0000000..c915ce6
--- /dev/null
+++ b/src/Common/libzip/NEWS.md
@@ -0,0 +1,159 @@
+1.1.3 [2016-05-28]
+==================
+
+* Fix build on Windows when using autoconf.
+
+1.1.2 [2016-02-19]
+==================
+
+* Improve support for 3MF files
+
+1.1.1 [2016-02-07]
+==================
+
+* Build fixes for Linux
+* Fix some warnings reported by PVS-Studio
+
+1.1 [2016-01-26]
+================
+
+* ziptool(1): command line tool to modify zip archives
+* Speedups for archives with many entries
+* Coverity fixes
+* Better APK support
+* Support for running tests on Windows
+* More build fixes for Windows
+* Portability fixes
+* Documentation improvements
+
+1.0.1 [2015-05-04]
+==================
+
+* Build fixes for Windows.
+
+1.0 [2015-05-03]
+================
+
+* Implemented an I/O abstraction layer.
+* Added support for native Windows API for files.
+* Added support for setting the last modification time for a file.
+* Added a new type zip_error_t for errors.
+* Added more typedefs for structs.
+* Torrentzip support was removed.
+* CVE-2015-2331 was fixed.
+* Addressed all Coverity CIDs.
+
+0.11.2 [2013-12-19]
+===================
+
+* Support querying/setting operating system and external attributes.
+* For newly added files, set operating system to UNIX, permissions
+ to 0666 (0777 for directories).
+* Fix bug when writing zip archives containing files bigger than 4GB.
+
+0.11.1 [2013-04-27]
+===================
+
+* Fix bugs in zip_set_file_compression().
+* Include Xcode build infrastructure.
+
+0.11 [2013-03-23]
+=================
+
+* Added Zip64 support (large file support)
+* Added UTF-8 support for file names, file comments, and archive comments
+* Changed API for name and comment related functions for UTF-8 support
+* Added zip_discard()
+* Added ZIP_TRUNCATE for zip_open()
+* Added zip_set_file_compression()
+* Added API for accessing and modifying extra fields
+* Improved API type consistency
+* Use gcc4's visibility __attribute__
+* More changes for Windows support
+* Additional test cases
+
+0.10.1 [2012-03-20]
+===================
+
+* Fixed CVE-2012-1162
+* Fixed CVE-2012-1163
+
+0.10 [2010-03-18]
+=================
+
+* Added zip_get_num_entries(), deprecated zip_get_num_files().
+* Better windows support.
+* Support for traditional PKWARE encryption added.
+* Fix opening archives with more than 65535 entries.
+* Fix some memory leaks.
+* Fix cmake build and installation
+* Fix memory leak in error case in zip_open()
+* Fixed CVE-2011-0421 (no security implications though)
+* More documentation.
+
+0.9.3 [2010-02-01]
+==================
+
+* Include m4/ directory in distribution; some packagers need it.
+
+0.9.2 [2010-01-31]
+==================
+
+* Avoid passing uninitialized data to deflate().
+* Fix memory leak when closing zip archives.
+
+0.9.1 [2010-01-24]
+==================
+
+* Fix infinite loop on reading some broken files.
+* Optimization in time conversion (don't call localtime()).
+* Clear data descriptor flag in central directory, fixing Open Office files.
+* Allow more than 64k entries.
+
+0.9 [2008-07-25]
+==================
+
+* on Windows, explictly set dllimport/dllexport
+* remove erroneous references to GPL
+* add support for torrentzip
+* new functions: zip_get_archive_flag, zip_set_archive_flag
+* zip_source_zip: add flag to force recompression
+* zip_sorce_file: only keep file open while reading from it
+
+0.8 [2007-06-06]
+==================
+
+* fix for zip archives larger than 2GiB
+* fix zip_error_strerror to include libzip error string
+* add support for reading streamed zip files
+* new functions: zip_add_dir, zip_error_clear, zip_file_error_clear
+* add basic support for building with CMake (incomplete)
+
+0.7.1 [2006-05-18]
+==================
+
+* bugfix for zip_close
+
+0.7 [2006-05-06]
+================
+
+* struct zip_stat increased for future encryption support
+* zip_add return value changed (now returns new index of added file)
+* shared library major bump because of previous two
+* added functions for reading and writing file and archive comments.
+ New functions: zip_get_archive_comment, zip_get_file_comment,
+ zip_set_archive_comment, zip_set_file_comment, zip_unchange_archive
+
+0.6.1 [2005-07-14]
+==================
+
+* various bug fixes
+
+0.6 [2005-06-09]
+================
+
+* first standalone release
+* changed license to three-clause BSD
+* overhauled API
+* added man pages
+* install zipcmp and zipmerge
diff --git a/src/Common/libzip/compat.h b/src/Common/libzip/compat.h
new file mode 100644
index 0000000..4cc6703
--- /dev/null
+++ b/src/Common/libzip/compat.h
@@ -0,0 +1,181 @@
+#ifndef _HAD_LIBZIP_COMPAT_H
+#define _HAD_LIBZIP_COMPAT_H
+
+/*
+ compat.h -- compatibility defines.
+ Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* to have *_MAX definitions for all types when compiling with g++ */
+#define __STDC_LIMIT_MACROS
+
+#ifdef _WIN32
+#define ZIP_EXTERN __declspec(dllexport)
+/* for dup(), close(), etc. */
+#include <io.h>
+#endif
+
+#ifdef HAVE_STDBOOL_H
+#include <stdbool.h>
+#else
+typedef char bool;
+#define true 1
+#define false 0
+#endif
+
+#include <errno.h>
+
+/* at least MinGW does not provide EOPNOTSUPP, see
+ * http://sourceforge.net/p/mingw/bugs/263/
+ */
+#ifndef EOPNOTSUPP
+#define EOPNOTSUPP EINVAL
+#endif
+
+/* at least MinGW does not provide EOVERFLOW, see
+ * http://sourceforge.net/p/mingw/bugs/242/
+ */
+#ifndef EOVERFLOW
+#define EOVERFLOW EFBIG
+#endif
+
+#ifdef _WIN32
+#if defined(HAVE__CLOSE)
+#define close _close
+#endif
+#if defined(HAVE__DUP)
+#define dup _dup
+#endif
+/* crashes reported when using fdopen instead of _fdopen on Windows/Visual Studio 10/Win64 */
+#if defined(HAVE__FDOPEN)
+#define fdopen _fdopen
+#endif
+#if !defined(HAVE_FILENO) && defined(HAVE__FILENO)
+#define fileno _fileno
+#endif
+/* Windows' open() doesn't understand Unix permissions */
+#if defined(HAVE__OPEN)
+#define open(a, b, c) _open((a), (b))
+#endif
+#if defined(HAVE__SNPRINTF)
+#define snprintf _snprintf
+#endif
+#if defined(HAVE__STRDUP)
+#if !defined(HAVE_STRDUP) || defined(_WIN32)
+#undef strdup
+#define strdup _strdup
+#endif
+#endif
+#if !defined(HAVE__SETMODE) && defined(HAVE_SETMODE)
+#define _setmode setmode
+#endif
+#endif
+
+#ifndef HAVE_FSEEKO
+#define fseeko(s, o, w) (fseek((s), (long int)(o), (w)))
+#endif
+
+#ifndef HAVE_FTELLO
+#define ftello(s) ((long)ftell((s)))
+#endif
+
+#ifndef HAVE_MKSTEMP
+int _zip_mkstemp(char *);
+#define mkstemp _zip_mkstemp
+#endif
+
+#if !defined(HAVE_STRCASECMP)
+#if defined(HAVE__STRICMP)
+#define strcasecmp _stricmp
+#elif defined(HAVE_STRICMP)
+#define strcasecmp stricmp
+#endif
+#endif
+
+#if SIZEOF_OFF_T == 8
+#define ZIP_OFF_MAX ZIP_INT64_MAX
+#define ZIP_OFF_MIN ZIP_INT64_MIN
+#elif SIZEOF_OFF_T == 4
+#define ZIP_OFF_MAX ZIP_INT32_MAX
+#define ZIP_OFF_MIN ZIP_INT32_MIN
+#elif SIZEOF_OFF_T == 2
+#define ZIP_OFF_MAX ZIP_INT16_MAX
+#define ZIP_OFF_MIN ZIP_INT16_MIN
+#else
+#error unsupported size of off_t
+#endif
+
+#if defined(HAVE_FTELLO) && defined(HAVE_FSEEKO)
+#define ZIP_FSEEK_MAX ZIP_OFF_MAX
+#define ZIP_FSEEK_MIN ZIP_OFF_MIN
+#else
+#include <limits.h>
+#define ZIP_FSEEK_MAX LONG_MAX
+#define ZIP_FSEEK_MIN LONG_MIN
+#endif
+
+#ifndef SIZE_MAX
+#if SIZEOF_SIZE_T == 8
+#define SIZE_MAX ZIP_INT64_MAX
+#elif SIZEOF_SIZE_T == 4
+#define SIZE_MAX ZIP_INT32_MAX
+#elif SIZEOF_SIZE_T == 2
+#define SIZE_MAX ZIP_INT16_MAX
+#else
+#error unsupported size of size_t
+#endif
+#endif
+
+#ifndef PRId64
+#ifdef _MSC_VER
+#define PRId64 "I64d"
+#else
+#define PRId64 "lld"
+#endif
+#endif
+
+#ifndef PRIu64
+#ifdef _MSC_VER
+#define PRIu64 "I64u"
+#else
+#define PRIu64 "llu"
+#endif
+#endif
+
+#ifndef S_ISDIR
+#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
+#endif
+
+#endif /* compat.h */
diff --git a/src/Common/libzip/config.h b/src/Common/libzip/config.h
new file mode 100644
index 0000000..f4dec47
--- /dev/null
+++ b/src/Common/libzip/config.h
@@ -0,0 +1,72 @@
+#ifndef HAD_CONFIG_H
+#define HAD_CONFIG_H
+#ifndef _HAD_ZIPCONF_H
+#include "zipconf.h"
+#endif
+/* BEGIN DEFINES */
+/* #undef HAVE___PROGNAME */
+#define HAVE__CLOSE
+#define HAVE__DUP
+#define HAVE__FDOPEN
+#define HAVE__FILENO
+#define HAVE__OPEN
+#define HAVE__SETMODE
+#define HAVE__SNPRINTF
+#define HAVE__STRDUP
+#define HAVE__STRICMP
+#define HAVE_FILENO
+/* #undef HAVE_FSEEKO */
+/* #undef HAVE_FTELLO */
+/* #undef HAVE_GETPROGNAME */
+#define HAVE_OPEN
+/* #undef HAVE_MKSTEMP */
+#define HAVE_SETMODE
+/* #undef HAVE_SNPRINTF */
+/* #undef HAVE_SSIZE_T_LIBZIP */
+/* #undef HAVE_STRCASECMP */
+#define HAVE_STRDUP
+#define HAVE_STRICMP
+/* #undef HAVE_STRUCT_TM_TM_ZONE */
+/* #undef HAVE_STDBOOL_H */
+/* #undef HAVE_STRINGS_H */
+/* #undef HAVE_UNISTD_H */
+#define __INT8_LIBZIP 1
+#define INT8_T_LIBZIP 1
+#define UINT8_T_LIBZIP 1
+#define __INT16_LIBZIP 2
+#define INT16_T_LIBZIP 2
+#define UINT16_T_LIBZIP 2
+#define __INT32_LIBZIP 4
+#define INT32_T_LIBZIP 4
+#define UINT32_T_LIBZIP 4
+#define __INT64_LIBZIP 8
+#define INT64_T_LIBZIP 8
+#define UINT64_T_LIBZIP 8
+#define SIZEOF_OFF_T 4
+#ifdef _WIN64
+#define SIZE_T_LIBZIP 8
+#else
+#define SIZE_T_LIBZIP 4
+#endif
+/* #undef SSIZE_T_LIBZIP */
+/* #undef HAVE_DIRENT_H */
+/* #undef HAVE_NDIR_H */
+/* #undef HAVE_SYS_DIR_H */
+/* #undef HAVE_SYS_NDIR_H */
+/* END DEFINES */
+#define PACKAGE "libzip"
+#define VERSION "1.1.3"
+
+#ifndef HAVE_SSIZE_T_LIBZIP
+# if SIZE_T_LIBZIP == INT_LIBZIP
+typedef int ssize_t;
+# elif SIZE_T_LIBZIP == LONG_LIBZIP
+typedef long ssize_t;
+# elif SIZE_T_LIBZIP == LONG_LONG_LIBZIP
+typedef long long ssize_t;
+# else
+#error no suitable type for ssize_t found
+# endif
+#endif
+
+#endif /* HAD_CONFIG_H */
diff --git a/src/Common/libzip/mkstemp.c b/src/Common/libzip/mkstemp.c
new file mode 100644
index 0000000..2ccd3a4
--- /dev/null
+++ b/src/Common/libzip/mkstemp.c
@@ -0,0 +1,150 @@
+/* Adapted from NetBSB libc by Dieter Baron */
+
+/* NetBSD: gettemp.c,v 1.13 2003/12/05 00:57:36 uebayasi Exp */
+
+/*
+ * Copyright (c) 1987, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#ifdef _WIN32
+#include <io.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+
+int
+_zip_mkstemp(char *path)
+{
+#ifdef _WIN32
+ int ret;
+ ret = _creat(_mktemp(path), _S_IREAD|_S_IWRITE);
+ if (ret == -1) {
+ return 0;
+ } else {
+ return ret;
+ }
+#else
+ int fd;
+ char *start, *trv;
+ struct stat sbuf;
+ pid_t pid;
+
+ /* To guarantee multiple calls generate unique names even if
+ the file is not created. 676 different possibilities with 7
+ or more X's, 26 with 6 or less. */
+ static char xtra[2] = "aa";
+ int xcnt = 0;
+
+ pid = getpid();
+
+ /* Move to end of path and count trailing X's. */
+ for (trv = path; *trv; ++trv)
+ if (*trv == 'X')
+ xcnt++;
+ else
+ xcnt = 0;
+
+ /* Use at least one from xtra. Use 2 if more than 6 X's. */
+ if (*(trv - 1) == 'X')
+ *--trv = xtra[0];
+ if (xcnt > 6 && *(trv - 1) == 'X')
+ *--trv = xtra[1];
+
+ /* Set remaining X's to pid digits with 0's to the left. */
+ while (*--trv == 'X') {
+ *trv = (pid % 10) + '0';
+ pid /= 10;
+ }
+
+ /* update xtra for next call. */
+ if (xtra[0] != 'z')
+ xtra[0]++;
+ else {
+ xtra[0] = 'a';
+ if (xtra[1] != 'z')
+ xtra[1]++;
+ else
+ xtra[1] = 'a';
+ }
+
+ /*
+ * check the target directory; if you have six X's and it
+ * doesn't exist this runs for a *very* long time.
+ */
+ for (start = trv + 1;; --trv) {
+ if (trv <= path)
+ break;
+ if (*trv == '/') {
+ *trv = '\0';
+ if (stat(path, &sbuf))
+ return (0);
+ if (!S_ISDIR(sbuf.st_mode)) {
+ errno = ENOTDIR;
+ return (0);
+ }
+ *trv = '/';
+ break;
+ }
+ }
+
+ for (;;) {
+ if ((fd=open(path, O_CREAT|O_EXCL|O_RDWR|O_BINARY, 0600)) >= 0)
+ return (fd);
+ if (errno != EEXIST)
+ return (0);
+
+ /* tricky little algorithm for backward compatibility */
+ for (trv = start;;) {
+ if (!*trv)
+ return (0);
+ if (*trv == 'z')
+ *trv++ = 'a';
+ else {
+ if (isdigit((unsigned char)*trv))
+ *trv = 'a';
+ else
+ ++*trv;
+ break;
+ }
+ }
+ }
+ /*NOTREACHED*/
+#endif
+}
diff --git a/src/Common/libzip/zip.h b/src/Common/libzip/zip.h
new file mode 100644
index 0000000..27141b3
--- /dev/null
+++ b/src/Common/libzip/zip.h
@@ -0,0 +1,422 @@
+#ifndef _HAD_ZIP_H
+#define _HAD_ZIP_H
+
+/*
+ zip.h -- exported declarations.
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef ZIP_EXTERN
+# ifndef ZIP_STATIC
+# ifdef _WIN32
+# define ZIP_EXTERN __declspec(dllimport)
+# elif defined(__GNUC__) && __GNUC__ >= 4
+# define ZIP_EXTERN __attribute__ ((visibility ("default")))
+# else
+# define ZIP_EXTERN
+# endif
+# else
+# define ZIP_EXTERN
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#if 0
+} /* fix autoindent */
+#endif
+#endif
+
+#include <zipconf.h>
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <time.h>
+
+/* flags for zip_open */
+
+#define ZIP_CREATE 1
+#define ZIP_EXCL 2
+#define ZIP_CHECKCONS 4
+#define ZIP_TRUNCATE 8
+#define ZIP_RDONLY 16
+
+
+/* flags for zip_name_locate, zip_fopen, zip_stat, ... */
+
+#define ZIP_FL_NOCASE 1u /* ignore case on name lookup */
+#define ZIP_FL_NODIR 2u /* ignore directory component */
+#define ZIP_FL_COMPRESSED 4u /* read compressed data */
+#define ZIP_FL_UNCHANGED 8u /* use original data, ignoring changes */
+#define ZIP_FL_RECOMPRESS 16u /* force recompression of data */
+#define ZIP_FL_ENCRYPTED 32u /* read encrypted data (implies ZIP_FL_COMPRESSED) */
+#define ZIP_FL_ENC_GUESS 0u /* guess string encoding (is default) */
+#define ZIP_FL_ENC_RAW 64u /* get unmodified string */
+#define ZIP_FL_ENC_STRICT 128u /* follow specification strictly */
+#define ZIP_FL_LOCAL 256u /* in local header */
+#define ZIP_FL_CENTRAL 512u /* in central directory */
+/* 1024u reserved for internal use */
+#define ZIP_FL_ENC_UTF_8 2048u /* string is UTF-8 encoded */
+#define ZIP_FL_ENC_CP437 4096u /* string is CP437 encoded */
+#define ZIP_FL_OVERWRITE 8192u /* zip_file_add: if file with name exists, overwrite (replace) it */
+
+/* archive global flags flags */
+
+#define ZIP_AFL_RDONLY 2u /* read only -- cannot be cleared */
+
+
+/* create a new extra field */
+
+#define ZIP_EXTRA_FIELD_ALL ZIP_UINT16_MAX
+#define ZIP_EXTRA_FIELD_NEW ZIP_UINT16_MAX
+
+
+/* libzip error codes */
+
+#define ZIP_ER_OK 0 /* N No error */
+#define ZIP_ER_MULTIDISK 1 /* N Multi-disk zip archives not supported */
+#define ZIP_ER_RENAME 2 /* S Renaming temporary file failed */
+#define ZIP_ER_CLOSE 3 /* S Closing zip archive failed */
+#define ZIP_ER_SEEK 4 /* S Seek error */
+#define ZIP_ER_READ 5 /* S Read error */
+#define ZIP_ER_WRITE 6 /* S Write error */
+#define ZIP_ER_CRC 7 /* N CRC error */
+#define ZIP_ER_ZIPCLOSED 8 /* N Containing zip archive was closed */
+#define ZIP_ER_NOENT 9 /* N No such file */
+#define ZIP_ER_EXISTS 10 /* N File already exists */
+#define ZIP_ER_OPEN 11 /* S Can't open file */
+#define ZIP_ER_TMPOPEN 12 /* S Failure to create temporary file */
+#define ZIP_ER_ZLIB 13 /* Z Zlib error */
+#define ZIP_ER_MEMORY 14 /* N Malloc failure */
+#define ZIP_ER_CHANGED 15 /* N Entry has been changed */
+#define ZIP_ER_COMPNOTSUPP 16 /* N Compression method not supported */
+#define ZIP_ER_EOF 17 /* N Premature end of file */
+#define ZIP_ER_INVAL 18 /* N Invalid argument */
+#define ZIP_ER_NOZIP 19 /* N Not a zip archive */
+#define ZIP_ER_INTERNAL 20 /* N Internal error */
+#define ZIP_ER_INCONS 21 /* N Zip archive inconsistent */
+#define ZIP_ER_REMOVE 22 /* S Can't remove file */
+#define ZIP_ER_DELETED 23 /* N Entry has been deleted */
+#define ZIP_ER_ENCRNOTSUPP 24 /* N Encryption method not supported */
+#define ZIP_ER_RDONLY 25 /* N Read-only archive */
+#define ZIP_ER_NOPASSWD 26 /* N No password provided */
+#define ZIP_ER_WRONGPASSWD 27 /* N Wrong password provided */
+#define ZIP_ER_OPNOTSUPP 28 /* N Operation not supported */
+#define ZIP_ER_INUSE 29 /* N Resource still in use */
+#define ZIP_ER_TELL 30 /* S Tell error */
+
+/* type of system error value */
+
+#define ZIP_ET_NONE 0 /* sys_err unused */
+#define ZIP_ET_SYS 1 /* sys_err is errno */
+#define ZIP_ET_ZLIB 2 /* sys_err is zlib error code */
+
+/* compression methods */
+
+#define ZIP_CM_DEFAULT -1 /* better of deflate or store */
+#define ZIP_CM_STORE 0 /* stored (uncompressed) */
+#define ZIP_CM_SHRINK 1 /* shrunk */
+#define ZIP_CM_REDUCE_1 2 /* reduced with factor 1 */
+#define ZIP_CM_REDUCE_2 3 /* reduced with factor 2 */
+#define ZIP_CM_REDUCE_3 4 /* reduced with factor 3 */
+#define ZIP_CM_REDUCE_4 5 /* reduced with factor 4 */
+#define ZIP_CM_IMPLODE 6 /* imploded */
+/* 7 - Reserved for Tokenizing compression algorithm */
+#define ZIP_CM_DEFLATE 8 /* deflated */
+#define ZIP_CM_DEFLATE64 9 /* deflate64 */
+#define ZIP_CM_PKWARE_IMPLODE 10 /* PKWARE imploding */
+/* 11 - Reserved by PKWARE */
+#define ZIP_CM_BZIP2 12 /* compressed using BZIP2 algorithm */
+/* 13 - Reserved by PKWARE */
+#define ZIP_CM_LZMA 14 /* LZMA (EFS) */
+/* 15-17 - Reserved by PKWARE */
+#define ZIP_CM_TERSE 18 /* compressed using IBM TERSE (new) */
+#define ZIP_CM_LZ77 19 /* IBM LZ77 z Architecture (PFS) */
+#define ZIP_CM_WAVPACK 97 /* WavPack compressed data */
+#define ZIP_CM_PPMD 98 /* PPMd version I, Rev 1 */
+
+/* encryption methods */
+
+#define ZIP_EM_NONE 0 /* not encrypted */
+#define ZIP_EM_TRAD_PKWARE 1 /* traditional PKWARE encryption */
+#if 0 /* Strong Encryption Header not parsed yet */
+#define ZIP_EM_DES 0x6601 /* strong encryption: DES */
+#define ZIP_EM_RC2_OLD 0x6602 /* strong encryption: RC2, version < 5.2 */
+#define ZIP_EM_3DES_168 0x6603
+#define ZIP_EM_3DES_112 0x6609
+#define ZIP_EM_AES_128 0x660e
+#define ZIP_EM_AES_192 0x660f
+#define ZIP_EM_AES_256 0x6610
+#define ZIP_EM_RC2 0x6702 /* strong encryption: RC2, version >= 5.2 */
+#define ZIP_EM_RC4 0x6801
+#endif
+#define ZIP_EM_UNKNOWN 0xffff /* unknown algorithm */
+
+#define ZIP_OPSYS_DOS 0x00u
+#define ZIP_OPSYS_AMIGA 0x01u
+#define ZIP_OPSYS_OPENVMS 0x02u
+#define ZIP_OPSYS_UNIX 0x03u
+#define ZIP_OPSYS_VM_CMS 0x04u
+#define ZIP_OPSYS_ATARI_ST 0x05u
+#define ZIP_OPSYS_OS_2 0x06u
+#define ZIP_OPSYS_MACINTOSH 0x07u
+#define ZIP_OPSYS_Z_SYSTEM 0x08u
+#define ZIP_OPSYS_CPM 0x09u
+#define ZIP_OPSYS_WINDOWS_NTFS 0x0au
+#define ZIP_OPSYS_MVS 0x0bu
+#define ZIP_OPSYS_VSE 0x0cu
+#define ZIP_OPSYS_ACORN_RISC 0x0du
+#define ZIP_OPSYS_VFAT 0x0eu
+#define ZIP_OPSYS_ALTERNATE_MVS 0x0fu
+#define ZIP_OPSYS_BEOS 0x10u
+#define ZIP_OPSYS_TANDEM 0x11u
+#define ZIP_OPSYS_OS_400 0x12u
+#define ZIP_OPSYS_OS_X 0x13u
+
+#define ZIP_OPSYS_DEFAULT ZIP_OPSYS_UNIX
+
+
+enum zip_source_cmd {
+ ZIP_SOURCE_OPEN, /* prepare for reading */
+ ZIP_SOURCE_READ, /* read data */
+ ZIP_SOURCE_CLOSE, /* reading is done */
+ ZIP_SOURCE_STAT, /* get meta information */
+ ZIP_SOURCE_ERROR, /* get error information */
+ ZIP_SOURCE_FREE, /* cleanup and free resources */
+ ZIP_SOURCE_SEEK, /* set position for reading */
+ ZIP_SOURCE_TELL, /* get read position */
+ ZIP_SOURCE_BEGIN_WRITE, /* prepare for writing */
+ ZIP_SOURCE_COMMIT_WRITE, /* writing is done */
+ ZIP_SOURCE_ROLLBACK_WRITE, /* discard written changes */
+ ZIP_SOURCE_WRITE, /* write data */
+ ZIP_SOURCE_SEEK_WRITE, /* set position for writing */
+ ZIP_SOURCE_TELL_WRITE, /* get write position */
+ ZIP_SOURCE_SUPPORTS, /* check whether source supports command */
+ ZIP_SOURCE_REMOVE /* remove file */
+};
+typedef enum zip_source_cmd zip_source_cmd_t;
+
+#define ZIP_SOURCE_MAKE_COMMAND_BITMASK(cmd) (1<<(cmd))
+
+#define ZIP_SOURCE_SUPPORTS_READABLE (ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_OPEN) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_READ) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_CLOSE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_STAT) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_ERROR) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_FREE))
+
+#define ZIP_SOURCE_SUPPORTS_SEEKABLE (ZIP_SOURCE_SUPPORTS_READABLE \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_TELL) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SUPPORTS))
+
+#define ZIP_SOURCE_SUPPORTS_WRITABLE (ZIP_SOURCE_SUPPORTS_SEEKABLE \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_BEGIN_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_COMMIT_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_ROLLBACK_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_TELL_WRITE) \
+ | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_REMOVE))
+
+/* for use by sources */
+struct zip_source_args_seek {
+ zip_int64_t offset;
+ int whence;
+};
+
+typedef struct zip_source_args_seek zip_source_args_seek_t;
+#define ZIP_SOURCE_GET_ARGS(type, data, len, error) ((len) < sizeof(type) ? zip_error_set((error), ZIP_ER_INVAL, 0), (type *)NULL : (type *)(data))
+
+
+/* error information */
+/* use zip_error_*() to access */
+struct zip_error {
+ int zip_err; /* libzip error code (ZIP_ER_*) */
+ int sys_err; /* copy of errno (E*) or zlib error code */
+ char *str; /* string representation or NULL */
+};
+
+#define ZIP_STAT_NAME 0x0001u
+#define ZIP_STAT_INDEX 0x0002u
+#define ZIP_STAT_SIZE 0x0004u
+#define ZIP_STAT_COMP_SIZE 0x0008u
+#define ZIP_STAT_MTIME 0x0010u
+#define ZIP_STAT_CRC 0x0020u
+#define ZIP_STAT_COMP_METHOD 0x0040u
+#define ZIP_STAT_ENCRYPTION_METHOD 0x0080u
+#define ZIP_STAT_FLAGS 0x0100u
+
+struct zip_stat {
+ zip_uint64_t valid; /* which fields have valid values */
+ const char *name; /* name of the file */
+ zip_uint64_t index; /* index within archive */
+ zip_uint64_t size; /* size of file (uncompressed) */
+ zip_uint64_t comp_size; /* size of file (compressed) */
+ time_t mtime; /* modification time */
+ zip_uint32_t crc; /* crc of file data */
+ zip_uint16_t comp_method; /* compression method used */
+ zip_uint16_t encryption_method; /* encryption method used */
+ zip_uint32_t flags; /* reserved for future use */
+};
+
+struct zip;
+struct zip_file;
+struct zip_source;
+
+typedef struct zip zip_t;
+typedef struct zip_error zip_error_t;
+typedef struct zip_file zip_file_t;
+typedef struct zip_source zip_source_t;
+typedef struct zip_stat zip_stat_t;
+
+typedef zip_uint32_t zip_flags_t;
+
+typedef zip_int64_t (*zip_source_callback)(void *, void *, zip_uint64_t, zip_source_cmd_t);
+
+
+#ifndef ZIP_DISABLE_DEPRECATED
+ZIP_EXTERN zip_int64_t zip_add(zip_t *, const char *, zip_source_t *); /* use zip_file_add */
+ZIP_EXTERN zip_int64_t zip_add_dir(zip_t *, const char *); /* use zip_dir_add */
+ZIP_EXTERN const char *zip_get_file_comment(zip_t *, zip_uint64_t, int *, int); /* use zip_file_get_comment */
+ZIP_EXTERN int zip_get_num_files(zip_t *); /* use zip_get_num_entries instead */
+ZIP_EXTERN int zip_rename(zip_t *, zip_uint64_t, const char *); /* use zip_file_rename */
+ZIP_EXTERN int zip_replace(zip_t *, zip_uint64_t, zip_source_t *); /* use zip_file_replace */
+ZIP_EXTERN int zip_set_file_comment(zip_t *, zip_uint64_t, const char *, int); /* use zip_file_set_comment */
+ZIP_EXTERN int zip_error_get_sys_type(int); /* use zip_error_system_type */
+ZIP_EXTERN void zip_error_get(zip_t *, int *, int *); /* use zip_get_error, zip_error_code_zip / zip_error_code_system */
+ZIP_EXTERN int zip_error_to_str(char *, zip_uint64_t, int, int);
+ZIP_EXTERN void zip_file_error_get(zip_file_t *, int *, int *); /* use zip_file_get_error, zip_error_code_zip / zip_error_code_system */
+#endif
+
+ZIP_EXTERN int zip_archive_set_tempdir(zip_t *, const char *);
+ZIP_EXTERN int zip_close(zip_t *);
+ZIP_EXTERN int zip_delete(zip_t *, zip_uint64_t);
+ZIP_EXTERN zip_int64_t zip_dir_add(zip_t *, const char *, zip_flags_t);
+ZIP_EXTERN void zip_discard(zip_t *);
+
+ZIP_EXTERN zip_error_t *zip_get_error(zip_t *);
+ZIP_EXTERN void zip_error_clear(zip_t *);
+ZIP_EXTERN int zip_error_code_zip(const zip_error_t *);
+ZIP_EXTERN int zip_error_code_system(const zip_error_t *);
+ZIP_EXTERN void zip_error_fini(zip_error_t *);
+ZIP_EXTERN void zip_error_init(zip_error_t *);
+ZIP_EXTERN void zip_error_init_with_code(zip_error_t *, int);
+ZIP_EXTERN void zip_error_set(zip_error_t *, int, int);
+ZIP_EXTERN const char *zip_error_strerror(zip_error_t *);
+ZIP_EXTERN int zip_error_system_type(const zip_error_t *);
+ZIP_EXTERN zip_int64_t zip_error_to_data(const zip_error_t *, void *, zip_uint64_t);
+
+ZIP_EXTERN int zip_fclose(zip_file_t *);
+ZIP_EXTERN zip_t *zip_fdopen(int, int, int *);
+ZIP_EXTERN zip_int64_t zip_file_add(zip_t *, const char *, zip_source_t *, zip_flags_t);
+ZIP_EXTERN void zip_file_error_clear(zip_file_t *);
+ZIP_EXTERN int zip_file_extra_field_delete(zip_t *, zip_uint64_t, zip_uint16_t, zip_flags_t);
+ZIP_EXTERN int zip_file_extra_field_delete_by_id(zip_t *, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_flags_t);
+ZIP_EXTERN int zip_file_extra_field_set(zip_t *, zip_uint64_t, zip_uint16_t, zip_uint16_t, const zip_uint8_t *, zip_uint16_t, zip_flags_t);
+ZIP_EXTERN zip_int16_t zip_file_extra_fields_count(zip_t *, zip_uint64_t, zip_flags_t);
+ZIP_EXTERN zip_int16_t zip_file_extra_fields_count_by_id(zip_t *, zip_uint64_t, zip_uint16_t, zip_flags_t);
+ZIP_EXTERN const zip_uint8_t *zip_file_extra_field_get(zip_t *, zip_uint64_t, zip_uint16_t, zip_uint16_t *, zip_uint16_t *, zip_flags_t);
+ZIP_EXTERN const zip_uint8_t *zip_file_extra_field_get_by_id(zip_t *, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_uint16_t *, zip_flags_t);
+ZIP_EXTERN const char *zip_file_get_comment(zip_t *, zip_uint64_t, zip_uint32_t *, zip_flags_t);
+ZIP_EXTERN zip_error_t *zip_file_get_error(zip_file_t *);
+ZIP_EXTERN int zip_file_get_external_attributes(zip_t *, zip_uint64_t, zip_flags_t, zip_uint8_t *, zip_uint32_t *);
+ZIP_EXTERN int zip_file_rename(zip_t *, zip_uint64_t, const char *, zip_flags_t);
+ZIP_EXTERN int zip_file_replace(zip_t *, zip_uint64_t, zip_source_t *, zip_flags_t);
+ZIP_EXTERN int zip_file_set_comment(zip_t *, zip_uint64_t, const char *, zip_uint16_t, zip_flags_t);
+ZIP_EXTERN int zip_file_set_external_attributes(zip_t *, zip_uint64_t, zip_flags_t, zip_uint8_t, zip_uint32_t);
+ZIP_EXTERN int zip_file_set_mtime(zip_t *, zip_uint64_t, time_t, zip_flags_t);
+ZIP_EXTERN const char *zip_file_strerror(zip_file_t *);
+ZIP_EXTERN zip_file_t *zip_fopen(zip_t *, const char *, zip_flags_t);
+ZIP_EXTERN zip_file_t *zip_fopen_encrypted(zip_t *, const char *, zip_flags_t, const char *);
+ZIP_EXTERN zip_file_t *zip_fopen_index(zip_t *, zip_uint64_t, zip_flags_t);
+ZIP_EXTERN zip_file_t *zip_fopen_index_encrypted(zip_t *, zip_uint64_t, zip_flags_t, const char *);
+ZIP_EXTERN zip_int64_t zip_fread(zip_file_t *, void *, zip_uint64_t);
+ZIP_EXTERN const char *zip_get_archive_comment(zip_t *, int *, zip_flags_t);
+ZIP_EXTERN int zip_get_archive_flag(zip_t *, zip_flags_t, zip_flags_t);
+ZIP_EXTERN const char *zip_get_name(zip_t *, zip_uint64_t, zip_flags_t);
+ZIP_EXTERN zip_int64_t zip_get_num_entries(zip_t *, zip_flags_t);
+ZIP_EXTERN zip_int64_t zip_name_locate(zip_t *, const char *, zip_flags_t);
+ZIP_EXTERN zip_t *zip_open(const char *, int, int *);
+ZIP_EXTERN zip_t *zip_open_from_source(zip_source_t *, int, zip_error_t *);
+ZIP_EXTERN int zip_set_archive_comment(zip_t *, const char *, zip_uint16_t);
+ZIP_EXTERN int zip_set_archive_flag(zip_t *, zip_flags_t, int);
+ZIP_EXTERN int zip_set_default_password(zip_t *, const char *);
+ZIP_EXTERN int zip_set_file_compression(zip_t *, zip_uint64_t, zip_int32_t, zip_uint32_t);
+ZIP_EXTERN int zip_source_begin_write(zip_source_t *);
+ZIP_EXTERN zip_source_t *zip_source_buffer(zip_t *, const void *, zip_uint64_t, int);
+ZIP_EXTERN zip_source_t *zip_source_buffer_create(const void *, zip_uint64_t, int, zip_error_t *);
+ZIP_EXTERN int zip_source_close(zip_source_t *);
+ZIP_EXTERN int zip_source_commit_write(zip_source_t *);
+ZIP_EXTERN zip_error_t *zip_source_error(zip_source_t *src);
+ZIP_EXTERN zip_source_t *zip_source_file(zip_t *, const char *, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN zip_source_t *zip_source_file_create(const char *, zip_uint64_t, zip_int64_t, zip_error_t *);
+ZIP_EXTERN zip_source_t *zip_source_filep(zip_t *, FILE *, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN zip_source_t *zip_source_filep_create(FILE *, zip_uint64_t, zip_int64_t, zip_error_t *);
+ZIP_EXTERN void zip_source_free(zip_source_t *);
+ZIP_EXTERN zip_source_t *zip_source_function(zip_t *, zip_source_callback, void *);
+ZIP_EXTERN zip_source_t *zip_source_function_create(zip_source_callback, void *, zip_error_t *);
+ZIP_EXTERN int zip_source_is_deleted(zip_source_t *);
+ZIP_EXTERN void zip_source_keep(zip_source_t *);
+ZIP_EXTERN zip_int64_t zip_source_make_command_bitmap(zip_source_cmd_t, ...);
+ZIP_EXTERN int zip_source_open(zip_source_t *);
+ZIP_EXTERN zip_int64_t zip_source_read(zip_source_t *, void *, zip_uint64_t);
+ZIP_EXTERN void zip_source_rollback_write(zip_source_t *);
+ZIP_EXTERN int zip_source_seek(zip_source_t *, zip_int64_t, int);
+ZIP_EXTERN zip_int64_t zip_source_seek_compute_offset(zip_uint64_t, zip_uint64_t, void *, zip_uint64_t, zip_error_t *);
+ZIP_EXTERN int zip_source_seek_write(zip_source_t *, zip_int64_t, int);
+ZIP_EXTERN int zip_source_stat(zip_source_t *, zip_stat_t *);
+ZIP_EXTERN zip_int64_t zip_source_tell(zip_source_t *);
+ZIP_EXTERN zip_int64_t zip_source_tell_write(zip_source_t *);
+#ifdef _WIN32
+ZIP_EXTERN zip_source_t *zip_source_win32a(zip_t *, const char *, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN zip_source_t *zip_source_win32a_create(const char *, zip_uint64_t, zip_int64_t, zip_error_t *);
+ZIP_EXTERN zip_source_t *zip_source_win32handle(zip_t *, void *, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN zip_source_t *zip_source_win32handle_create(void *, zip_uint64_t, zip_int64_t, zip_error_t *);
+ZIP_EXTERN zip_source_t *zip_source_win32w(zip_t *, const wchar_t *, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN zip_source_t *zip_source_win32w_create(const wchar_t *, zip_uint64_t, zip_int64_t, zip_error_t *);
+#endif
+ZIP_EXTERN zip_int64_t zip_source_write(zip_source_t *, const void *, zip_uint64_t);
+ZIP_EXTERN zip_source_t *zip_source_zip(zip_t *, zip_t *, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t);
+ZIP_EXTERN int zip_stat(zip_t *, const char *, zip_flags_t, zip_stat_t *);
+ZIP_EXTERN int zip_stat_index(zip_t *, zip_uint64_t, zip_flags_t, zip_stat_t *);
+ZIP_EXTERN void zip_stat_init(zip_stat_t *);
+ZIP_EXTERN const char *zip_strerror(zip_t *);
+ZIP_EXTERN int zip_unchange(zip_t *, zip_uint64_t);
+ZIP_EXTERN int zip_unchange_all(zip_t *);
+ZIP_EXTERN int zip_unchange_archive(zip_t *);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _HAD_ZIP_H */
diff --git a/src/Common/libzip/zip_add.c b/src/Common/libzip/zip_add.c
new file mode 100644
index 0000000..d1be133
--- /dev/null
+++ b/src/Common/libzip/zip_add.c
@@ -0,0 +1,50 @@
+/*
+ zip_add.c -- add file via callback function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+/*
+ NOTE: Return type is signed so we can return -1 on error.
+ The index can not be larger than ZIP_INT64_MAX since the size
+ of the central directory cannot be larger than
+ ZIP_UINT64_MAX, and each entry is larger than 2 bytes.
+*/
+
+ZIP_EXTERN zip_int64_t
+zip_add(zip_t *za, const char *name, zip_source_t *source)
+{
+ return zip_file_add(za, name, source, 0);
+}
diff --git a/src/Common/libzip/zip_add_dir.c b/src/Common/libzip/zip_add_dir.c
new file mode 100644
index 0000000..14bdeda
--- /dev/null
+++ b/src/Common/libzip/zip_add_dir.c
@@ -0,0 +1,45 @@
+/*
+ zip_add_dir.c -- add directory
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+/* NOTE: Signed due to -1 on error. See zip_add.c for more details. */
+
+ZIP_EXTERN zip_int64_t
+zip_add_dir(zip_t *za, const char *name)
+{
+ return zip_dir_add(za, name, 0);
+}
diff --git a/src/Common/libzip/zip_add_entry.c b/src/Common/libzip/zip_add_entry.c
new file mode 100644
index 0000000..9a9465c
--- /dev/null
+++ b/src/Common/libzip/zip_add_entry.c
@@ -0,0 +1,81 @@
+/*
+ zip_add_entry.c -- create and init struct zip_entry
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+/* NOTE: Signed due to -1 on error. See zip_add.c for more details. */
+
+zip_int64_t
+_zip_add_entry(zip_t *za)
+{
+ zip_uint64_t idx;
+
+ if (za->nentry+1 >= za->nentry_alloc) {
+ zip_entry_t *rentries;
+ zip_uint64_t nalloc = za->nentry_alloc;
+ zip_uint64_t additional_entries = 2 * nalloc;
+ zip_uint64_t realloc_size;
+
+ if (additional_entries < 16) {
+ additional_entries = 16;
+ }
+ else if (additional_entries > 1024) {
+ additional_entries = 1024;
+ }
+ /* neither + nor * overflows can happen: nentry_alloc * sizeof(struct zip_entry) < UINT64_MAX */
+ nalloc += additional_entries;
+ realloc_size = sizeof(struct zip_entry) * (size_t)nalloc;
+
+ if (sizeof(struct zip_entry) * (size_t)za->nentry_alloc > realloc_size) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ rentries = (zip_entry_t *)realloc(za->entry, sizeof(struct zip_entry) * (size_t)nalloc);
+ if (!rentries) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ za->entry = rentries;
+ za->nentry_alloc = nalloc;
+ }
+
+ idx = za->nentry++;
+
+ _zip_entry_init(za->entry+idx);
+
+ return (zip_int64_t)idx;
+}
diff --git a/src/Common/libzip/zip_buffer.c b/src/Common/libzip/zip_buffer.c
new file mode 100644
index 0000000..43864f9
--- /dev/null
+++ b/src/Common/libzip/zip_buffer.c
@@ -0,0 +1,321 @@
+/*
+ zip_buffer.c -- bounds checked access to memory buffer
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+zip_uint8_t *
+_zip_buffer_data(zip_buffer_t *buffer)
+{
+ return buffer->data;
+}
+
+
+void
+_zip_buffer_free(zip_buffer_t *buffer)
+{
+ if (buffer == NULL) {
+ return;
+ }
+
+ if (buffer->free_data) {
+ free(buffer->data);
+ }
+
+ free(buffer);
+}
+
+
+bool
+_zip_buffer_eof(zip_buffer_t *buffer)
+{
+ return buffer->ok && buffer->offset == buffer->size;
+}
+
+
+zip_uint8_t *
+_zip_buffer_get(zip_buffer_t *buffer, zip_uint64_t length)
+{
+ zip_uint8_t *data;
+
+ if (!buffer->ok || buffer->offset + length < length || buffer->offset + length > buffer->size) {
+ buffer->ok = false;
+ return NULL;
+ }
+
+ data = buffer->data + buffer->offset;
+ buffer->offset += length;
+ return data;
+}
+
+
+zip_uint16_t
+_zip_buffer_get_16(zip_buffer_t *buffer)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 2);
+
+ if (data == NULL) {
+ return 0;
+ }
+
+ return (zip_uint16_t)(data[0] + (data[1] << 8));
+}
+
+
+zip_uint32_t
+_zip_buffer_get_32(zip_buffer_t *buffer)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 4);
+
+ if (data == NULL) {
+ return 0;
+ }
+
+ return ((((((zip_uint32_t)data[3] << 8) + data[2]) << 8) + data[1]) << 8) + data[0];
+}
+
+
+zip_uint64_t
+_zip_buffer_get_64(zip_buffer_t *buffer)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 8);
+
+ if (data == NULL) {
+ return 0;
+ }
+
+ return ((zip_uint64_t)data[7] << 56) + ((zip_uint64_t)data[6] << 48) + ((zip_uint64_t)data[5] << 40) + ((zip_uint64_t)data[4] << 32) + ((zip_uint64_t)data[3] << 24) + ((zip_uint64_t)data[2] << 16) + ((zip_uint64_t)data[1] << 8) + (zip_uint64_t)data[0];
+}
+
+
+
+zip_uint8_t
+_zip_buffer_get_8(zip_buffer_t *buffer)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 1);
+
+ if (data == NULL) {
+ return 0;
+ }
+
+ return data[0];
+}
+
+
+zip_uint64_t
+_zip_buffer_left(zip_buffer_t *buffer)
+{
+ return buffer->ok ? buffer->size - buffer->offset : 0;
+}
+
+
+zip_buffer_t *
+_zip_buffer_new(zip_uint8_t *data, zip_uint64_t size)
+{
+ bool free_data = (data == NULL);
+ zip_buffer_t *buffer;
+
+ if (data == NULL) {
+ if ((data = (zip_uint8_t *)malloc(size)) == NULL) {
+ return NULL;
+ }
+ }
+
+ if ((buffer = (zip_buffer_t *)malloc(sizeof(*buffer))) == NULL) {
+ if (free_data) {
+ free(data);
+ }
+ return NULL;
+ }
+
+ buffer->ok = true;
+ buffer->data = data;
+ buffer->size = size;
+ buffer->offset = 0;
+ buffer->free_data = free_data;
+
+ return buffer;
+}
+
+
+zip_buffer_t *
+_zip_buffer_new_from_source(zip_source_t *src, zip_uint64_t size, zip_uint8_t *buf, zip_error_t *error)
+{
+ zip_buffer_t *buffer;
+
+ if ((buffer = _zip_buffer_new(buf, size)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if (_zip_read(src, buffer->data, size, error) < 0) {
+ _zip_buffer_free(buffer);
+ return NULL;
+ }
+
+ return buffer;
+}
+
+
+zip_uint64_t
+_zip_buffer_offset(zip_buffer_t *buffer)
+{
+ return buffer->ok ? buffer->offset : 0;
+}
+
+
+bool
+_zip_buffer_ok(zip_buffer_t *buffer)
+{
+ return buffer->ok;
+}
+
+
+int
+_zip_buffer_put(zip_buffer_t *buffer, const void *src, size_t length)
+{
+ zip_uint8_t *dst = _zip_buffer_get(buffer, length);
+
+ if (dst == NULL) {
+ return -1;
+ }
+
+ memcpy(dst, src, length);
+ return 0;
+}
+
+
+int
+_zip_buffer_put_16(zip_buffer_t *buffer, zip_uint16_t i)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 2);
+
+ if (data == NULL) {
+ return -1;
+ }
+
+ data[0] = (zip_uint8_t)(i & 0xff);
+ data[1] = (zip_uint8_t)((i >> 8) & 0xff);
+
+ return 0;
+}
+
+
+int
+_zip_buffer_put_32(zip_buffer_t *buffer, zip_uint32_t i)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 4);
+
+ if (data == NULL) {
+ return -1;
+ }
+
+ data[0] = (zip_uint8_t)(i & 0xff);
+ data[1] = (zip_uint8_t)((i >> 8) & 0xff);
+ data[2] = (zip_uint8_t)((i >> 16) & 0xff);
+ data[3] = (zip_uint8_t)((i >> 24) & 0xff);
+
+ return 0;
+}
+
+
+int
+_zip_buffer_put_64(zip_buffer_t *buffer, zip_uint64_t i)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 8);
+
+ if (data == NULL) {
+ return -1;
+ }
+
+ data[0] = (zip_uint8_t)(i & 0xff);
+ data[1] = (zip_uint8_t)((i >> 8) & 0xff);
+ data[2] = (zip_uint8_t)((i >> 16) & 0xff);
+ data[3] = (zip_uint8_t)((i >> 24) & 0xff);
+ data[4] = (zip_uint8_t)((i >> 32) & 0xff);
+ data[5] = (zip_uint8_t)((i >> 40) & 0xff);
+ data[6] = (zip_uint8_t)((i >> 48) & 0xff);
+ data[7] = (zip_uint8_t)((i >> 56) & 0xff);
+
+ return 0;
+}
+
+
+int
+_zip_buffer_put_8(zip_buffer_t *buffer, zip_uint8_t i)
+{
+ zip_uint8_t *data = _zip_buffer_get(buffer, 1);
+
+ if (data == NULL) {
+ return -1;
+ }
+
+ data[0] = i;
+
+ return 0;
+}
+
+
+int
+_zip_buffer_set_offset(zip_buffer_t *buffer, zip_uint64_t offset)
+{
+ if (offset > buffer->size) {
+ buffer->ok = false;
+ return -1;
+ }
+
+ buffer->ok = true;
+ buffer->offset = offset;
+
+ return 0;
+}
+
+
+int
+_zip_buffer_skip(zip_buffer_t *buffer, zip_uint64_t length) {
+ zip_uint64_t offset = buffer->offset + length;
+
+ if (offset < buffer->offset) {
+ buffer->ok = false;
+ return -1;
+ }
+ return _zip_buffer_set_offset(buffer, offset);
+}
+
+zip_uint64_t
+_zip_buffer_size(zip_buffer_t *buffer)
+{
+ return buffer->size;
+}
diff --git a/src/Common/libzip/zip_close.c b/src/Common/libzip/zip_close.c
new file mode 100644
index 0000000..b5eca67
--- /dev/null
+++ b/src/Common/libzip/zip_close.c
@@ -0,0 +1,492 @@
+/*
+ zip_close.c -- close zip archive and update changes
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef _WIN32
+#include <io.h>
+#include <fcntl.h>
+#endif
+
+
+/* max deflate size increase: size + ceil(size/16k)*5+6 */
+#define MAX_DEFLATE_SIZE_32 4293656963u
+
+static int add_data(zip_t *, zip_source_t *, zip_dirent_t *);
+static int copy_data(zip_t *, zip_uint64_t);
+static int copy_source(zip_t *, zip_source_t *);
+static int write_cdir(zip_t *, const zip_filelist_t *, zip_uint64_t);
+
+
+ZIP_EXTERN int
+zip_close(zip_t *za)
+{
+ zip_uint64_t i, j, survivors;
+ zip_int64_t off;
+ int error;
+ zip_filelist_t *filelist;
+ int changed;
+
+ if (za == NULL)
+ return -1;
+
+ changed = _zip_changed(za, &survivors);
+
+ /* don't create zip files with no entries */
+ if (survivors == 0) {
+ if ((za->open_flags & ZIP_TRUNCATE) || changed) {
+ if (zip_source_remove(za->src) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+ }
+ zip_discard(za);
+ return 0;
+ }
+
+ if (!changed) {
+ zip_discard(za);
+ return 0;
+ }
+
+ if (survivors > za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ if ((filelist=(zip_filelist_t *)malloc(sizeof(filelist[0])*(size_t)survivors)) == NULL)
+ return -1;
+
+ /* create list of files with index into original archive */
+ for (i=j=0; i<za->nentry; i++) {
+ if (za->entry[i].deleted)
+ continue;
+
+ if (j >= survivors) {
+ free(filelist);
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ filelist[j].idx = i;
+ j++;
+ }
+ if (j < survivors) {
+ free(filelist);
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ if (zip_source_begin_write(za->src) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ free(filelist);
+ return -1;
+ }
+
+ error = 0;
+ for (j=0; j<survivors; j++) {
+ int new_data;
+ zip_entry_t *entry;
+ zip_dirent_t *de;
+
+ i = filelist[j].idx;
+ entry = za->entry+i;
+
+ new_data = (ZIP_ENTRY_DATA_CHANGED(entry) || ZIP_ENTRY_CHANGED(entry, ZIP_DIRENT_COMP_METHOD));
+
+ /* create new local directory entry */
+ if (entry->changes == NULL) {
+ if ((entry->changes=_zip_dirent_clone(entry->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ error = 1;
+ break;
+ }
+ }
+ de = entry->changes;
+
+ if (_zip_read_local_ef(za, i) < 0) {
+ error = 1;
+ break;
+ }
+
+ if ((off = zip_source_tell_write(za->src)) < 0) {
+ error = 1;
+ break;
+ }
+ de->offset = (zip_uint64_t)off;
+
+ if (new_data) {
+ zip_source_t *zs;
+
+ zs = NULL;
+ if (!ZIP_ENTRY_DATA_CHANGED(entry)) {
+ if ((zs=_zip_source_zip_new(za, za, i, ZIP_FL_UNCHANGED, 0, 0, NULL)) == NULL) {
+ error = 1;
+ break;
+ }
+ }
+
+ /* add_data writes dirent */
+ if (add_data(za, zs ? zs : entry->source, de) < 0) {
+ error = 1;
+ if (zs)
+ zip_source_free(zs);
+ break;
+ }
+ if (zs)
+ zip_source_free(zs);
+ }
+ else {
+ zip_uint64_t offset;
+
+ /* when copying data, all sizes are known -> no data descriptor needed */
+ de->bitflags &= (zip_uint16_t)~ZIP_GPBF_DATA_DESCRIPTOR;
+ if (_zip_dirent_write(za, de, ZIP_FL_LOCAL) < 0) {
+ error = 1;
+ break;
+ }
+ if ((offset=_zip_file_get_offset(za, i, &za->error)) == 0) {
+ error = 1;
+ break;
+ }
+ if (zip_source_seek(za->src, (zip_int64_t)offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ error = 1;
+ break;
+ }
+ if (copy_data(za, de->comp_size) < 0) {
+ error = 1;
+ break;
+ }
+ }
+ }
+
+ if (!error) {
+ if (write_cdir(za, filelist, survivors) < 0)
+ error = 1;
+ }
+
+ free(filelist);
+
+ if (!error) {
+ if (zip_source_commit_write(za->src) != 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ error = 1;
+ }
+ }
+
+ if (error) {
+ zip_source_rollback_write(za->src);
+ return -1;
+ }
+
+ zip_discard(za);
+
+ return 0;
+}
+
+
+static int
+add_data(zip_t *za, zip_source_t *src, zip_dirent_t *de)
+{
+ zip_int64_t offstart, offdata, offend;
+ struct zip_stat st;
+ zip_source_t *s2;
+ int ret;
+ int is_zip64;
+ zip_flags_t flags;
+
+ if (zip_source_stat(src, &st) < 0) {
+ _zip_error_set_from_source(&za->error, src);
+ return -1;
+ }
+
+ if ((st.valid & ZIP_STAT_COMP_METHOD) == 0) {
+ st.valid |= ZIP_STAT_COMP_METHOD;
+ st.comp_method = ZIP_CM_STORE;
+ }
+
+ if (ZIP_CM_IS_DEFAULT(de->comp_method) && st.comp_method != ZIP_CM_STORE)
+ de->comp_method = st.comp_method;
+ else if (de->comp_method == ZIP_CM_STORE && (st.valid & ZIP_STAT_SIZE)) {
+ st.valid |= ZIP_STAT_COMP_SIZE;
+ st.comp_size = st.size;
+ }
+ else {
+ /* we'll recompress */
+ st.valid &= ~ZIP_STAT_COMP_SIZE;
+ }
+
+
+ flags = ZIP_EF_LOCAL;
+
+ if ((st.valid & ZIP_STAT_SIZE) == 0)
+ flags |= ZIP_FL_FORCE_ZIP64;
+ else {
+ de->uncomp_size = st.size;
+
+ if ((st.valid & ZIP_STAT_COMP_SIZE) == 0) {
+ if (( ((de->comp_method == ZIP_CM_DEFLATE || ZIP_CM_IS_DEFAULT(de->comp_method)) && st.size > MAX_DEFLATE_SIZE_32)
+ || (de->comp_method != ZIP_CM_STORE && de->comp_method != ZIP_CM_DEFLATE && !ZIP_CM_IS_DEFAULT(de->comp_method))))
+ flags |= ZIP_FL_FORCE_ZIP64;
+ }
+ else
+ de->comp_size = st.comp_size;
+ }
+
+ if ((offstart = zip_source_tell_write(za->src)) < 0) {
+ return -1;
+ }
+
+ /* as long as we don't support non-seekable output, clear data descriptor bit */
+ de->bitflags &= (zip_uint16_t)~ZIP_GPBF_DATA_DESCRIPTOR;
+ if ((is_zip64=_zip_dirent_write(za, de, flags)) < 0)
+ return -1;
+
+
+ if (st.comp_method == ZIP_CM_STORE || (ZIP_CM_IS_DEFAULT(de->comp_method) && st.comp_method != de->comp_method)) {
+ zip_source_t *s_store, *s_crc;
+ zip_compression_implementation comp_impl;
+
+ if (st.comp_method != ZIP_CM_STORE) {
+ if ((comp_impl=_zip_get_compression_implementation(st.comp_method)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+ return -1;
+ }
+ if ((s_store=comp_impl(za, src, st.comp_method, ZIP_CODEC_DECODE)) == NULL) {
+ /* error set by comp_impl */
+ return -1;
+ }
+ }
+ else {
+ /* to have the same reference count to src as in the case where it's not stored */
+ zip_source_keep(src);
+ s_store = src;
+ }
+
+ s_crc = zip_source_crc(za, s_store, 0);
+ zip_source_free(s_store);
+ if (s_crc == NULL) {
+ return -1;
+ }
+
+ if (de->comp_method != ZIP_CM_STORE && ((st.valid & ZIP_STAT_SIZE) == 0 || st.size != 0)) {
+ if ((comp_impl=_zip_get_compression_implementation(de->comp_method)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+ zip_source_free(s_crc);
+ return -1;
+ }
+ s2 = comp_impl(za, s_crc, de->comp_method, ZIP_CODEC_ENCODE);
+ zip_source_free(s_crc);
+ if (s2 == NULL) {
+ return -1;
+ }
+ }
+ else {
+ s2 = s_crc;
+ }
+ }
+ else {
+ zip_source_keep(src);
+ s2 = src;
+ }
+
+ if ((offdata = zip_source_tell_write(za->src)) < 0) {
+ return -1;
+ }
+
+ ret = copy_source(za, s2);
+
+ if (zip_source_stat(s2, &st) < 0)
+ ret = -1;
+
+ zip_source_free(s2);
+
+ if (ret < 0)
+ return -1;
+
+ if ((offend = zip_source_tell_write(za->src)) < 0) {
+ return -1;
+ }
+
+ if (zip_source_seek_write(za->src, offstart, SEEK_SET) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+
+ if ((st.valid & (ZIP_STAT_COMP_METHOD|ZIP_STAT_CRC|ZIP_STAT_SIZE)) != (ZIP_STAT_COMP_METHOD|ZIP_STAT_CRC|ZIP_STAT_SIZE)) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ if ((de->changed & ZIP_DIRENT_LAST_MOD) == 0) {
+ if (st.valid & ZIP_STAT_MTIME)
+ de->last_mod = st.mtime;
+ else
+ time(&de->last_mod);
+ }
+ de->comp_method = st.comp_method;
+ de->crc = st.crc;
+ de->uncomp_size = st.size;
+ de->comp_size = (zip_uint64_t)(offend - offdata);
+
+ if ((ret=_zip_dirent_write(za, de, flags)) < 0)
+ return -1;
+
+ if (is_zip64 != ret) {
+ /* Zip64 mismatch between preliminary file header written before data and final file header written afterwards */
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+
+ if (zip_source_seek_write(za->src, offend, SEEK_SET) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static int
+copy_data(zip_t *za, zip_uint64_t len)
+{
+ zip_uint8_t buf[BUFSIZE];
+ size_t n;
+
+ while (len > 0) {
+ n = len > sizeof(buf) ? sizeof(buf) : len;
+ if (_zip_read(za->src, buf, n, &za->error) < 0) {
+ return -1;
+ }
+
+ if (_zip_write(za, buf, n) < 0) {
+ return -1;
+ }
+
+ len -= n;
+ }
+
+ return 0;
+}
+
+
+static int
+copy_source(zip_t *za, zip_source_t *src)
+{
+ zip_uint8_t buf[BUFSIZE];
+ zip_int64_t n;
+ int ret;
+
+ if (zip_source_open(src) < 0) {
+ _zip_error_set_from_source(&za->error, src);
+ return -1;
+ }
+
+ ret = 0;
+ while ((n=zip_source_read(src, buf, sizeof(buf))) > 0) {
+ if (_zip_write(za, buf, (zip_uint64_t)n) < 0) {
+ ret = -1;
+ break;
+ }
+ }
+
+ if (n < 0) {
+ _zip_error_set_from_source(&za->error, src);
+ ret = -1;
+ }
+
+ zip_source_close(src);
+
+ return ret;
+}
+
+
+static int
+write_cdir(zip_t *za, const zip_filelist_t *filelist, zip_uint64_t survivors)
+{
+ zip_int64_t cd_start, end, size;
+
+ if ((cd_start = zip_source_tell_write(za->src)) < 0) {
+ return -1;
+ }
+
+ if ((size=_zip_cdir_write(za, filelist, survivors)) < 0) {
+ return -1;
+ }
+
+ if ((end = zip_source_tell_write(za->src)) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+_zip_changed(const zip_t *za, zip_uint64_t *survivorsp)
+{
+ int changed;
+ zip_uint64_t i, survivors;
+
+ changed = 0;
+ survivors = 0;
+
+ if (za->comment_changed || za->ch_flags != za->flags)
+ changed = 1;
+
+ for (i=0; i<za->nentry; i++) {
+ if (za->entry[i].deleted || za->entry[i].source || (za->entry[i].changes && za->entry[i].changes->changed != 0))
+ changed = 1;
+ if (!za->entry[i].deleted)
+ survivors++;
+ }
+
+ if (survivorsp)
+ *survivorsp = survivors;
+
+ return changed;
+}
diff --git a/src/Common/libzip/zip_delete.c b/src/Common/libzip/zip_delete.c
new file mode 100644
index 0000000..34520b0
--- /dev/null
+++ b/src/Common/libzip/zip_delete.c
@@ -0,0 +1,70 @@
+/*
+ zip_delete.c -- delete file from zip archive
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_delete(zip_t *za, zip_uint64_t idx)
+{
+ const char *name;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if ((name=_zip_get_name(za, idx, 0, &za->error)) == NULL) {
+ return -1;
+ }
+
+ if (!_zip_hash_delete(za->names, (const zip_uint8_t *)name, &za->error)) {
+ return -1;
+ }
+
+ /* allow duplicate file names, because the file will
+ * be removed directly afterwards */
+ if (_zip_unchange(za, idx, 1) != 0)
+ return -1;
+
+ za->entry[idx].deleted = 1;
+
+ return 0;
+}
+
diff --git a/src/Common/libzip/zip_dir_add.c b/src/Common/libzip/zip_dir_add.c
new file mode 100644
index 0000000..f535b21
--- /dev/null
+++ b/src/Common/libzip/zip_dir_add.c
@@ -0,0 +1,93 @@
+/*
+ zip_dir_add.c -- add directory
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+/* NOTE: Signed due to -1 on error. See zip_add.c for more details. */
+
+ZIP_EXTERN zip_int64_t
+zip_dir_add(zip_t *za, const char *name, zip_flags_t flags)
+{
+ size_t len;
+ zip_int64_t idx;
+ char *s;
+ zip_source_t *source;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (name == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ s = NULL;
+ len = strlen(name);
+
+ if (name[len-1] != '/') {
+ if ((s=(char *)malloc(len+2)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ strcpy(s, name);
+ s[len] = '/';
+ s[len+1] = '\0';
+ }
+
+ if ((source=zip_source_buffer(za, NULL, 0, 0)) == NULL) {
+ free(s);
+ return -1;
+ }
+
+ idx = _zip_file_replace(za, ZIP_UINT64_MAX, s ? s : name, source, flags);
+
+ free(s);
+
+ if (idx < 0)
+ zip_source_free(source);
+ else {
+ if (zip_file_set_external_attributes(za, (zip_uint64_t)idx, 0, ZIP_OPSYS_DEFAULT, ZIP_EXT_ATTRIB_DEFAULT_DIR) < 0) {
+ zip_delete(za, (zip_uint64_t)idx);
+ return -1;
+ }
+ }
+
+ return idx;
+}
diff --git a/src/Common/libzip/zip_dirent.c b/src/Common/libzip/zip_dirent.c
new file mode 100644
index 0000000..74f8988
--- /dev/null
+++ b/src/Common/libzip/zip_dirent.c
@@ -0,0 +1,913 @@
+/*
+ zip_dirent.c -- read directory entry (local or central), clean dirent
+ Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#include "zipint.h"
+
+static time_t _zip_d2u_time(zip_uint16_t, zip_uint16_t);
+static zip_string_t *_zip_dirent_process_ef_utf_8(const zip_dirent_t *de, zip_uint16_t id, zip_string_t *str);
+static zip_extra_field_t *_zip_ef_utf8(zip_uint16_t, zip_string_t *, zip_error_t *);
+
+
+void
+_zip_cdir_free(zip_cdir_t *cd)
+{
+ zip_uint64_t i;
+
+ if (!cd)
+ return;
+
+ for (i=0; i<cd->nentry; i++)
+ _zip_entry_finalize(cd->entry+i);
+ free(cd->entry);
+ _zip_string_free(cd->comment);
+ free(cd);
+}
+
+
+zip_cdir_t *
+_zip_cdir_new(zip_uint64_t nentry, zip_error_t *error)
+{
+ zip_cdir_t *cd;
+ zip_uint64_t i;
+
+ if ((cd=(zip_cdir_t *)malloc(sizeof(*cd))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if (nentry == 0)
+ cd->entry = NULL;
+ else if ((nentry > SIZE_MAX/sizeof(*(cd->entry))) || (cd->entry=(zip_entry_t *)malloc(sizeof(*(cd->entry))*(size_t)nentry)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ free(cd);
+ return NULL;
+ }
+
+ for (i=0; i<nentry; i++)
+ _zip_entry_init(cd->entry+i);
+
+ cd->nentry = cd->nentry_alloc = nentry;
+ cd->size = cd->offset = 0;
+ cd->comment = NULL;
+
+ return cd;
+}
+
+
+zip_int64_t
+_zip_cdir_write(zip_t *za, const zip_filelist_t *filelist, zip_uint64_t survivors)
+{
+ zip_uint64_t offset, size;
+ zip_string_t *comment;
+ zip_uint8_t buf[EOCDLEN + EOCD64LEN + EOCD64LOCLEN];
+ zip_buffer_t *buffer;
+ zip_int64_t off;
+ zip_uint64_t i;
+ bool is_zip64;
+ int ret;
+
+ if ((off = zip_source_tell_write(za->src)) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+ offset = (zip_uint64_t)off;
+
+ is_zip64 = false;
+
+ for (i=0; i<survivors; i++) {
+ zip_entry_t *entry = za->entry+filelist[i].idx;
+
+ if ((ret=_zip_dirent_write(za, entry->changes ? entry->changes : entry->orig, ZIP_FL_CENTRAL)) < 0)
+ return -1;
+ if (ret)
+ is_zip64 = true;
+ }
+
+ if ((off = zip_source_tell_write(za->src)) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+ size = (zip_uint64_t)off - offset;
+
+ if (offset > ZIP_UINT32_MAX || survivors > ZIP_UINT16_MAX)
+ is_zip64 = true;
+
+
+ if ((buffer = _zip_buffer_new(buf, sizeof(buf))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+
+ if (is_zip64) {
+ _zip_buffer_put(buffer, EOCD64_MAGIC, 4);
+ _zip_buffer_put_64(buffer, EOCD64LEN-12);
+ _zip_buffer_put_16(buffer, 45);
+ _zip_buffer_put_16(buffer, 45);
+ _zip_buffer_put_32(buffer, 0);
+ _zip_buffer_put_32(buffer, 0);
+ _zip_buffer_put_64(buffer, survivors);
+ _zip_buffer_put_64(buffer, survivors);
+ _zip_buffer_put_64(buffer, size);
+ _zip_buffer_put_64(buffer, offset);
+ _zip_buffer_put(buffer, EOCD64LOC_MAGIC, 4);
+ _zip_buffer_put_32(buffer, 0);
+ _zip_buffer_put_64(buffer, offset+size);
+ _zip_buffer_put_32(buffer, 1);
+ }
+
+ _zip_buffer_put(buffer, EOCD_MAGIC, 4);
+ _zip_buffer_put_32(buffer, 0);
+ _zip_buffer_put_16(buffer, (zip_uint16_t)(survivors >= ZIP_UINT16_MAX ? ZIP_UINT16_MAX : survivors));
+ _zip_buffer_put_16(buffer, (zip_uint16_t)(survivors >= ZIP_UINT16_MAX ? ZIP_UINT16_MAX : survivors));
+ _zip_buffer_put_32(buffer, size >= ZIP_UINT32_MAX ? ZIP_UINT32_MAX : (zip_uint32_t)size);
+ _zip_buffer_put_32(buffer, offset >= ZIP_UINT32_MAX ? ZIP_UINT32_MAX : (zip_uint32_t)offset);
+
+ comment = za->comment_changed ? za->comment_changes : za->comment_orig;
+
+ _zip_buffer_put_16(buffer, (zip_uint16_t)(comment ? comment->length : 0));
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+
+ if (_zip_write(za, _zip_buffer_data(buffer), _zip_buffer_offset(buffer)) < 0) {
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+
+ _zip_buffer_free(buffer);
+
+ if (comment) {
+ if (_zip_write(za, comment->raw, comment->length) < 0) {
+ return -1;
+ }
+ }
+
+ return (zip_int64_t)size;
+}
+
+
+zip_dirent_t *
+_zip_dirent_clone(const zip_dirent_t *sde)
+{
+ zip_dirent_t *tde;
+
+ if ((tde=(zip_dirent_t *)malloc(sizeof(*tde))) == NULL)
+ return NULL;
+
+ if (sde)
+ memcpy(tde, sde, sizeof(*sde));
+ else
+ _zip_dirent_init(tde);
+
+ tde->changed = 0;
+ tde->cloned = 1;
+
+ return tde;
+}
+
+
+void
+_zip_dirent_finalize(zip_dirent_t *zde)
+{
+ if (!zde->cloned || zde->changed & ZIP_DIRENT_FILENAME) {
+ _zip_string_free(zde->filename);
+ zde->filename = NULL;
+ }
+ if (!zde->cloned || zde->changed & ZIP_DIRENT_EXTRA_FIELD) {
+ _zip_ef_free(zde->extra_fields);
+ zde->extra_fields = NULL;
+ }
+ if (!zde->cloned || zde->changed & ZIP_DIRENT_COMMENT) {
+ _zip_string_free(zde->comment);
+ zde->comment = NULL;
+ }
+}
+
+
+void
+_zip_dirent_free(zip_dirent_t *zde)
+{
+ if (zde == NULL)
+ return;
+
+ _zip_dirent_finalize(zde);
+ free(zde);
+}
+
+
+void
+_zip_dirent_init(zip_dirent_t *de)
+{
+ de->changed = 0;
+ de->local_extra_fields_read = 0;
+ de->cloned = 0;
+
+ de->version_madeby = 20 | (ZIP_OPSYS_DEFAULT << 8);
+ de->version_needed = 20; /* 2.0 */
+ de->bitflags = 0;
+ de->comp_method = ZIP_CM_DEFAULT;
+ de->last_mod = 0;
+ de->crc = 0;
+ de->comp_size = 0;
+ de->uncomp_size = 0;
+ de->filename = NULL;
+ de->extra_fields = NULL;
+ de->comment = NULL;
+ de->disk_number = 0;
+ de->int_attrib = 0;
+ de->ext_attrib = ZIP_EXT_ATTRIB_DEFAULT;
+ de->offset = 0;
+}
+
+
+bool
+_zip_dirent_needs_zip64(const zip_dirent_t *de, zip_flags_t flags)
+{
+ if (de->uncomp_size >= ZIP_UINT32_MAX || de->comp_size >= ZIP_UINT32_MAX
+ || ((flags & ZIP_FL_CENTRAL) && de->offset >= ZIP_UINT32_MAX))
+ return true;
+
+ return false;
+}
+
+
+zip_dirent_t *
+_zip_dirent_new(void)
+{
+ zip_dirent_t *de;
+
+ if ((de=(zip_dirent_t *)malloc(sizeof(*de))) == NULL)
+ return NULL;
+
+ _zip_dirent_init(de);
+ return de;
+}
+
+
+/* _zip_dirent_read(zde, fp, bufp, left, localp, error):
+ Fills the zip directory entry zde.
+
+ If buffer is non-NULL, data is taken from there; otherwise data is read from fp as needed.
+
+ If local is true, it reads a local header instead of a central directory entry.
+
+ Returns size of dirent read if successful. On error, error is filled in and -1 is returned.
+*/
+
+zip_int64_t
+_zip_dirent_read(zip_dirent_t *zde, zip_source_t *src, zip_buffer_t *buffer, bool local, zip_error_t *error)
+{
+ zip_uint8_t buf[CDENTRYSIZE];
+ zip_uint16_t dostime, dosdate;
+ zip_uint32_t size, variable_size;
+ zip_uint16_t filename_len, comment_len, ef_len;
+
+ bool from_buffer = (buffer != NULL);
+
+ size = local ? LENTRYSIZE : CDENTRYSIZE;
+
+ if (buffer) {
+ if (_zip_buffer_left(buffer) < size) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return -1;
+ }
+ }
+ else {
+ if ((buffer = _zip_buffer_new_from_source(src, size, buf, error)) == NULL) {
+ return -1;
+ }
+ }
+
+ if (memcmp(_zip_buffer_get(buffer, 4), (local ? LOCAL_MAGIC : CENTRAL_MAGIC), 4) != 0) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+
+ /* convert buffercontents to zip_dirent */
+
+ _zip_dirent_init(zde);
+ if (!local)
+ zde->version_madeby = _zip_buffer_get_16(buffer);
+ else
+ zde->version_madeby = 0;
+ zde->version_needed = _zip_buffer_get_16(buffer);
+ zde->bitflags = _zip_buffer_get_16(buffer);
+ zde->comp_method = _zip_buffer_get_16(buffer);
+
+ /* convert to time_t */
+ dostime = _zip_buffer_get_16(buffer);
+ dosdate = _zip_buffer_get_16(buffer);
+ zde->last_mod = _zip_d2u_time(dostime, dosdate);
+
+ zde->crc = _zip_buffer_get_32(buffer);
+ zde->comp_size = _zip_buffer_get_32(buffer);
+ zde->uncomp_size = _zip_buffer_get_32(buffer);
+
+ filename_len = _zip_buffer_get_16(buffer);
+ ef_len = _zip_buffer_get_16(buffer);
+
+ if (local) {
+ comment_len = 0;
+ zde->disk_number = 0;
+ zde->int_attrib = 0;
+ zde->ext_attrib = 0;
+ zde->offset = 0;
+ } else {
+ comment_len = _zip_buffer_get_16(buffer);
+ zde->disk_number = _zip_buffer_get_16(buffer);
+ zde->int_attrib = _zip_buffer_get_16(buffer);
+ zde->ext_attrib = _zip_buffer_get_32(buffer);
+ zde->offset = _zip_buffer_get_32(buffer);
+ }
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+
+ zde->filename = NULL;
+ zde->extra_fields = NULL;
+ zde->comment = NULL;
+
+ variable_size = (zip_uint32_t)filename_len+(zip_uint32_t)ef_len+(zip_uint32_t)comment_len;
+
+ if (from_buffer) {
+ if (_zip_buffer_left(buffer) < variable_size) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return -1;
+ }
+ }
+ else {
+ _zip_buffer_free(buffer);
+
+ if ((buffer = _zip_buffer_new_from_source(src, variable_size, NULL, error)) == NULL) {
+ return -1;
+ }
+ }
+
+ if (filename_len) {
+ zde->filename = _zip_read_string(buffer, src, filename_len, 1, error);
+ if (!zde->filename) {
+ if (zip_error_code_zip(error) == ZIP_ER_EOF) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ }
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+
+ if (zde->bitflags & ZIP_GPBF_ENCODING_UTF_8) {
+ if (_zip_guess_encoding(zde->filename, ZIP_ENCODING_UTF8_KNOWN) == ZIP_ENCODING_ERROR) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ }
+ }
+
+ if (ef_len) {
+ zip_uint8_t *ef = _zip_read_data(buffer, src, ef_len, 0, error);
+
+ if (ef == NULL) {
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ if (!_zip_ef_parse(ef, ef_len, local ? ZIP_EF_LOCAL : ZIP_EF_CENTRAL, &zde->extra_fields, error)) {
+ free(ef);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ free(ef);
+ if (local)
+ zde->local_extra_fields_read = 1;
+ }
+
+ if (comment_len) {
+ zde->comment = _zip_read_string(buffer, src, comment_len, 0, error);
+ if (!zde->comment) {
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ if (zde->bitflags & ZIP_GPBF_ENCODING_UTF_8) {
+ if (_zip_guess_encoding(zde->comment, ZIP_ENCODING_UTF8_KNOWN) == ZIP_ENCODING_ERROR) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ }
+ }
+
+ zde->filename = _zip_dirent_process_ef_utf_8(zde, ZIP_EF_UTF_8_NAME, zde->filename);
+ zde->comment = _zip_dirent_process_ef_utf_8(zde, ZIP_EF_UTF_8_COMMENT, zde->comment);
+
+ /* Zip64 */
+
+ if (zde->uncomp_size == ZIP_UINT32_MAX || zde->comp_size == ZIP_UINT32_MAX || zde->offset == ZIP_UINT32_MAX) {
+ zip_uint16_t got_len;
+ zip_buffer_t *ef_buffer;
+ const zip_uint8_t *ef = _zip_ef_get_by_id(zde->extra_fields, &got_len, ZIP_EF_ZIP64, 0, local ? ZIP_EF_LOCAL : ZIP_EF_CENTRAL, error);
+ /* TODO: if got_len == 0 && !ZIP64_EOCD: no error, 0xffffffff is valid value */
+ if (ef == NULL) {
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+
+ if ((ef_buffer = _zip_buffer_new((zip_uint8_t *)ef, got_len)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+
+ if (zde->uncomp_size == ZIP_UINT32_MAX)
+ zde->uncomp_size = _zip_buffer_get_64(ef_buffer);
+ else if (local) {
+ /* From appnote.txt: This entry in the Local header MUST
+ include BOTH original and compressed file size fields. */
+ (void)_zip_buffer_skip(ef_buffer, 8); /* error is caught by _zip_buffer_eof() call */
+ }
+ if (zde->comp_size == ZIP_UINT32_MAX)
+ zde->comp_size = _zip_buffer_get_64(ef_buffer);
+ if (!local) {
+ if (zde->offset == ZIP_UINT32_MAX)
+ zde->offset = _zip_buffer_get_64(ef_buffer);
+ if (zde->disk_number == ZIP_UINT16_MAX)
+ zde->disk_number = _zip_buffer_get_32(buffer);
+ }
+
+ if (!_zip_buffer_eof(ef_buffer)) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_buffer_free(ef_buffer);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ _zip_buffer_free(ef_buffer);
+ }
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return -1;
+ }
+ if (!from_buffer) {
+ _zip_buffer_free(buffer);
+ }
+
+ /* zip_source_seek / zip_source_tell don't support values > ZIP_INT64_MAX */
+ if (zde->offset > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return -1;
+ }
+
+ zde->extra_fields = _zip_ef_remove_internal(zde->extra_fields);
+
+ return (zip_int64_t)(size + variable_size);
+}
+
+
+static zip_string_t *
+_zip_dirent_process_ef_utf_8(const zip_dirent_t *de, zip_uint16_t id, zip_string_t *str)
+{
+ zip_uint16_t ef_len;
+ zip_uint32_t ef_crc;
+ zip_buffer_t *buffer;
+
+ const zip_uint8_t *ef = _zip_ef_get_by_id(de->extra_fields, &ef_len, id, 0, ZIP_EF_BOTH, NULL);
+
+ if (ef == NULL || ef_len < 5 || ef[0] != 1) {
+ return str;
+ }
+
+ if ((buffer = _zip_buffer_new((zip_uint8_t *)ef, ef_len)) == NULL) {
+ return str;
+ }
+
+ _zip_buffer_get_8(buffer);
+ ef_crc = _zip_buffer_get_32(buffer);
+
+ if (_zip_string_crc32(str) == ef_crc) {
+ zip_uint16_t len = (zip_uint16_t)_zip_buffer_left(buffer);
+ zip_string_t *ef_str = _zip_string_new(_zip_buffer_get(buffer, len), len, ZIP_FL_ENC_UTF_8, NULL);
+
+ if (ef_str != NULL) {
+ _zip_string_free(str);
+ str = ef_str;
+ }
+ }
+
+ _zip_buffer_free(buffer);
+
+ return str;
+}
+
+
+zip_int32_t
+_zip_dirent_size(zip_source_t *src, zip_uint16_t flags, zip_error_t *error)
+{
+ zip_int32_t size;
+ bool local = (flags & ZIP_EF_LOCAL) != 0;
+ int i;
+ zip_uint8_t b[6];
+ zip_buffer_t *buffer;
+
+ size = local ? LENTRYSIZE : CDENTRYSIZE;
+
+ if (zip_source_seek(src, local ? 26 : 28, SEEK_CUR) < 0) {
+ _zip_error_set_from_source(error, src);
+ return -1;
+ }
+
+ if ((buffer = _zip_buffer_new_from_source(src, local ? 4 : 6, b, error)) == NULL) {
+ return -1;
+ }
+
+ for (i=0; i<(local ? 2 : 3); i++) {
+ size += _zip_buffer_get_16(buffer);
+ }
+
+ if (!_zip_buffer_eof(buffer)) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+
+ _zip_buffer_free(buffer);
+ return size;
+}
+
+
+/* _zip_dirent_write
+ Writes zip directory entry.
+
+ If flags & ZIP_EF_LOCAL, it writes a local header instead of a central
+ directory entry. If flags & ZIP_EF_FORCE_ZIP64, a ZIP64 extra field is written, even if not needed.
+
+ Returns 0 if successful, 1 if successful and wrote ZIP64 extra field. On error, error is filled in and -1 is
+ returned.
+*/
+
+int
+_zip_dirent_write(zip_t *za, zip_dirent_t *de, zip_flags_t flags)
+{
+ zip_uint16_t dostime, dosdate;
+ zip_encoding_type_t com_enc, name_enc;
+ zip_extra_field_t *ef;
+ zip_extra_field_t *ef64;
+ zip_uint32_t ef_total_size;
+ bool is_zip64;
+ bool is_really_zip64;
+ zip_uint8_t buf[CDENTRYSIZE];
+ zip_buffer_t *buffer;
+
+ ef = NULL;
+
+ name_enc = _zip_guess_encoding(de->filename, ZIP_ENCODING_UNKNOWN);
+ com_enc = _zip_guess_encoding(de->comment, ZIP_ENCODING_UNKNOWN);
+
+ if ((name_enc == ZIP_ENCODING_UTF8_KNOWN && com_enc == ZIP_ENCODING_ASCII) ||
+ (name_enc == ZIP_ENCODING_ASCII && com_enc == ZIP_ENCODING_UTF8_KNOWN) ||
+ (name_enc == ZIP_ENCODING_UTF8_KNOWN && com_enc == ZIP_ENCODING_UTF8_KNOWN))
+ de->bitflags |= ZIP_GPBF_ENCODING_UTF_8;
+ else {
+ de->bitflags &= (zip_uint16_t)~ZIP_GPBF_ENCODING_UTF_8;
+ if (name_enc == ZIP_ENCODING_UTF8_KNOWN) {
+ ef = _zip_ef_utf8(ZIP_EF_UTF_8_NAME, de->filename, &za->error);
+ if (ef == NULL)
+ return -1;
+ }
+ if ((flags & ZIP_FL_LOCAL) == 0 && com_enc == ZIP_ENCODING_UTF8_KNOWN){
+ zip_extra_field_t *ef2 = _zip_ef_utf8(ZIP_EF_UTF_8_COMMENT, de->comment, &za->error);
+ if (ef2 == NULL) {
+ _zip_ef_free(ef);
+ return -1;
+ }
+ ef2->next = ef;
+ ef = ef2;
+ }
+ }
+
+ is_really_zip64 = _zip_dirent_needs_zip64(de, flags);
+ is_zip64 = (flags & (ZIP_FL_LOCAL|ZIP_FL_FORCE_ZIP64)) == (ZIP_FL_LOCAL|ZIP_FL_FORCE_ZIP64) || is_really_zip64;
+
+ if (is_zip64) {
+ zip_uint8_t ef_zip64[EFZIP64SIZE];
+ zip_buffer_t *ef_buffer = _zip_buffer_new(ef_zip64, sizeof(ef_zip64));
+ if (ef_buffer == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ _zip_ef_free(ef);
+ return -1;
+ }
+
+ if (flags & ZIP_FL_LOCAL) {
+ if ((flags & ZIP_FL_FORCE_ZIP64) || de->comp_size > ZIP_UINT32_MAX || de->uncomp_size > ZIP_UINT32_MAX) {
+ _zip_buffer_put_64(ef_buffer, de->uncomp_size);
+ _zip_buffer_put_64(ef_buffer, de->comp_size);
+ }
+ }
+ else {
+ if ((flags & ZIP_FL_FORCE_ZIP64) || de->comp_size > ZIP_UINT32_MAX || de->uncomp_size > ZIP_UINT32_MAX || de->offset > ZIP_UINT32_MAX) {
+ if (de->uncomp_size >= ZIP_UINT32_MAX) {
+ _zip_buffer_put_64(ef_buffer, de->uncomp_size);
+ }
+ if (de->comp_size >= ZIP_UINT32_MAX) {
+ _zip_buffer_put_64(ef_buffer, de->comp_size);
+ }
+ if (de->offset >= ZIP_UINT32_MAX) {
+ _zip_buffer_put_64(ef_buffer, de->offset);
+ }
+ }
+ }
+
+ if (!_zip_buffer_ok(ef_buffer)) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(ef_buffer);
+ _zip_ef_free(ef);
+ return -1;
+ }
+
+ ef64 = _zip_ef_new(ZIP_EF_ZIP64, (zip_uint16_t)(_zip_buffer_offset(ef_buffer)), ef_zip64, ZIP_EF_BOTH);
+ _zip_buffer_free(ef_buffer);
+ ef64->next = ef;
+ ef = ef64;
+ }
+
+ if ((buffer = _zip_buffer_new(buf, sizeof(buf))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ _zip_ef_free(ef);
+ return -1;
+ }
+
+ _zip_buffer_put(buffer, (flags & ZIP_FL_LOCAL) ? LOCAL_MAGIC : CENTRAL_MAGIC, 4);
+
+ if ((flags & ZIP_FL_LOCAL) == 0) {
+ _zip_buffer_put_16(buffer, (zip_uint16_t)(is_really_zip64 ? 45 : de->version_madeby));
+ }
+ _zip_buffer_put_16(buffer, (zip_uint16_t)(is_really_zip64 ? 45 : de->version_needed));
+ _zip_buffer_put_16(buffer, de->bitflags&0xfff9); /* clear compression method specific flags */
+ _zip_buffer_put_16(buffer, (zip_uint16_t)de->comp_method);
+
+ _zip_u2d_time(de->last_mod, &dostime, &dosdate);
+ _zip_buffer_put_16(buffer, dostime);
+ _zip_buffer_put_16(buffer, dosdate);
+
+ _zip_buffer_put_32(buffer, de->crc);
+
+ if (((flags & ZIP_FL_LOCAL) == ZIP_FL_LOCAL) && ((de->comp_size >= ZIP_UINT32_MAX) || (de->uncomp_size >= ZIP_UINT32_MAX))) {
+ /* In local headers, if a ZIP64 EF is written, it MUST contain
+ * both compressed and uncompressed sizes (even if one of the
+ * two is smaller than 0xFFFFFFFF); on the other hand, those
+ * may only appear when the corresponding standard entry is
+ * 0xFFFFFFFF. (appnote.txt 4.5.3) */
+ _zip_buffer_put_32(buffer, ZIP_UINT32_MAX);
+ _zip_buffer_put_32(buffer, ZIP_UINT32_MAX);
+ }
+ else {
+ if (de->comp_size < ZIP_UINT32_MAX) {
+ _zip_buffer_put_32(buffer, (zip_uint32_t)de->comp_size);
+ }
+ else {
+ _zip_buffer_put_32(buffer, ZIP_UINT32_MAX);
+ }
+ if (de->uncomp_size < ZIP_UINT32_MAX) {
+ _zip_buffer_put_32(buffer, (zip_uint32_t)de->uncomp_size);
+ }
+ else {
+ _zip_buffer_put_32(buffer, ZIP_UINT32_MAX);
+ }
+ }
+
+ _zip_buffer_put_16(buffer, _zip_string_length(de->filename));
+ /* TODO: check for overflow */
+ ef_total_size = (zip_uint32_t)_zip_ef_size(de->extra_fields, flags) + (zip_uint32_t)_zip_ef_size(ef, ZIP_EF_BOTH);
+ _zip_buffer_put_16(buffer, (zip_uint16_t)ef_total_size);
+
+ if ((flags & ZIP_FL_LOCAL) == 0) {
+ _zip_buffer_put_16(buffer, _zip_string_length(de->comment));
+ _zip_buffer_put_16(buffer, (zip_uint16_t)de->disk_number);
+ _zip_buffer_put_16(buffer, de->int_attrib);
+ _zip_buffer_put_32(buffer, de->ext_attrib);
+ if (de->offset < ZIP_UINT32_MAX)
+ _zip_buffer_put_32(buffer, (zip_uint32_t)de->offset);
+ else
+ _zip_buffer_put_32(buffer, ZIP_UINT32_MAX);
+ }
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(buffer);
+ _zip_ef_free(ef);
+ return -1;
+ }
+
+ if (_zip_write(za, buf, _zip_buffer_offset(buffer)) < 0) {
+ _zip_buffer_free(buffer);
+ _zip_ef_free(ef);
+ return -1;
+ }
+
+ _zip_buffer_free(buffer);
+
+ if (de->filename) {
+ if (_zip_string_write(za, de->filename) < 0) {
+ _zip_ef_free(ef);
+ return -1;
+ }
+ }
+
+ if (ef) {
+ if (_zip_ef_write(za, ef, ZIP_EF_BOTH) < 0) {
+ _zip_ef_free(ef);
+ return -1;
+ }
+ }
+ _zip_ef_free(ef);
+ if (de->extra_fields) {
+ if (_zip_ef_write(za, de->extra_fields, flags) < 0) {
+ return -1;
+ }
+ }
+
+ if ((flags & ZIP_FL_LOCAL) == 0) {
+ if (de->comment) {
+ if (_zip_string_write(za, de->comment) < 0) {
+ return -1;
+ }
+ }
+ }
+
+
+ return is_zip64;
+}
+
+
+static time_t
+_zip_d2u_time(zip_uint16_t dtime, zip_uint16_t ddate)
+{
+ struct tm tm;
+
+ memset(&tm, 0, sizeof(tm));
+
+ /* let mktime decide if DST is in effect */
+ tm.tm_isdst = -1;
+
+ tm.tm_year = ((ddate>>9)&127) + 1980 - 1900;
+ tm.tm_mon = ((ddate>>5)&15) - 1;
+ tm.tm_mday = ddate&31;
+
+ tm.tm_hour = (dtime>>11)&31;
+ tm.tm_min = (dtime>>5)&63;
+ tm.tm_sec = (dtime<<1)&62;
+
+ return mktime(&tm);
+}
+
+
+static zip_extra_field_t *
+_zip_ef_utf8(zip_uint16_t id, zip_string_t *str, zip_error_t *error)
+{
+ const zip_uint8_t *raw;
+ zip_uint32_t len;
+ zip_buffer_t *buffer;
+ zip_extra_field_t *ef;
+
+ if ((raw=_zip_string_get(str, &len, ZIP_FL_ENC_RAW, NULL)) == NULL) {
+ /* error already set */
+ return NULL;
+ }
+
+ if (len+5 > ZIP_UINT16_MAX) {
+ zip_error_set(error, ZIP_ER_INVAL, 0); /* TODO: better error code? */
+ return NULL;
+ }
+
+ if ((buffer = _zip_buffer_new(NULL, len+5)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ _zip_buffer_put_8(buffer, 1);
+ _zip_buffer_put_32(buffer, _zip_string_crc32(str));
+ _zip_buffer_put(buffer, raw, len);
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(buffer);
+ return NULL;
+ }
+
+ ef = _zip_ef_new(id, (zip_uint16_t)(_zip_buffer_offset(buffer)), _zip_buffer_data(buffer), ZIP_EF_BOTH);
+ _zip_buffer_free(buffer);
+
+ return ef;
+}
+
+
+zip_dirent_t *
+_zip_get_dirent(zip_t *za, zip_uint64_t idx, zip_flags_t flags, zip_error_t *error)
+{
+ if (error == NULL)
+ error = &za->error;
+
+ if (idx >= za->nentry) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((flags & ZIP_FL_UNCHANGED) || za->entry[idx].changes == NULL) {
+ if (za->entry[idx].orig == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+ if (za->entry[idx].deleted && (flags & ZIP_FL_UNCHANGED) == 0) {
+ zip_error_set(error, ZIP_ER_DELETED, 0);
+ return NULL;
+ }
+ return za->entry[idx].orig;
+ }
+ else
+ return za->entry[idx].changes;
+}
+
+
+
+
+void
+_zip_u2d_time(time_t intime, zip_uint16_t *dtime, zip_uint16_t *ddate)
+{
+ struct tm *tm;
+
+ tm = localtime(&intime);
+ if (tm->tm_year < 80) {
+ tm->tm_year = 80;
+ }
+
+ *ddate = (zip_uint16_t)(((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5) + tm->tm_mday);
+ *dtime = (zip_uint16_t)(((tm->tm_hour)<<11) + ((tm->tm_min)<<5) + ((tm->tm_sec)>>1));
+
+ return;
+}
diff --git a/src/Common/libzip/zip_discard.c b/src/Common/libzip/zip_discard.c
new file mode 100644
index 0000000..1876c84
--- /dev/null
+++ b/src/Common/libzip/zip_discard.c
@@ -0,0 +1,79 @@
+/*
+ zip_discard.c -- discard and free struct zip
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+/* zip_discard:
+ frees the space allocated to a zipfile struct, and closes the
+ corresponding file. */
+
+void
+zip_discard(zip_t *za)
+{
+ zip_uint64_t i;
+
+ if (za == NULL)
+ return;
+
+ if (za->src) {
+ zip_source_close(za->src);
+ zip_source_free(za->src);
+ }
+
+ free(za->default_password);
+ _zip_string_free(za->comment_orig);
+ _zip_string_free(za->comment_changes);
+
+ _zip_hash_free(za->names);
+
+ if (za->entry) {
+ for (i=0; i<za->nentry; i++)
+ _zip_entry_finalize(za->entry+i);
+ free(za->entry);
+ }
+
+ for (i=0; i<za->nopen_source; i++) {
+ _zip_source_invalidate(za->open_source[i]);
+ }
+ free(za->open_source);
+
+ zip_error_fini(&za->error);
+
+ free(za);
+
+ return;
+}
diff --git a/src/Common/libzip/zip_entry.c b/src/Common/libzip/zip_entry.c
new file mode 100644
index 0000000..6f89006
--- /dev/null
+++ b/src/Common/libzip/zip_entry.c
@@ -0,0 +1,53 @@
+/*
+ zip_entry.c -- struct zip_entry helper functions
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+void
+_zip_entry_finalize(zip_entry_t *e)
+{
+ _zip_unchange_data(e);
+ _zip_dirent_free(e->orig);
+ _zip_dirent_free(e->changes);
+}
+
+
+void
+_zip_entry_init(zip_entry_t *e)
+{
+ e->orig = NULL;
+ e->changes = NULL;
+ e->source = NULL;
+ e->deleted = 0;
+}
diff --git a/src/Common/libzip/zip_err_str.c b/src/Common/libzip/zip_err_str.c
new file mode 100644
index 0000000..65698be
--- /dev/null
+++ b/src/Common/libzip/zip_err_str.c
@@ -0,0 +1,80 @@
+/*
+ This file was generated automatically by ./make_zip_err_str.sh
+ from ./zip.h; make changes there.
+ */
+
+#include "zipint.h"
+
+const char * const _zip_err_str[] = {
+ "No error",
+ "Multi-disk zip archives not supported",
+ "Renaming temporary file failed",
+ "Closing zip archive failed",
+ "Seek error",
+ "Read error",
+ "Write error",
+ "CRC error",
+ "Containing zip archive was closed",
+ "No such file",
+ "File already exists",
+ "Can't open file",
+ "Failure to create temporary file",
+ "Zlib error",
+ "Malloc failure",
+ "Entry has been changed",
+ "Compression method not supported",
+ "Premature end of file",
+ "Invalid argument",
+ "Not a zip archive",
+ "Internal error",
+ "Zip archive inconsistent",
+ "Can't remove file",
+ "Entry has been deleted",
+ "Encryption method not supported",
+ "Read-only archive",
+ "No password provided",
+ "Wrong password provided",
+ "Operation not supported",
+ "Resource still in use",
+ "Tell error",
+};
+
+const int _zip_nerr_str = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]);
+
+#define N ZIP_ET_NONE
+#define S ZIP_ET_SYS
+#define Z ZIP_ET_ZLIB
+
+const int _zip_err_type[] = {
+ N,
+ N,
+ S,
+ S,
+ S,
+ S,
+ S,
+ N,
+ N,
+ N,
+ N,
+ S,
+ S,
+ Z,
+ N,
+ N,
+ N,
+ N,
+ N,
+ N,
+ N,
+ N,
+ S,
+ N,
+ N,
+ N,
+ N,
+ N,
+ N,
+ N,
+ S,
+};
diff --git a/src/Common/libzip/zip_error.c b/src/Common/libzip/zip_error.c
new file mode 100644
index 0000000..43ddf4f
--- /dev/null
+++ b/src/Common/libzip/zip_error.c
@@ -0,0 +1,155 @@
+/*
+ zip_error.c -- zip_error_t helper functions
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_error_code_system(const zip_error_t *error) {
+ return error->sys_err;
+}
+
+
+ZIP_EXTERN int
+zip_error_code_zip(const zip_error_t *error) {
+ return error->zip_err;
+}
+
+
+ZIP_EXTERN void
+zip_error_fini(zip_error_t *err)
+{
+ free(err->str);
+ err->str = NULL;
+}
+
+
+ZIP_EXTERN void
+zip_error_init(zip_error_t *err)
+{
+ err->zip_err = ZIP_ER_OK;
+ err->sys_err = 0;
+ err->str = NULL;
+}
+
+ZIP_EXTERN void
+zip_error_init_with_code(zip_error_t *error, int ze)
+{
+ zip_error_init(error);
+ error->zip_err = ze;
+ switch (zip_error_system_type(error)) {
+ case ZIP_ET_SYS:
+ error->sys_err = errno;
+ break;
+
+ default:
+ error->sys_err = 0;
+ break;
+ }
+}
+
+
+ZIP_EXTERN int
+zip_error_system_type(const zip_error_t *error) {
+ if (error->zip_err < 0 || error->zip_err >= _zip_nerr_str)
+ return ZIP_ET_NONE;
+
+ return _zip_err_type[error->zip_err];
+}
+
+
+void
+_zip_error_clear(zip_error_t *err)
+{
+ if (err == NULL)
+ return;
+
+ err->zip_err = ZIP_ER_OK;
+ err->sys_err = 0;
+}
+
+
+void
+_zip_error_copy(zip_error_t *dst, const zip_error_t *src)
+{
+ dst->zip_err = src->zip_err;
+ dst->sys_err = src->sys_err;
+}
+
+
+void
+_zip_error_get(const zip_error_t *err, int *zep, int *sep)
+{
+ if (zep)
+ *zep = err->zip_err;
+ if (sep) {
+ if (zip_error_system_type(err) != ZIP_ET_NONE)
+ *sep = err->sys_err;
+ else
+ *sep = 0;
+ }
+}
+
+
+void
+zip_error_set(zip_error_t *err, int ze, int se)
+{
+ if (err) {
+ err->zip_err = ze;
+ err->sys_err = se;
+ }
+}
+
+
+void
+_zip_error_set_from_source(zip_error_t *err, zip_source_t *src)
+{
+ _zip_error_copy(err, zip_source_error(src));
+}
+
+
+zip_int64_t
+zip_error_to_data(const zip_error_t *error, void *data, zip_uint64_t length)
+{
+ int *e = (int *)data;
+
+ if (length < sizeof(int)*2) {
+ return -1;
+ }
+
+ e[0] = zip_error_code_zip(error);
+ e[1] = zip_error_code_system(error);
+ return sizeof(int)*2;
+}
diff --git a/src/Common/libzip/zip_error_clear.c b/src/Common/libzip/zip_error_clear.c
new file mode 100644
index 0000000..ec45e68
--- /dev/null
+++ b/src/Common/libzip/zip_error_clear.c
@@ -0,0 +1,45 @@
+/*
+ zip_error_clear.c -- clear zip error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_error_clear(zip_t *za)
+{
+ if (za == NULL)
+ return;
+
+ _zip_error_clear(&za->error);
+}
diff --git a/src/Common/libzip/zip_error_get.c b/src/Common/libzip/zip_error_get.c
new file mode 100644
index 0000000..c222018
--- /dev/null
+++ b/src/Common/libzip/zip_error_get.c
@@ -0,0 +1,57 @@
+/*
+ zip_error_get.c -- get zip error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_error_get(zip_t *za, int *zep, int *sep)
+{
+ _zip_error_get(&za->error, zep, sep);
+}
+
+
+ZIP_EXTERN zip_error_t *
+zip_get_error(zip_t *za)
+{
+ return &za->error;
+}
+
+
+ZIP_EXTERN zip_error_t *
+zip_file_get_error(zip_file_t *f)
+{
+ return &f->error;
+}
diff --git a/src/Common/libzip/zip_error_get_sys_type.c b/src/Common/libzip/zip_error_get_sys_type.c
new file mode 100644
index 0000000..7e27bbf
--- /dev/null
+++ b/src/Common/libzip/zip_error_get_sys_type.c
@@ -0,0 +1,45 @@
+/*
+ zip_error_get_sys_type.c -- return type of system error code
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_error_get_sys_type(int ze)
+{
+ if (ze < 0 || ze >= _zip_nerr_str)
+ return 0;
+
+ return _zip_err_type[ze];
+}
diff --git a/src/Common/libzip/zip_error_strerror.c b/src/Common/libzip/zip_error_strerror.c
new file mode 100644
index 0000000..29efc8a
--- /dev/null
+++ b/src/Common/libzip/zip_error_strerror.c
@@ -0,0 +1,87 @@
+/*
+ zip_error_sterror.c -- get string representation of struct zip_error
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_error_strerror(zip_error_t *err)
+{
+ const char *zs, *ss;
+ char buf[128], *s;
+
+ zip_error_fini(err);
+
+ if (err->zip_err < 0 || err->zip_err >= _zip_nerr_str) {
+ sprintf(buf, "Unknown error %d", err->zip_err);
+ zs = NULL;
+ ss = buf;
+ }
+ else {
+ zs = _zip_err_str[err->zip_err];
+
+ switch (_zip_err_type[err->zip_err]) {
+ case ZIP_ET_SYS:
+ ss = strerror(err->sys_err);
+ break;
+
+ case ZIP_ET_ZLIB:
+ ss = zError(err->sys_err);
+ break;
+
+ default:
+ ss = NULL;
+ }
+ }
+
+ if (ss == NULL)
+ return zs;
+ else {
+ if ((s=(char *)malloc(strlen(ss)
+ + (zs ? strlen(zs)+2 : 0) + 1)) == NULL)
+ return _zip_err_str[ZIP_ER_MEMORY];
+
+ sprintf(s, "%s%s%s",
+ (zs ? zs : ""),
+ (zs ? ": " : ""),
+ ss);
+ err->str = s;
+
+ return s;
+ }
+}
diff --git a/src/Common/libzip/zip_error_to_str.c b/src/Common/libzip/zip_error_to_str.c
new file mode 100644
index 0000000..22de177
--- /dev/null
+++ b/src/Common/libzip/zip_error_to_str.c
@@ -0,0 +1,68 @@
+/*
+ zip_error_to_str.c -- get string representation of zip error code
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_error_to_str(char *buf, zip_uint64_t len, int ze, int se)
+{
+ const char *zs, *ss;
+
+ if (ze < 0 || ze >= _zip_nerr_str)
+ return snprintf(buf, len, "Unknown error %d", ze);
+
+ zs = _zip_err_str[ze];
+
+ switch (_zip_err_type[ze]) {
+ case ZIP_ET_SYS:
+ ss = strerror(se);
+ break;
+
+ case ZIP_ET_ZLIB:
+ ss = zError(se);
+ break;
+
+ default:
+ ss = NULL;
+ }
+
+ return snprintf(buf, len, "%s%s%s",
+ zs, (ss ? ": " : ""), (ss ? ss : ""));
+}
diff --git a/src/Common/libzip/zip_extra_field.c b/src/Common/libzip/zip_extra_field.c
new file mode 100644
index 0000000..0350478
--- /dev/null
+++ b/src/Common/libzip/zip_extra_field.c
@@ -0,0 +1,438 @@
+/*
+ zip_extra_field.c -- manipulate extra fields
+ Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+zip_extra_field_t *
+_zip_ef_clone(const zip_extra_field_t *ef, zip_error_t *error)
+{
+ zip_extra_field_t *head, *prev, *def;
+
+ head = prev = NULL;
+
+ while (ef) {
+ if ((def=_zip_ef_new(ef->id, ef->size, ef->data, ef->flags)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ _zip_ef_free(head);
+ return NULL;
+ }
+
+ if (head == NULL)
+ head = def;
+ if (prev)
+ prev->next = def;
+ prev = def;
+
+ ef = ef->next;
+ }
+
+ return head;
+}
+
+
+zip_extra_field_t *
+_zip_ef_delete_by_id(zip_extra_field_t *ef, zip_uint16_t id, zip_uint16_t id_idx, zip_flags_t flags)
+{
+ zip_extra_field_t *head, *prev;
+ int i;
+
+ i = 0;
+ head = ef;
+ prev = NULL;
+ for (; ef; ef=(prev ? prev->next : head)) {
+ if ((ef->flags & flags & ZIP_EF_BOTH) && ((ef->id == id) || (id == ZIP_EXTRA_FIELD_ALL))) {
+ if (id_idx == ZIP_EXTRA_FIELD_ALL || i == id_idx) {
+ ef->flags &= ~(flags & ZIP_EF_BOTH);
+ if ((ef->flags & ZIP_EF_BOTH) == 0) {
+ if (prev)
+ prev->next = ef->next;
+ else
+ head = ef->next;
+ ef->next = NULL;
+ _zip_ef_free(ef);
+
+ if (id_idx == ZIP_EXTRA_FIELD_ALL)
+ continue;
+ }
+ }
+
+ i++;
+ if (i > id_idx)
+ break;
+ }
+ prev = ef;
+ }
+
+ return head;
+}
+
+
+
+void
+_zip_ef_free(zip_extra_field_t *ef)
+{
+ zip_extra_field_t *ef2;
+
+ while (ef) {
+ ef2 = ef->next;
+ free(ef->data);
+ free(ef);
+ ef = ef2;
+ }
+}
+
+
+const zip_uint8_t *
+_zip_ef_get_by_id(const zip_extra_field_t *ef, zip_uint16_t *lenp, zip_uint16_t id, zip_uint16_t id_idx, zip_flags_t flags, zip_error_t *error)
+{
+ static const zip_uint8_t empty[1] = { '\0' };
+
+ int i;
+
+ i = 0;
+ for (; ef; ef=ef->next) {
+ if (ef->id == id && (ef->flags & flags & ZIP_EF_BOTH)) {
+ if (i < id_idx) {
+ i++;
+ continue;
+ }
+
+ if (lenp)
+ *lenp = ef->size;
+ if (ef->size > 0)
+ return ef->data;
+ else
+ return empty;
+ }
+ }
+
+ zip_error_set(error, ZIP_ER_NOENT, 0);
+ return NULL;
+}
+
+
+zip_extra_field_t *
+_zip_ef_merge(zip_extra_field_t *to, zip_extra_field_t *from)
+{
+ zip_extra_field_t *ef2, *tt, *tail;
+ int duplicate;
+
+ if (to == NULL)
+ return from;
+
+ for (tail=to; tail->next; tail=tail->next)
+ ;
+
+ for (; from; from=ef2) {
+ ef2 = from->next;
+
+ duplicate = 0;
+ for (tt=to; tt; tt=tt->next) {
+ if (tt->id == from->id && tt->size == from->size && memcmp(tt->data, from->data, tt->size) == 0) {
+ tt->flags |= (from->flags & ZIP_EF_BOTH);
+ duplicate = 1;
+ break;
+ }
+ }
+
+ from->next = NULL;
+ if (duplicate)
+ _zip_ef_free(from);
+ else
+ tail = tail->next = from;
+ }
+
+ return to;
+}
+
+
+zip_extra_field_t *
+_zip_ef_new(zip_uint16_t id, zip_uint16_t size, const zip_uint8_t *data, zip_flags_t flags)
+{
+ zip_extra_field_t *ef;
+
+ if ((ef=(zip_extra_field_t *)malloc(sizeof(*ef))) == NULL)
+ return NULL;
+
+ ef->next = NULL;
+ ef->flags = flags;
+ ef->id = id;
+ ef->size = size;
+ if (size > 0) {
+ if ((ef->data=(zip_uint8_t *)_zip_memdup(data, size, NULL)) == NULL) {
+ free(ef);
+ return NULL;
+ }
+ }
+ else
+ ef->data = NULL;
+
+ return ef;
+}
+
+
+bool
+_zip_ef_parse(const zip_uint8_t *data, zip_uint16_t len, zip_flags_t flags, zip_extra_field_t **ef_head_p, zip_error_t *error)
+{
+ zip_buffer_t *buffer;
+ zip_extra_field_t *ef, *ef2, *ef_head;
+
+ if ((buffer = _zip_buffer_new((zip_uint8_t *)data, len)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return false;
+ }
+
+ ef_head = ef = NULL;
+
+ while (_zip_buffer_ok(buffer) && _zip_buffer_left(buffer) >= 4) {
+ zip_uint16_t fid, flen;
+ zip_uint8_t *ef_data;
+
+ fid = _zip_buffer_get_16(buffer);
+ flen = _zip_buffer_get_16(buffer);
+ ef_data = _zip_buffer_get(buffer, flen);
+
+ if (ef_data == NULL) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_buffer_free(buffer);
+ _zip_ef_free(ef_head);
+ return false;
+ }
+
+ if ((ef2=_zip_ef_new(fid, flen, ef_data, flags)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ _zip_buffer_free(buffer);
+ _zip_ef_free(ef_head);
+ return false;
+ }
+
+ if (ef_head) {
+ ef->next = ef2;
+ ef = ef2;
+ }
+ else
+ ef_head = ef = ef2;
+ }
+
+ if (!_zip_buffer_eof(buffer)) {
+ /* Android APK files align stored file data with padding in extra fields; ignore. */
+ /* see https://android.googlesource.com/platform/build/+/master/tools/zipalign/ZipAlign.cpp */
+ size_t glen = _zip_buffer_left(buffer);
+ zip_uint8_t *garbage;
+ garbage = _zip_buffer_get(buffer, glen);
+ if (glen >= 4 || garbage == NULL || memcmp(garbage, "\0\0\0", glen) != 0) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_buffer_free(buffer);
+ _zip_ef_free(ef_head);
+ return false;
+ }
+ }
+
+ _zip_buffer_free(buffer);
+
+ if (ef_head_p) {
+ *ef_head_p = ef_head;
+ }
+ else {
+ _zip_ef_free(ef_head);
+ }
+
+ return true;
+}
+
+
+zip_extra_field_t *
+_zip_ef_remove_internal(zip_extra_field_t *ef)
+{
+ zip_extra_field_t *ef_head;
+ zip_extra_field_t *prev, *next;
+
+ ef_head = ef;
+ prev = NULL;
+
+ while (ef) {
+ if (ZIP_EF_IS_INTERNAL(ef->id)) {
+ next = ef->next;
+ if (ef_head == ef)
+ ef_head = next;
+ ef->next = NULL;
+ _zip_ef_free(ef);
+ if (prev)
+ prev->next = next;
+ ef = next;
+ }
+ else {
+ prev = ef;
+ ef = ef->next;
+ }
+ }
+
+ return ef_head;
+}
+
+
+zip_uint16_t
+_zip_ef_size(const zip_extra_field_t *ef, zip_flags_t flags)
+{
+ zip_uint16_t size;
+
+ size = 0;
+ for (; ef; ef=ef->next) {
+ if (ef->flags & flags & ZIP_EF_BOTH)
+ size = (zip_uint16_t)(size+4+ef->size);
+ }
+
+ return size;
+}
+
+
+int
+_zip_ef_write(zip_t *za, const zip_extra_field_t *ef, zip_flags_t flags)
+{
+ zip_uint8_t b[4];
+ zip_buffer_t *buffer = _zip_buffer_new(b, sizeof(b));
+
+ if (buffer == NULL) {
+ return -1;
+ }
+
+ for (; ef; ef=ef->next) {
+ if (ef->flags & flags & ZIP_EF_BOTH) {
+ _zip_buffer_set_offset(buffer, 0);
+ _zip_buffer_put_16(buffer, ef->id);
+ _zip_buffer_put_16(buffer, ef->size);
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+ if (_zip_write(za, b, 4) < 0) {
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+ if (ef->size > 0) {
+ if (_zip_write(za, ef->data, ef->size) < 0) {
+ _zip_buffer_free(buffer);
+ return -1;
+ }
+ }
+ }
+ }
+
+ _zip_buffer_free(buffer);
+ return 0;
+}
+
+
+int
+_zip_read_local_ef(zip_t *za, zip_uint64_t idx)
+{
+ zip_entry_t *e;
+ unsigned char b[4];
+ zip_buffer_t *buffer;
+ zip_uint16_t fname_len, ef_len;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ e = za->entry+idx;
+
+ if (e->orig == NULL || e->orig->local_extra_fields_read)
+ return 0;
+
+ if (e->orig->offset + 26 > ZIP_INT64_MAX) {
+ zip_error_set(&za->error, ZIP_ER_SEEK, EFBIG);
+ return -1;
+ }
+
+ if (zip_source_seek(za->src, (zip_int64_t)(e->orig->offset + 26), SEEK_SET) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+
+ if ((buffer = _zip_buffer_new_from_source(za->src, sizeof(b), b, &za->error)) == NULL) {
+ return -1;
+ }
+
+ fname_len = _zip_buffer_get_16(buffer);
+ ef_len = _zip_buffer_get_16(buffer);
+
+ if (!_zip_buffer_eof(buffer)) {
+ _zip_buffer_free(buffer);
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ _zip_buffer_free(buffer);
+
+ if (ef_len > 0) {
+ zip_extra_field_t *ef;
+ zip_uint8_t *ef_raw;
+
+ if (zip_source_seek(za->src, fname_len, SEEK_CUR) < 0) {
+ zip_error_set(&za->error, ZIP_ER_SEEK, errno);
+ return -1;
+ }
+
+ ef_raw = _zip_read_data(NULL, za->src, ef_len, 0, &za->error);
+
+ if (ef_raw == NULL)
+ return -1;
+
+ if (!_zip_ef_parse(ef_raw, ef_len, ZIP_EF_LOCAL, &ef, &za->error)) {
+ free(ef_raw);
+ return -1;
+ }
+ free(ef_raw);
+
+ if (ef) {
+ ef = _zip_ef_remove_internal(ef);
+ e->orig->extra_fields = _zip_ef_merge(e->orig->extra_fields, ef);
+ }
+ }
+
+ e->orig->local_extra_fields_read = 1;
+
+ if (e->changes && e->changes->local_extra_fields_read == 0) {
+ e->changes->extra_fields = e->orig->extra_fields;
+ e->changes->local_extra_fields_read = 1;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_extra_field_api.c b/src/Common/libzip/zip_extra_field_api.c
new file mode 100644
index 0000000..ed93944
--- /dev/null
+++ b/src/Common/libzip/zip_extra_field_api.c
@@ -0,0 +1,366 @@
+/*
+ zip_extra_field_api.c -- public extra fields API functions
+ Copyright (C) 2012-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_file_extra_field_delete(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_idx, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (((flags & ZIP_EF_BOTH) == ZIP_EF_BOTH) && (ef_idx != ZIP_EXTRA_FIELD_ALL)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (_zip_file_extra_field_prepare_for_change(za, idx) < 0)
+ return -1;
+
+ de = za->entry[idx].changes;
+
+ de->extra_fields = _zip_ef_delete_by_id(de->extra_fields, ZIP_EXTRA_FIELD_ALL, ef_idx, flags);
+ return 0;
+}
+
+
+ZIP_EXTERN int
+zip_file_extra_field_delete_by_id(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_id, zip_uint16_t ef_idx, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (((flags & ZIP_EF_BOTH) == ZIP_EF_BOTH) && (ef_idx != ZIP_EXTRA_FIELD_ALL)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (_zip_file_extra_field_prepare_for_change(za, idx) < 0)
+ return -1;
+
+ de = za->entry[idx].changes;
+
+ de->extra_fields = _zip_ef_delete_by_id(de->extra_fields, ef_id, ef_idx, flags);
+ return 0;
+}
+
+
+ZIP_EXTERN const zip_uint8_t *
+zip_file_extra_field_get(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_idx, zip_uint16_t *idp, zip_uint16_t *lenp, zip_flags_t flags)
+{
+ static const zip_uint8_t empty[1] = { '\0' };
+
+ zip_dirent_t *de;
+ zip_extra_field_t *ef;
+ int i;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((de=_zip_get_dirent(za, idx, flags, &za->error)) == NULL)
+ return NULL;
+
+ if (flags & ZIP_FL_LOCAL)
+ if (_zip_read_local_ef(za, idx) < 0)
+ return NULL;
+
+ i = 0;
+ for (ef=de->extra_fields; ef; ef=ef->next) {
+ if (ef->flags & flags & ZIP_EF_BOTH) {
+ if (i < ef_idx) {
+ i++;
+ continue;
+ }
+
+ if (idp)
+ *idp = ef->id;
+ if (lenp)
+ *lenp = ef->size;
+ if (ef->size > 0)
+ return ef->data;
+ else
+ return empty;
+ }
+ }
+
+ zip_error_set(&za->error, ZIP_ER_NOENT, 0);
+ return NULL;
+
+}
+
+
+ZIP_EXTERN const zip_uint8_t *
+zip_file_extra_field_get_by_id(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_id, zip_uint16_t ef_idx, zip_uint16_t *lenp, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((de=_zip_get_dirent(za, idx, flags, &za->error)) == NULL)
+ return NULL;
+
+ if (flags & ZIP_FL_LOCAL)
+ if (_zip_read_local_ef(za, idx) < 0)
+ return NULL;
+
+ return _zip_ef_get_by_id(de->extra_fields, lenp, ef_id, ef_idx, flags, &za->error);
+}
+
+
+ZIP_EXTERN zip_int16_t
+zip_file_extra_fields_count(zip_t *za, zip_uint64_t idx, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+ zip_extra_field_t *ef;
+ zip_uint16_t n;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if ((de=_zip_get_dirent(za, idx, flags, &za->error)) == NULL)
+ return -1;
+
+ if (flags & ZIP_FL_LOCAL)
+ if (_zip_read_local_ef(za, idx) < 0)
+ return -1;
+
+ n = 0;
+ for (ef=de->extra_fields; ef; ef=ef->next)
+ if (ef->flags & flags & ZIP_EF_BOTH)
+ n++;
+
+ return (zip_int16_t)n;
+}
+
+
+ZIP_EXTERN zip_int16_t
+zip_file_extra_fields_count_by_id(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_id, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+ zip_extra_field_t *ef;
+ zip_uint16_t n;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if ((de=_zip_get_dirent(za, idx, flags, &za->error)) == NULL)
+ return -1;
+
+ if (flags & ZIP_FL_LOCAL)
+ if (_zip_read_local_ef(za, idx) < 0)
+ return -1;
+
+ n = 0;
+ for (ef=de->extra_fields; ef; ef=ef->next)
+ if (ef->id == ef_id && (ef->flags & flags & ZIP_EF_BOTH))
+ n++;
+
+ return (zip_int16_t)n;
+}
+
+
+ZIP_EXTERN int
+zip_file_extra_field_set(zip_t *za, zip_uint64_t idx, zip_uint16_t ef_id, zip_uint16_t ef_idx, const zip_uint8_t *data, zip_uint16_t len, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+ zip_uint16_t ls, cs;
+ zip_extra_field_t *ef, *ef_prev, *ef_new;
+ int i, found, new_len;
+
+ if ((flags & ZIP_EF_BOTH) == 0) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (ZIP_EF_IS_INTERNAL(ef_id)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_file_extra_field_prepare_for_change(za, idx) < 0)
+ return -1;
+
+ de = za->entry[idx].changes;
+
+ ef = de->extra_fields;
+ ef_prev = NULL;
+ i = 0;
+ found = 0;
+
+ for (; ef; ef=ef->next) {
+ if (ef->id == ef_id && (ef->flags & flags & ZIP_EF_BOTH)) {
+ if (i == ef_idx) {
+ found = 1;
+ break;
+ }
+ i++;
+ }
+ ef_prev = ef;
+ }
+
+ if (i < ef_idx && ef_idx != ZIP_EXTRA_FIELD_NEW) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (flags & ZIP_EF_LOCAL)
+ ls = _zip_ef_size(de->extra_fields, ZIP_EF_LOCAL);
+ else
+ ls = 0;
+ if (flags & ZIP_EF_CENTRAL)
+ cs = _zip_ef_size(de->extra_fields, ZIP_EF_CENTRAL);
+ else
+ cs = 0;
+
+ new_len = ls > cs ? ls : cs;
+ if (found)
+ new_len -= ef->size + 4;
+ new_len += len + 4;
+
+ if (new_len > ZIP_UINT16_MAX) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if ((ef_new=_zip_ef_new(ef_id, len, data, flags)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+
+ if (found) {
+ if ((ef->flags & ZIP_EF_BOTH) == (flags & ZIP_EF_BOTH)) {
+ ef_new->next = ef->next;
+ ef->next = NULL;
+ _zip_ef_free(ef);
+ if (ef_prev)
+ ef_prev->next = ef_new;
+ else
+ de->extra_fields = ef_new;
+ }
+ else {
+ ef->flags &= ~(flags & ZIP_EF_BOTH);
+ ef_new->next = ef->next;
+ ef->next = ef_new;
+ }
+ }
+ else if (ef_prev) {
+ ef_new->next = ef_prev->next;
+ ef_prev->next = ef_new;
+ }
+ else
+ de->extra_fields = ef_new;
+
+ return 0;
+}
+
+
+
+int
+_zip_file_extra_field_prepare_for_change(zip_t *za, zip_uint64_t idx)
+{
+ zip_entry_t *e;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ e = za->entry+idx;
+
+ if (e->changes && (e->changes->changed & ZIP_DIRENT_EXTRA_FIELD))
+ return 0;
+
+ if (e->orig) {
+ if (_zip_read_local_ef(za, idx) < 0)
+ return -1;
+ }
+
+ if (e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+
+ if (e->orig && e->orig->extra_fields) {
+ if ((e->changes->extra_fields=_zip_ef_clone(e->orig->extra_fields, &za->error)) == NULL)
+ return -1;
+ }
+ e->changes->changed |= ZIP_DIRENT_EXTRA_FIELD;
+
+ return 0;
+}
+
diff --git a/src/Common/libzip/zip_fclose.c b/src/Common/libzip/zip_fclose.c
new file mode 100644
index 0000000..25a201b
--- /dev/null
+++ b/src/Common/libzip/zip_fclose.c
@@ -0,0 +1,55 @@
+/*
+ zip_fclose.c -- close file in zip archive
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_fclose(zip_file_t *zf)
+{
+ int ret;
+
+ if (zf->src)
+ zip_source_free(zf->src);
+
+ ret = 0;
+ if (zf->error.zip_err)
+ ret = zf->error.zip_err;
+
+ zip_error_fini(&zf->error);
+ free(zf);
+ return ret;
+}
diff --git a/src/Common/libzip/zip_fdopen.c b/src/Common/libzip/zip_fdopen.c
new file mode 100644
index 0000000..bbcdf4f
--- /dev/null
+++ b/src/Common/libzip/zip_fdopen.c
@@ -0,0 +1,85 @@
+/*
+ zip_fdopen.c -- open read-only archive from file descriptor
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+
+ZIP_EXTERN zip_t *
+zip_fdopen(int fd_orig, int _flags, int *zep)
+{
+ int fd;
+ FILE *fp;
+ zip_t *za;
+ zip_source_t *src;
+ struct zip_error error;
+
+ if (_flags < 0 || (_flags & ZIP_TRUNCATE)) {
+ _zip_set_open_error(zep, NULL, ZIP_ER_INVAL);
+ return NULL;
+ }
+
+ /* We dup() here to avoid messing with the passed in fd.
+ We could not restore it to the original state in case of error. */
+
+ if ((fd=dup(fd_orig)) < 0) {
+ _zip_set_open_error(zep, NULL, ZIP_ER_OPEN);
+ return NULL;
+ }
+
+ if ((fp=fdopen(fd, "rb")) == NULL) {
+ close(fd);
+ _zip_set_open_error(zep, NULL, ZIP_ER_OPEN);
+ return NULL;
+ }
+
+ zip_error_init(&error);
+ if ((src = zip_source_filep_create(fp, 0, -1, &error)) == NULL) {
+ _zip_set_open_error(zep, &error, 0);
+ zip_error_fini(&error);
+ return NULL;
+ }
+
+ if ((za = zip_open_from_source(src, _flags, &error)) == NULL) {
+ _zip_set_open_error(zep, &error, 0);
+ zip_error_fini(&error);
+ return NULL;
+ }
+
+ zip_error_fini(&error);
+ close(fd_orig);
+ return za;
+}
diff --git a/src/Common/libzip/zip_file_add.c b/src/Common/libzip/zip_file_add.c
new file mode 100644
index 0000000..9944c0f
--- /dev/null
+++ b/src/Common/libzip/zip_file_add.c
@@ -0,0 +1,53 @@
+/*
+ zip_file_add.c -- add file via callback function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+/*
+ NOTE: Return type is signed so we can return -1 on error.
+ The index can not be larger than ZIP_INT64_MAX since the size
+ of the central directory cannot be larger than
+ ZIP_UINT64_MAX, and each entry is larger than 2 bytes.
+*/
+
+ZIP_EXTERN zip_int64_t
+zip_file_add(zip_t *za, const char *name, zip_source_t *source, zip_flags_t flags)
+{
+ if (name == NULL || source == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_file_replace(za, ZIP_UINT64_MAX, name, source, flags);
+}
diff --git a/src/Common/libzip/zip_file_error_clear.c b/src/Common/libzip/zip_file_error_clear.c
new file mode 100644
index 0000000..be45498
--- /dev/null
+++ b/src/Common/libzip/zip_file_error_clear.c
@@ -0,0 +1,45 @@
+/*
+ zip_file_error_clear.c -- clear zip file error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_file_error_clear(zip_file_t *zf)
+{
+ if (zf == NULL)
+ return;
+
+ _zip_error_clear(&zf->error);
+}
diff --git a/src/Common/libzip/zip_file_error_get.c b/src/Common/libzip/zip_file_error_get.c
new file mode 100644
index 0000000..be764fd
--- /dev/null
+++ b/src/Common/libzip/zip_file_error_get.c
@@ -0,0 +1,42 @@
+/*
+ zip_file_error_get.c -- get zip file error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_file_error_get(zip_file_t *zf, int *zep, int *sep)
+{
+ _zip_error_get(&zf->error, zep, sep);
+}
diff --git a/src/Common/libzip/zip_file_get_comment.c b/src/Common/libzip/zip_file_get_comment.c
new file mode 100644
index 0000000..55e7dc2
--- /dev/null
+++ b/src/Common/libzip/zip_file_get_comment.c
@@ -0,0 +1,56 @@
+/*
+ zip_file_get_comment.c -- get file comment
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+/* lenp is 32 bit because converted comment can be longer than ZIP_UINT16_MAX */
+
+ZIP_EXTERN const char *
+zip_file_get_comment(zip_t *za, zip_uint64_t idx, zip_uint32_t *lenp, zip_flags_t flags)
+{
+ zip_dirent_t *de;
+ zip_uint32_t len;
+ const zip_uint8_t *str;
+
+ if ((de=_zip_get_dirent(za, idx, flags, NULL)) == NULL)
+ return NULL;
+
+ if ((str=_zip_string_get(de->comment, &len, flags, &za->error)) == NULL)
+ return NULL;
+
+ if (lenp)
+ *lenp = len;
+
+ return (const char *)str;
+}
diff --git a/src/Common/libzip/zip_file_get_external_attributes.c b/src/Common/libzip/zip_file_get_external_attributes.c
new file mode 100644
index 0000000..b6526cf
--- /dev/null
+++ b/src/Common/libzip/zip_file_get_external_attributes.c
@@ -0,0 +1,51 @@
+/*
+ zip_file_get_external_attributes.c -- get opsys/external attributes
+ Copyright (C) 2013-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "zipint.h"
+
+int
+zip_file_get_external_attributes(zip_t *za, zip_uint64_t idx, zip_flags_t flags, zip_uint8_t *opsys, zip_uint32_t *attributes)
+{
+ zip_dirent_t *de;
+
+ if ((de=_zip_get_dirent(za, idx, flags, NULL)) == NULL)
+ return -1;
+
+ if (opsys)
+ *opsys = (zip_uint8_t)((de->version_madeby >> 8) & 0xff);
+
+ if (attributes)
+ *attributes = de->ext_attrib;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_file_get_offset.c b/src/Common/libzip/zip_file_get_offset.c
new file mode 100644
index 0000000..0257b04
--- /dev/null
+++ b/src/Common/libzip/zip_file_get_offset.c
@@ -0,0 +1,73 @@
+/*
+ zip_file_get_offset.c -- get offset of file data in archive.
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "zipint.h"
+
+
+/* _zip_file_get_offset(za, ze):
+ Returns the offset of the file data for entry ze.
+
+ On error, fills in za->error and returns 0.
+*/
+
+zip_uint64_t
+_zip_file_get_offset(const zip_t *za, zip_uint64_t idx, zip_error_t *error)
+{
+ zip_uint64_t offset;
+ zip_int32_t size;
+
+ offset = za->entry[idx].orig->offset;
+
+ if (zip_source_seek(za->src, (zip_int64_t)offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(error, za->src);
+ return 0;
+ }
+
+ /* TODO: cache? */
+ if ((size=_zip_dirent_size(za->src, ZIP_EF_LOCAL, error)) < 0)
+ return 0;
+
+ if (offset+(zip_uint32_t)size > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return 0;
+ }
+
+ return offset + (zip_uint32_t)size;
+}
diff --git a/src/Common/libzip/zip_file_rename.c b/src/Common/libzip/zip_file_rename.c
new file mode 100644
index 0000000..4400938
--- /dev/null
+++ b/src/Common/libzip/zip_file_rename.c
@@ -0,0 +1,68 @@
+/*
+ zip_file_rename.c -- rename file in zip archive
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_file_rename(zip_t *za, zip_uint64_t idx, const char *name, zip_flags_t flags)
+{
+ const char *old_name;
+ int old_is_dir, new_is_dir;
+
+ if (idx >= za->nentry || (name != NULL && strlen(name) > ZIP_UINT16_MAX)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if ((old_name=zip_get_name(za, idx, 0)) == NULL)
+ return -1;
+
+ new_is_dir = (name != NULL && name[strlen(name)-1] == '/');
+ old_is_dir = (old_name[strlen(old_name)-1] == '/');
+
+ if (new_is_dir != old_is_dir) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_set_name(za, idx, name, flags);
+}
diff --git a/src/Common/libzip/zip_file_replace.c b/src/Common/libzip/zip_file_replace.c
new file mode 100644
index 0000000..e430efa
--- /dev/null
+++ b/src/Common/libzip/zip_file_replace.c
@@ -0,0 +1,108 @@
+/*
+ zip_file_replace.c -- replace file via callback function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_file_replace(zip_t *za, zip_uint64_t idx, zip_source_t *source, zip_flags_t flags)
+{
+ if (idx >= za->nentry || source == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_file_replace(za, idx, NULL, source, flags) == -1)
+ return -1;
+
+ return 0;
+}
+
+
+
+/* NOTE: Signed due to -1 on error. See zip_add.c for more details. */
+
+zip_int64_t
+_zip_file_replace(zip_t *za, zip_uint64_t idx, const char *name, zip_source_t *source, zip_flags_t flags)
+{
+ zip_uint64_t za_nentry_prev;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ za_nentry_prev = za->nentry;
+ if (idx == ZIP_UINT64_MAX) {
+ zip_int64_t i = -1;
+
+ if (flags & ZIP_FL_OVERWRITE)
+ i = _zip_name_locate(za, name, flags, NULL);
+
+ if (i == -1) {
+ /* create and use new entry, used by zip_add */
+ if ((i=_zip_add_entry(za)) < 0)
+ return -1;
+ }
+ idx = (zip_uint64_t)i;
+ }
+
+ if (name && _zip_set_name(za, idx, name, flags) != 0) {
+ if (za->nentry != za_nentry_prev) {
+ _zip_entry_finalize(za->entry+idx);
+ za->nentry = za_nentry_prev;
+ }
+ return -1;
+ }
+
+ /* does not change any name related data, so we can do it here;
+ * needed for a double add of the same file name */
+ _zip_unchange_data(za->entry+idx);
+
+ if (za->entry[idx].orig != NULL && (za->entry[idx].changes == NULL || (za->entry[idx].changes->changed & ZIP_DIRENT_COMP_METHOD) == 0)) {
+ if (za->entry[idx].changes == NULL) {
+ if ((za->entry[idx].changes=_zip_dirent_clone(za->entry[idx].orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+
+ za->entry[idx].changes->comp_method = ZIP_CM_REPLACED_DEFAULT;
+ za->entry[idx].changes->changed |= ZIP_DIRENT_COMP_METHOD;
+ }
+
+ za->entry[idx].source = source;
+
+ return (zip_int64_t)idx;
+}
diff --git a/src/Common/libzip/zip_file_set_comment.c b/src/Common/libzip/zip_file_set_comment.c
new file mode 100644
index 0000000..e455fbd
--- /dev/null
+++ b/src/Common/libzip/zip_file_set_comment.c
@@ -0,0 +1,103 @@
+/*
+ zip_file_set_comment.c -- set comment for file in archive
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_file_set_comment(zip_t *za, zip_uint64_t idx,
+ const char *comment, zip_uint16_t len, zip_flags_t flags)
+{
+ zip_entry_t *e;
+ zip_string_t *cstr;
+ int changed;
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (len > 0 && comment == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (len > 0) {
+ if ((cstr=_zip_string_new((const zip_uint8_t *)comment, len, flags, &za->error)) == NULL)
+ return -1;
+ if ((flags & ZIP_FL_ENCODING_ALL) == ZIP_FL_ENC_GUESS && _zip_guess_encoding(cstr, ZIP_ENCODING_UNKNOWN) == ZIP_ENCODING_UTF8_GUESSED)
+ cstr->encoding = ZIP_ENCODING_UTF8_KNOWN;
+ }
+ else
+ cstr = NULL;
+
+ e = za->entry+idx;
+
+ if (e->changes) {
+ _zip_string_free(e->changes->comment);
+ e->changes->comment = NULL;
+ e->changes->changed &= ~ZIP_DIRENT_COMMENT;
+ }
+
+ if (e->orig && e->orig->comment)
+ changed = !_zip_string_equal(e->orig->comment, cstr);
+ else
+ changed = (cstr != NULL);
+
+ if (changed) {
+ if (e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ _zip_string_free(cstr);
+ return -1;
+ }
+ }
+ e->changes->comment = cstr;
+ e->changes->changed |= ZIP_DIRENT_COMMENT;
+ }
+ else {
+ _zip_string_free(cstr);
+ if (e->changes && e->changes->changed == 0) {
+ _zip_dirent_free(e->changes);
+ e->changes = NULL;
+ }
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_file_set_external_attributes.c b/src/Common/libzip/zip_file_set_external_attributes.c
new file mode 100644
index 0000000..b772c31
--- /dev/null
+++ b/src/Common/libzip/zip_file_set_external_attributes.c
@@ -0,0 +1,83 @@
+/*
+ zip_file_set_external_attributes.c -- set external attributes for entry
+ Copyright (C) 2013-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "zipint.h"
+
+ZIP_EXTERN int
+zip_file_set_external_attributes(zip_t *za, zip_uint64_t idx, zip_flags_t flags, zip_uint8_t opsys, zip_uint32_t attributes)
+{
+ zip_entry_t *e;
+ int changed;
+ zip_uint8_t unchanged_opsys;
+ zip_uint32_t unchanged_attributes;
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ e = za->entry+idx;
+
+ unchanged_opsys = (e->orig ? (zip_uint8_t)(e->orig->version_madeby>>8) : (zip_uint8_t)ZIP_OPSYS_DEFAULT);
+ unchanged_attributes = e->orig ? e->orig->ext_attrib : ZIP_EXT_ATTRIB_DEFAULT;
+
+ changed = (opsys != unchanged_opsys || attributes != unchanged_attributes);
+
+ if (changed) {
+ if (e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+ e->changes->version_madeby = (zip_uint16_t)((opsys << 8) | (e->changes->version_madeby & 0xff));
+ e->changes->ext_attrib = attributes;
+ e->changes->changed |= ZIP_DIRENT_ATTRIBUTES;
+ }
+ else if (e->changes) {
+ e->changes->changed &= ~ZIP_DIRENT_ATTRIBUTES;
+ if (e->changes->changed == 0) {
+ _zip_dirent_free(e->changes);
+ e->changes = NULL;
+ }
+ else {
+ e->changes->version_madeby = (zip_uint16_t)((unchanged_opsys << 8) | (e->changes->version_madeby & 0xff));
+ e->changes->ext_attrib = unchanged_attributes;
+ }
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_file_set_mtime.c b/src/Common/libzip/zip_file_set_mtime.c
new file mode 100644
index 0000000..0cdd31a
--- /dev/null
+++ b/src/Common/libzip/zip_file_set_mtime.c
@@ -0,0 +1,74 @@
+/*
+ zip_file_set_mtime.c -- set modification time of entry.
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "zipint.h"
+
+ZIP_EXTERN int zip_file_set_mtime(zip_t *za, zip_uint64_t idx, time_t mtime, zip_flags_t flags)
+{
+ zip_entry_t *e;
+ int changed;
+
+ if (_zip_get_dirent(za, idx, 0, NULL) == NULL)
+ return -1;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ e = za->entry+idx;
+
+ changed = e->orig == NULL || mtime != e->orig->last_mod;
+
+ if (changed) {
+ if (e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+ e->changes->last_mod = mtime;
+ e->changes->changed |= ZIP_DIRENT_LAST_MOD;
+ }
+ else {
+ if (e->changes) {
+ e->changes->changed &= ~ZIP_DIRENT_LAST_MOD;
+ if (e->changes->changed == 0) {
+ _zip_dirent_free(e->changes);
+ e->changes = NULL;
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_file_strerror.c b/src/Common/libzip/zip_file_strerror.c
new file mode 100644
index 0000000..8366f1e
--- /dev/null
+++ b/src/Common/libzip/zip_file_strerror.c
@@ -0,0 +1,42 @@
+/*
+ zip_file_sterror.c -- get string representation of zip file error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_file_strerror(zip_file_t *zf)
+{
+ return zip_error_strerror(&zf->error);
+}
diff --git a/src/Common/libzip/zip_filerange_crc.c b/src/Common/libzip/zip_filerange_crc.c
new file mode 100644
index 0000000..f2a27fa
--- /dev/null
+++ b/src/Common/libzip/zip_filerange_crc.c
@@ -0,0 +1,76 @@
+/*
+ zip_filerange_crc.c -- compute CRC32 for a range of a file
+ Copyright (C) 2008-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+
+#include "zipint.h"
+
+
+
+int
+_zip_filerange_crc(zip_source_t *src, zip_uint64_t start, zip_uint64_t len, uLong *crcp, zip_error_t *error)
+{
+ Bytef buf[BUFSIZE];
+ zip_int64_t n;
+
+ *crcp = crc32(0L, Z_NULL, 0);
+
+ if (start > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return -1;
+ }
+
+ if (zip_source_seek(src, (zip_int64_t)start, SEEK_SET) != 0) {
+ _zip_error_set_from_source(error, src);
+ return -1;
+ }
+
+ while (len > 0) {
+ n = (zip_int64_t)(len > BUFSIZE ? BUFSIZE : len);
+ if ((n = zip_source_read(src, buf, (zip_uint64_t)n)) < 0) {
+ _zip_error_set_from_source(error, src);
+ return -1;
+ }
+ if (n == 0) {
+ zip_error_set(error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+
+ *crcp = crc32(*crcp, buf, (uInt)n);
+
+ len -= (zip_uint64_t)n;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_fopen.c b/src/Common/libzip/zip_fopen.c
new file mode 100644
index 0000000..3adb5de
--- /dev/null
+++ b/src/Common/libzip/zip_fopen.c
@@ -0,0 +1,47 @@
+/*
+ zip_fopen.c -- open file in zip archive for reading
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_file_t *
+zip_fopen(zip_t *za, const char *fname, zip_flags_t flags)
+{
+ zip_int64_t idx;
+
+ if ((idx=zip_name_locate(za, fname, flags)) < 0)
+ return NULL;
+
+ return zip_fopen_index_encrypted(za, (zip_uint64_t)idx, flags, za->default_password);
+}
diff --git a/src/Common/libzip/zip_fopen_encrypted.c b/src/Common/libzip/zip_fopen_encrypted.c
new file mode 100644
index 0000000..5eaf2b0
--- /dev/null
+++ b/src/Common/libzip/zip_fopen_encrypted.c
@@ -0,0 +1,47 @@
+/*
+ zip_fopen_encrypted.c -- open file for reading with password
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_file_t *
+zip_fopen_encrypted(zip_t *za, const char *fname, zip_flags_t flags, const char *password)
+{
+ zip_int64_t idx;
+
+ if ((idx=zip_name_locate(za, fname, flags)) < 0)
+ return NULL;
+
+ return zip_fopen_index_encrypted(za, (zip_uint64_t)idx, flags, password);
+}
diff --git a/src/Common/libzip/zip_fopen_index.c b/src/Common/libzip/zip_fopen_index.c
new file mode 100644
index 0000000..7496f98
--- /dev/null
+++ b/src/Common/libzip/zip_fopen_index.c
@@ -0,0 +1,45 @@
+/*
+ zip_fopen_index.c -- open file in zip archive for reading by index
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_file_t *
+zip_fopen_index(zip_t *za, zip_uint64_t index, zip_flags_t flags)
+{
+ return zip_fopen_index_encrypted(za, index, flags, za->default_password);
+}
diff --git a/src/Common/libzip/zip_fopen_index_encrypted.c b/src/Common/libzip/zip_fopen_index_encrypted.c
new file mode 100644
index 0000000..92258e8
--- /dev/null
+++ b/src/Common/libzip/zip_fopen_index_encrypted.c
@@ -0,0 +1,86 @@
+/*
+ zip_fopen_index_encrypted.c -- open file for reading by index w/ password
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "zipint.h"
+
+static zip_file_t *_zip_file_new(zip_t *za);
+
+
+ZIP_EXTERN zip_file_t *
+zip_fopen_index_encrypted(zip_t *za, zip_uint64_t index, zip_flags_t flags,
+ const char *password)
+{
+ zip_file_t *zf;
+ zip_source_t *src;
+
+ if ((src=_zip_source_zip_new(za, za, index, flags, 0, 0, password)) == NULL)
+ return NULL;
+
+ if (zip_source_open(src) < 0) {
+ _zip_error_set_from_source(&za->error, src);
+ zip_source_free(src);
+ return NULL;
+ }
+
+ if ((zf=_zip_file_new(za)) == NULL) {
+ zip_source_free(src);
+ return NULL;
+ }
+
+ zf->src = src;
+
+ return zf;
+}
+
+
+static zip_file_t *
+_zip_file_new(zip_t *za)
+{
+ zip_file_t *zf;
+
+ if ((zf=(zip_file_t *)malloc(sizeof(struct zip_file))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ zf->za = za;
+ zip_error_init(&zf->error);
+ zf->eof = 0;
+ zf->src = NULL;
+
+ return zf;
+}
diff --git a/src/Common/libzip/zip_fread.c b/src/Common/libzip/zip_fread.c
new file mode 100644
index 0000000..9c1cbe0
--- /dev/null
+++ b/src/Common/libzip/zip_fread.c
@@ -0,0 +1,63 @@
+/*
+ zip_fread.c -- read from file
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_fread(zip_file_t *zf, void *outbuf, zip_uint64_t toread)
+{
+ zip_int64_t n;
+
+ if (!zf)
+ return -1;
+
+ if (zf->error.zip_err != 0)
+ return -1;
+
+ if (toread > ZIP_INT64_MAX) {
+ zip_error_set(&zf->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if ((zf->eof) || (toread == 0))
+ return 0;
+
+ if ((n=zip_source_read(zf->src, outbuf, toread)) < 0) {
+ _zip_error_set_from_source(&zf->error, zf->src);
+ return -1;
+ }
+
+ return n;
+}
diff --git a/src/Common/libzip/zip_get_archive_comment.c b/src/Common/libzip/zip_get_archive_comment.c
new file mode 100644
index 0000000..78f8ca0
--- /dev/null
+++ b/src/Common/libzip/zip_get_archive_comment.c
@@ -0,0 +1,59 @@
+/*
+ zip_get_archive_comment.c -- get archive comment
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_get_archive_comment(zip_t *za, int *lenp, zip_flags_t flags)
+{
+ zip_string_t *comment;
+ zip_uint32_t len;
+ const zip_uint8_t *str;
+
+ if ((flags & ZIP_FL_UNCHANGED) || (za->comment_changes == NULL))
+ comment = za->comment_orig;
+ else
+ comment = za->comment_changes;
+
+ if ((str=_zip_string_get(comment, &len, flags, &za->error)) == NULL)
+ return NULL;
+
+ if (lenp)
+ *lenp = (int)len;
+
+ return (const char *)str;
+}
diff --git a/src/Common/libzip/zip_get_archive_flag.c b/src/Common/libzip/zip_get_archive_flag.c
new file mode 100644
index 0000000..bffe10c
--- /dev/null
+++ b/src/Common/libzip/zip_get_archive_flag.c
@@ -0,0 +1,46 @@
+/*
+ zip_get_archive_flag.c -- get archive global flag
+ Copyright (C) 2008-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_get_archive_flag(zip_t *za, zip_flags_t flag, zip_flags_t flags)
+{
+ unsigned int fl;
+
+ fl = (flags & ZIP_FL_UNCHANGED) ? za->flags : za->ch_flags;
+
+ return (fl & flag) ? 1 : 0;
+}
diff --git a/src/Common/libzip/zip_get_compression_implementation.c b/src/Common/libzip/zip_get_compression_implementation.c
new file mode 100644
index 0000000..c1120d3
--- /dev/null
+++ b/src/Common/libzip/zip_get_compression_implementation.c
@@ -0,0 +1,44 @@
+/*
+ zip_get_compression_implementation.c -- get compression implementation
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+zip_compression_implementation
+_zip_get_compression_implementation(zip_int32_t cm)
+{
+ if (cm == ZIP_CM_DEFLATE || ZIP_CM_IS_DEFAULT(cm))
+ return zip_source_deflate;
+ return NULL;
+}
diff --git a/src/Common/libzip/zip_get_encryption_implementation.c b/src/Common/libzip/zip_get_encryption_implementation.c
new file mode 100644
index 0000000..e2f833b
--- /dev/null
+++ b/src/Common/libzip/zip_get_encryption_implementation.c
@@ -0,0 +1,44 @@
+/*
+ zip_get_encryption_implementation.c -- get encryption implementation
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+zip_encryption_implementation
+_zip_get_encryption_implementation(zip_uint16_t em)
+{
+ if (em == ZIP_EM_TRAD_PKWARE)
+ return zip_source_pkware;
+ return NULL;
+}
diff --git a/src/Common/libzip/zip_get_file_comment.c b/src/Common/libzip/zip_get_file_comment.c
new file mode 100644
index 0000000..d5f50bf
--- /dev/null
+++ b/src/Common/libzip/zip_get_file_comment.c
@@ -0,0 +1,51 @@
+/*
+ zip_get_file_comment.c -- get file comment
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_get_file_comment(zip_t *za, zip_uint64_t idx, int *lenp, int flags)
+{
+ zip_uint32_t len;
+ const char *s;
+
+ if ((s=zip_file_get_comment(za, idx, &len, (zip_flags_t)flags)) != NULL) {
+ if (lenp)
+ *lenp = (int)len;
+ }
+
+ return s;
+}
diff --git a/src/Common/libzip/zip_get_name.c b/src/Common/libzip/zip_get_name.c
new file mode 100644
index 0000000..d29e636
--- /dev/null
+++ b/src/Common/libzip/zip_get_name.c
@@ -0,0 +1,60 @@
+/*
+ zip_get_name.c -- get filename for a file in zip file
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_get_name(zip_t *za, zip_uint64_t idx, zip_flags_t flags)
+{
+ return _zip_get_name(za, idx, flags, &za->error);
+}
+
+
+const char *
+_zip_get_name(zip_t *za, zip_uint64_t idx, zip_flags_t flags, zip_error_t *error)
+{
+ zip_dirent_t *de;
+ const zip_uint8_t *str;
+
+ if ((de=_zip_get_dirent(za, idx, flags, error)) == NULL)
+ return NULL;
+
+ if ((str=_zip_string_get(de->filename, NULL, flags, error)) == NULL)
+ return NULL;
+
+ return (const char *)str;
+}
diff --git a/src/Common/libzip/zip_get_num_entries.c b/src/Common/libzip/zip_get_num_entries.c
new file mode 100644
index 0000000..c8644a4
--- /dev/null
+++ b/src/Common/libzip/zip_get_num_entries.c
@@ -0,0 +1,53 @@
+/*
+ zip_get_num_entries.c -- get number of entries in archive
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_get_num_entries(zip_t *za, zip_flags_t flags)
+{
+ zip_uint64_t n;
+
+ if (za == NULL)
+ return -1;
+
+ if (flags & ZIP_FL_UNCHANGED) {
+ n = za->nentry;
+ while (n>0 && za->entry[n-1].orig == NULL)
+ --n;
+ return (zip_int64_t)n;
+ }
+ return (zip_int64_t)za->nentry;
+}
diff --git a/src/Common/libzip/zip_get_num_files.c b/src/Common/libzip/zip_get_num_files.c
new file mode 100644
index 0000000..cf96353
--- /dev/null
+++ b/src/Common/libzip/zip_get_num_files.c
@@ -0,0 +1,52 @@
+/*
+ zip_get_num_files.c -- get number of files in archive
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+#include <limits.h>
+
+
+ZIP_EXTERN int
+zip_get_num_files(zip_t *za)
+{
+ if (za == NULL)
+ return -1;
+
+ if (za->nentry > INT_MAX) {
+ zip_error_set(&za->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+
+ return (int)za->nentry;
+}
diff --git a/src/Common/libzip/zip_hash.c b/src/Common/libzip/zip_hash.c
new file mode 100644
index 0000000..23f9708
--- /dev/null
+++ b/src/Common/libzip/zip_hash.c
@@ -0,0 +1,267 @@
+/*
+ zip_hash.c -- hash table string -> uint64
+ Copyright (C) 2015-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "zipint.h"
+
+struct zip_hash_entry {
+ const zip_uint8_t *name;
+ zip_int64_t orig_index;
+ zip_int64_t current_index;
+ struct zip_hash_entry *next;
+};
+typedef struct zip_hash_entry zip_hash_entry_t;
+
+struct zip_hash {
+ zip_uint16_t table_size;
+ zip_hash_entry_t **table;
+};
+
+zip_hash_t *
+_zip_hash_new(zip_uint16_t table_size, zip_error_t *error)
+{
+ zip_hash_t *hash;
+
+ if (table_size == 0) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ return NULL;
+ }
+
+ if ((hash=(zip_hash_t *)malloc(sizeof(zip_hash_t))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+ hash->table_size = table_size;
+ if ((hash->table=(zip_hash_entry_t**)calloc(table_size, sizeof(zip_hash_entry_t *))) == NULL) {
+ free(hash);
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ return hash;
+}
+
+static void
+_free_list(zip_hash_entry_t *entry)
+{
+ zip_hash_entry_t *next;
+ do {
+ next = entry->next;
+ free(entry);
+ entry = next;
+ } while (entry != NULL);
+}
+
+void
+_zip_hash_free(zip_hash_t *hash)
+{
+ zip_uint16_t i;
+
+ if (hash == NULL) {
+ return;
+ }
+
+ for (i=0; i<hash->table_size; i++) {
+ if (hash->table[i] != NULL) {
+ _free_list(hash->table[i]);
+ }
+ }
+ free(hash->table);
+ free(hash);
+}
+
+static zip_uint16_t
+_hash_string(const zip_uint8_t *name, zip_uint16_t size)
+{
+#define HASH_MULTIPLIER 33
+ zip_uint16_t value = 5381;
+
+ if (name == NULL)
+ return 0;
+
+ while (*name != 0) {
+ value = (zip_uint16_t)(((value * HASH_MULTIPLIER) + (zip_uint8_t)*name) % size);
+ name++;
+ }
+
+ return value;
+}
+
+/* insert into hash, return error on existence or memory issues */
+bool
+_zip_hash_add(zip_hash_t *hash, const zip_uint8_t *name, zip_uint64_t index, zip_flags_t flags, zip_error_t *error)
+{
+ zip_uint16_t hash_value;
+ zip_hash_entry_t *entry;
+
+ if (hash == NULL || name == NULL || index > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return false;
+ }
+
+ hash_value = _hash_string(name, hash->table_size);
+ for (entry = hash->table[hash_value]; entry != NULL; entry = entry->next) {
+ if (strcmp((const char *)name, (const char *)entry->name) == 0) {
+ if (((flags & ZIP_FL_UNCHANGED) && entry->orig_index != -1) || entry->current_index != -1) {
+ zip_error_set(error, ZIP_ER_EXISTS, 0);
+ return false;
+ }
+ else {
+ break;
+ }
+ }
+ }
+
+ if (entry == NULL) {
+ if ((entry=(zip_hash_entry_t *)malloc(sizeof(zip_hash_entry_t))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return false;
+ }
+ entry->name = name;
+ entry->next = hash->table[hash_value];
+ hash->table[hash_value] = entry;
+ entry->orig_index = -1;
+ }
+
+ if (flags & ZIP_FL_UNCHANGED) {
+ entry->orig_index = (zip_int64_t)index;
+ }
+ entry->current_index = (zip_int64_t)index;
+
+ return true;
+}
+
+/* remove entry from hash, error if not found */
+bool
+_zip_hash_delete(zip_hash_t *hash, const zip_uint8_t *name, zip_error_t *error)
+{
+ zip_uint16_t hash_value;
+ zip_hash_entry_t *entry, *previous;
+
+ if (hash == NULL || name == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return false;
+ }
+
+ hash_value = _hash_string(name, hash->table_size);
+ previous = NULL;
+ entry = hash->table[hash_value];
+ while (entry) {
+ if (strcmp((const char *)name, (const char *)entry->name) == 0) {
+ if (entry->orig_index == -1) {
+ if (previous) {
+ previous->next = entry->next;
+ }
+ else {
+ hash->table[hash_value] = entry->next;
+ }
+ free(entry);
+ }
+ else {
+ entry->current_index = -1;
+ }
+ return true;
+ }
+ previous = entry;
+ entry = entry->next;
+ };
+
+ zip_error_set(error, ZIP_ER_NOENT, 0);
+ return false;
+}
+
+/* find value for entry in hash, -1 if not found */
+zip_int64_t
+_zip_hash_lookup(zip_hash_t *hash, const zip_uint8_t *name, zip_flags_t flags, zip_error_t *error)
+{
+ zip_uint16_t hash_value;
+ zip_hash_entry_t *entry;
+
+ if (hash == NULL || name == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ hash_value = _hash_string(name, hash->table_size);
+ for (entry = hash->table[hash_value]; entry != NULL; entry = entry->next) {
+ if (strcmp((const char *)name, (const char *)entry->name) == 0) {
+ if (flags & ZIP_FL_UNCHANGED) {
+ if (entry->orig_index != -1) {
+ return entry->orig_index;
+ }
+ }
+ else {
+ if (entry->current_index != -1) {
+ return entry->current_index;
+ }
+ }
+ break;
+ }
+ }
+
+ zip_error_set(error, ZIP_ER_NOENT, 0);
+ return -1;
+}
+
+void
+_zip_hash_revert(zip_hash_t *hash)
+{
+ zip_uint16_t i;
+ zip_hash_entry_t *entry, *previous;
+
+ for (i = 0; i < hash->table_size; i++) {
+ previous = NULL;
+ entry = hash->table[i];
+ while (entry) {
+ if (entry->orig_index == -1) {
+ zip_hash_entry_t *p;
+ if (previous) {
+ previous->next = entry->next;
+ }
+ else {
+ hash->table[i] = entry->next;
+ }
+ p = entry;
+ entry = entry->next;
+ /* previous does not change */
+ free(p);
+ }
+ else {
+ entry->current_index = entry->orig_index;
+ previous = entry;
+ entry = entry->next;
+ }
+ }
+ }
+}
diff --git a/src/Common/libzip/zip_io_util.c b/src/Common/libzip/zip_io_util.c
new file mode 100644
index 0000000..b16927d
--- /dev/null
+++ b/src/Common/libzip/zip_io_util.c
@@ -0,0 +1,138 @@
+/*
+ zip_io_util.c -- I/O helper functions
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+int
+_zip_read(zip_source_t *src, zip_uint8_t *b, zip_uint64_t length, zip_error_t *error)
+{
+ zip_int64_t n;
+
+ if (length > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+
+ if ((n = zip_source_read(src, b, length)) < 0) {
+ _zip_error_set_from_source(error, src);
+ return -1;
+ }
+
+ if (n < (zip_int64_t)length) {
+ zip_error_set(error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+zip_uint8_t *
+_zip_read_data(zip_buffer_t *buffer, zip_source_t *src, size_t length, bool nulp, zip_error_t *error)
+{
+ zip_uint8_t *r;
+
+ if (length == 0 && !nulp) {
+ return NULL;
+ }
+
+ r = (zip_uint8_t *)malloc(length + (nulp ? 1 : 0));
+ if (!r) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if (buffer) {
+ zip_uint8_t *data = _zip_buffer_get(buffer, length);
+
+ if (data == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ free(r);
+ return NULL;
+ }
+ memcpy(r, data, length);
+ }
+ else {
+ if (_zip_read(src, r, length, error) < 0) {
+ free(r);
+ return NULL;
+ }
+ }
+
+ if (nulp) {
+ zip_uint8_t *o;
+ /* replace any in-string NUL characters with spaces */
+ r[length] = 0;
+ for (o=r; o<r+length; o++)
+ if (*o == '\0')
+ *o = ' ';
+ }
+
+ return r;
+}
+
+
+zip_string_t *
+_zip_read_string(zip_buffer_t *buffer, zip_source_t *src, zip_uint16_t len, bool nulp, zip_error_t *error)
+{
+ zip_uint8_t *raw;
+ zip_string_t *s;
+
+ if ((raw=_zip_read_data(buffer, src, len, nulp, error)) == NULL)
+ return NULL;
+
+ s = _zip_string_new(raw, len, ZIP_FL_ENC_GUESS, error);
+ free(raw);
+ return s;
+}
+
+
+int
+_zip_write(zip_t *za, const void *data, zip_uint64_t length)
+{
+ zip_int64_t n;
+
+ if ((n = zip_source_write(za->src, data, length)) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return -1;
+ }
+ if ((zip_uint64_t)n != length) {
+ zip_error_set(&za->error, ZIP_ER_WRITE, EINTR);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_memdup.c b/src/Common/libzip/zip_memdup.c
new file mode 100644
index 0000000..cc6d767
--- /dev/null
+++ b/src/Common/libzip/zip_memdup.c
@@ -0,0 +1,57 @@
+/*
+ zip_memdup.c -- internal zip function, "strdup" with len
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+void *
+_zip_memdup(const void *mem, size_t len, zip_error_t *error)
+{
+ void *ret;
+
+ if (len == 0)
+ return NULL;
+
+ ret = malloc(len);
+ if (!ret) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ memcpy(ret, mem, len);
+
+ return ret;
+}
diff --git a/src/Common/libzip/zip_name_locate.c b/src/Common/libzip/zip_name_locate.c
new file mode 100644
index 0000000..50ca40b
--- /dev/null
+++ b/src/Common/libzip/zip_name_locate.c
@@ -0,0 +1,94 @@
+/*
+ zip_name_locate.c -- get index by name
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <string.h>
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_name_locate(zip_t *za, const char *fname, zip_flags_t flags)
+{
+ return _zip_name_locate(za, fname, flags, &za->error);
+}
+
+
+zip_int64_t
+_zip_name_locate(zip_t *za, const char *fname, zip_flags_t flags, zip_error_t *error)
+{
+ int (*cmp)(const char *, const char *);
+ const char *fn, *p;
+ zip_uint64_t i;
+
+ if (za == NULL)
+ return -1;
+
+ if (fname == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (flags & (ZIP_FL_NOCASE|ZIP_FL_NODIR|ZIP_FL_ENC_CP437)) {
+ /* can't use hash table */
+ cmp = (flags & ZIP_FL_NOCASE) ? strcasecmp : strcmp;
+
+ for (i=0; i<za->nentry; i++) {
+ fn = _zip_get_name(za, i, flags, error);
+
+ /* newly added (partially filled) entry or error */
+ if (fn == NULL)
+ continue;
+
+ if (flags & ZIP_FL_NODIR) {
+ p = strrchr(fn, '/');
+ if (p)
+ fn = p+1;
+ }
+
+ if (cmp(fname, fn) == 0) {
+ _zip_error_clear(error);
+ return (zip_int64_t)i;
+ }
+ }
+
+ zip_error_set(error, ZIP_ER_NOENT, 0);
+ return -1;
+ }
+ else {
+ return _zip_hash_lookup(za->names, (const zip_uint8_t *)fname, flags, error);
+ }
+}
diff --git a/src/Common/libzip/zip_new.c b/src/Common/libzip/zip_new.c
new file mode 100644
index 0000000..562dd76
--- /dev/null
+++ b/src/Common/libzip/zip_new.c
@@ -0,0 +1,74 @@
+/*
+ zip_new.c -- create and init struct zip
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+/* _zip_new:
+ creates a new zipfile struct, and sets the contents to zero; returns
+ the new struct. */
+
+zip_t *
+_zip_new(zip_error_t *error)
+{
+ zip_t *za;
+
+ za = (zip_t *)malloc(sizeof(struct zip));
+ if (!za) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if ((za->names = _zip_hash_new(ZIP_HASH_TABLE_SIZE, error)) == NULL) {
+ free(za);
+ return NULL;
+ }
+
+ za->src = NULL;
+ za->open_flags = 0;
+ zip_error_init(&za->error);
+ za->flags = za->ch_flags = 0;
+ za->default_password = NULL;
+ za->comment_orig = za->comment_changes = NULL;
+ za->comment_changed = 0;
+ za->nentry = za->nentry_alloc = 0;
+ za->entry = NULL;
+ za->nopen_source = za->nopen_source_alloc = 0;
+ za->open_source = NULL;
+ za->tempdir = NULL;
+
+ return za;
+}
diff --git a/src/Common/libzip/zip_open.c b/src/Common/libzip/zip_open.c
new file mode 100644
index 0000000..d6209ee
--- /dev/null
+++ b/src/Common/libzip/zip_open.c
@@ -0,0 +1,853 @@
+/*
+ zip_open.c -- open zip archive by name
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <sys/stat.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+typedef enum {
+ EXISTS_ERROR = -1,
+ EXISTS_NOT = 0,
+ EXISTS_EMPTY,
+ EXISTS_NONEMPTY,
+} exists_t;
+static zip_t *_zip_allocate_new(zip_source_t *src, unsigned int flags, zip_error_t *error);
+static zip_int64_t _zip_checkcons(zip_t *za, zip_cdir_t *cdir, zip_error_t *error);
+static zip_cdir_t *_zip_find_central_dir(zip_t *za, zip_uint64_t len);
+static exists_t _zip_file_exists(zip_source_t *src, zip_error_t *error);
+static int _zip_headercomp(const zip_dirent_t *, const zip_dirent_t *);
+static unsigned char *_zip_memmem(const unsigned char *, size_t, const unsigned char *, size_t);
+static zip_cdir_t *_zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_error_t *error);
+static zip_cdir_t *_zip_read_eocd(zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags, zip_error_t *error);
+static zip_cdir_t *_zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags, zip_error_t *error);
+
+
+ZIP_EXTERN zip_t *
+zip_open(const char *fn, int _flags, int *zep)
+{
+ zip_t *za;
+ zip_source_t *src;
+ struct zip_error error;
+
+ zip_error_init(&error);
+ if ((src = zip_source_file_create(fn, 0, -1, &error)) == NULL) {
+ _zip_set_open_error(zep, &error, 0);
+ zip_error_fini(&error);
+ return NULL;
+ }
+
+ if ((za = zip_open_from_source(src, _flags, &error)) == NULL) {
+ zip_source_free(src);
+ _zip_set_open_error(zep, &error, 0);
+ zip_error_fini(&error);
+ return NULL;
+ }
+
+ zip_error_fini(&error);
+ return za;
+}
+
+
+ZIP_EXTERN zip_t *
+zip_open_from_source(zip_source_t *src, int _flags, zip_error_t *error)
+{
+ static zip_int64_t needed_support_read = -1;
+ static zip_int64_t needed_support_write = -1;
+
+ unsigned int flags;
+ zip_int64_t supported;
+ exists_t exists;
+
+ if (_flags < 0 || src == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+ flags = (unsigned int)_flags;
+
+ supported = zip_source_supports(src);
+ if (needed_support_read == -1) {
+ needed_support_read = zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_SEEK, ZIP_SOURCE_TELL, ZIP_SOURCE_STAT, -1);
+ needed_support_write = zip_source_make_command_bitmap(ZIP_SOURCE_BEGIN_WRITE, ZIP_SOURCE_COMMIT_WRITE, ZIP_SOURCE_ROLLBACK_WRITE, ZIP_SOURCE_SEEK_WRITE, ZIP_SOURCE_TELL_WRITE, ZIP_SOURCE_REMOVE, -1);
+ }
+ if ((supported & needed_support_read) != needed_support_read) {
+ zip_error_set(error, ZIP_ER_OPNOTSUPP, 0);
+ return NULL;
+ }
+ if ((supported & needed_support_write) != needed_support_write) {
+ flags |= ZIP_RDONLY;
+ }
+
+ if ((flags & (ZIP_RDONLY|ZIP_TRUNCATE)) == (ZIP_RDONLY|ZIP_TRUNCATE)) {
+ zip_error_set(error, ZIP_ER_RDONLY, 0);
+ return NULL;
+ }
+
+ exists = _zip_file_exists(src, error);
+ switch (exists) {
+ case EXISTS_ERROR:
+ return NULL;
+
+ case EXISTS_NOT:
+ if ((flags & ZIP_CREATE) == 0) {
+ zip_error_set(error, ZIP_ER_NOENT, 0);
+ return NULL;
+ }
+ return _zip_allocate_new(src, flags, error);
+
+ default: {
+ zip_t *za;
+ if (flags & ZIP_EXCL) {
+ zip_error_set(error, ZIP_ER_EXISTS, 0);
+ return NULL;
+ }
+ if (zip_source_open(src) < 0) {
+ _zip_error_set_from_source(error, src);
+ return NULL;
+ }
+
+ if (flags & ZIP_TRUNCATE) {
+ za = _zip_allocate_new(src, flags, error);
+ }
+ else {
+ /* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL, just like open() */
+ za = _zip_open(src, flags, error);
+ }
+
+ if (za == NULL) {
+ zip_source_close(src);
+ return NULL;
+ }
+ return za;
+ }
+ }
+}
+
+ZIP_EXTERN int
+zip_archive_set_tempdir(zip_t *za, const char *tempdir)
+{
+ char *new_tempdir;
+
+ if (tempdir) {
+ if ((new_tempdir = strdup(tempdir)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, errno);
+ return -1;
+ }
+ }
+ else
+ new_tempdir = NULL;
+
+ free(za->tempdir);
+ za->tempdir = new_tempdir;
+
+ return 0;
+}
+
+zip_t *
+_zip_open(zip_source_t *src, unsigned int flags, zip_error_t *error)
+{
+ zip_t *za;
+ zip_cdir_t *cdir;
+ struct zip_stat st;
+ zip_uint64_t len, idx;
+
+ zip_stat_init(&st);
+ if (zip_source_stat(src, &st) < 0) {
+ _zip_error_set_from_source(error, src);
+ return NULL;
+ }
+ if ((st.valid & ZIP_STAT_SIZE) == 0) {
+ zip_error_set(error, ZIP_ER_SEEK, EOPNOTSUPP);
+ return NULL;
+ }
+ len = st.size;
+
+ /* treat empty files as empty archives */
+ if (len == 0) {
+ if ((za=_zip_allocate_new(src, flags, error)) == NULL) {
+ zip_source_free(src);
+ return NULL;
+ }
+
+ return za;
+ }
+
+ if ((za=_zip_allocate_new(src, flags, error)) == NULL) {
+ return NULL;
+ }
+
+ if ((cdir = _zip_find_central_dir(za, len)) == NULL) {
+ _zip_error_copy(error, &za->error);
+ /* keep src so discard does not get rid of it */
+ zip_source_keep(src);
+ zip_discard(za);
+ return NULL;
+ }
+
+ za->entry = cdir->entry;
+ za->nentry = cdir->nentry;
+ za->nentry_alloc = cdir->nentry_alloc;
+ za->comment_orig = cdir->comment;
+
+ free(cdir);
+
+ for (idx = 0; idx < za->nentry; idx++) {
+ const zip_uint8_t *name = _zip_string_get(za->entry[idx].orig->filename, NULL, 0, error);
+ if (name == NULL) {
+ /* keep src so discard does not get rid of it */
+ zip_source_keep(src);
+ zip_discard(za);
+ return NULL;
+ }
+
+ if (_zip_hash_add(za->names, name, idx, ZIP_FL_UNCHANGED, &za->error) == false) {
+ if (za->error.zip_err != ZIP_ER_EXISTS || (flags & ZIP_CHECKCONS)) {
+ _zip_error_copy(error, &za->error);
+ /* keep src so discard does not get rid of it */
+ zip_source_keep(src);
+ zip_discard(za);
+ return NULL;
+ }
+ }
+ }
+
+ za->ch_flags = za->flags;
+
+ return za;
+}
+
+
+void
+_zip_set_open_error(int *zep, const zip_error_t *err, int ze)
+{
+ if (err) {
+ ze = zip_error_code_zip(err);
+ if (zip_error_system_type(err) == ZIP_ET_SYS) {
+ errno = zip_error_code_system(err);
+ }
+ }
+
+ if (zep)
+ *zep = ze;
+}
+
+
+/* _zip_readcdir:
+ tries to find a valid end-of-central-directory at the beginning of
+ buf, and then the corresponding central directory entries.
+ Returns a struct zip_cdir which contains the central directory
+ entries, or NULL if unsuccessful. */
+
+static zip_cdir_t *
+_zip_read_cdir(zip_t *za, zip_buffer_t *buffer, zip_uint64_t buf_offset, zip_error_t *error)
+{
+ zip_cdir_t *cd;
+ zip_uint16_t comment_len;
+ zip_uint64_t i, left;
+ zip_uint64_t eocd_offset = _zip_buffer_offset(buffer);
+ zip_buffer_t *cd_buffer;
+
+ if (_zip_buffer_left(buffer) < EOCDLEN) {
+ /* not enough bytes left for comment */
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return NULL;
+ }
+
+ /* check for end-of-central-dir magic */
+ if (memcmp(_zip_buffer_get(buffer, 4), EOCD_MAGIC, 4) != 0) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return NULL;
+ }
+
+ if (eocd_offset >= EOCD64LOCLEN && memcmp(_zip_buffer_data(buffer) + eocd_offset - EOCD64LOCLEN, EOCD64LOC_MAGIC, 4) == 0) {
+ _zip_buffer_set_offset(buffer, eocd_offset - EOCD64LOCLEN);
+ cd = _zip_read_eocd64(za->src, buffer, buf_offset, za->flags, error);
+ }
+ else {
+ _zip_buffer_set_offset(buffer, eocd_offset);
+ cd = _zip_read_eocd(buffer, buf_offset, za->flags, error);
+ }
+
+ if (cd == NULL)
+ return NULL;
+
+ _zip_buffer_set_offset(buffer, eocd_offset + 20);
+ comment_len = _zip_buffer_get_16(buffer);
+
+ if (cd->offset + cd->size > buf_offset + eocd_offset) {
+ /* cdir spans past EOCD record */
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+
+ if (comment_len || (za->open_flags & ZIP_CHECKCONS)) {
+ zip_uint64_t tail_len;
+
+ _zip_buffer_set_offset(buffer, eocd_offset + EOCDLEN);
+ tail_len = _zip_buffer_left(buffer);
+
+ if (tail_len < comment_len || ((za->open_flags & ZIP_CHECKCONS) && tail_len != comment_len)) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+
+ if (comment_len) {
+ if ((cd->comment=_zip_string_new(_zip_buffer_get(buffer, comment_len), comment_len, ZIP_FL_ENC_GUESS, error)) == NULL) {
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ }
+ }
+
+ if (cd->offset >= buf_offset) {
+ zip_uint8_t *data;
+ /* if buffer already read in, use it */
+ _zip_buffer_set_offset(buffer, cd->offset - buf_offset);
+
+ if ((data = _zip_buffer_get(buffer, cd->size)) == NULL) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ if ((cd_buffer = _zip_buffer_new(data, cd->size)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ }
+ else {
+ cd_buffer = NULL;
+
+ if (zip_source_seek(za->src, (zip_int64_t)cd->offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(error, za->src);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+
+ /* possible consistency check: cd->offset = len-(cd->size+cd->comment_len+EOCDLEN) ? */
+ if (zip_source_tell(za->src) != (zip_int64_t)cd->offset) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ }
+
+ left = (zip_uint64_t)cd->size;
+ i=0;
+ while (i<cd->nentry && left > 0) {
+ zip_int64_t entry_size;
+ if ((cd->entry[i].orig=_zip_dirent_new()) == NULL || (entry_size = _zip_dirent_read(cd->entry[i].orig, za->src, cd_buffer, false, error)) < 0) {
+ _zip_cdir_free(cd);
+ _zip_buffer_free(cd_buffer);
+ return NULL;
+ }
+ i++;
+ left -= (zip_uint64_t)entry_size;
+ }
+
+ if (i != cd->nentry) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_buffer_free(cd_buffer);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+
+ if (za->open_flags & ZIP_CHECKCONS) {
+ bool ok;
+
+ if (cd_buffer) {
+ ok = _zip_buffer_eof(cd_buffer);
+ }
+ else {
+ zip_int64_t offset = zip_source_tell(za->src);
+
+ if (offset < 0) {
+ _zip_error_set_from_source(error, za->src);
+ _zip_buffer_free(cd_buffer);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ ok = ((zip_uint64_t)offset == cd->offset + cd->size);
+ }
+
+ if (!ok) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_buffer_free(cd_buffer);
+ _zip_cdir_free(cd);
+ return NULL;
+ }
+ }
+
+ _zip_buffer_free(cd_buffer);
+ return cd;
+}
+
+
+/* _zip_checkcons:
+ Checks the consistency of the central directory by comparing central
+ directory entries with local headers and checking for plausible
+ file and header offsets. Returns -1 if not plausible, else the
+ difference between the lowest and the highest fileposition reached */
+
+static zip_int64_t
+_zip_checkcons(zip_t *za, zip_cdir_t *cd, zip_error_t *error)
+{
+ zip_uint64_t i;
+ zip_uint64_t min, max, j;
+ struct zip_dirent temp;
+
+ _zip_dirent_init(&temp);
+ if (cd->nentry) {
+ max = cd->entry[0].orig->offset;
+ min = cd->entry[0].orig->offset;
+ }
+ else
+ min = max = 0;
+
+ for (i=0; i<cd->nentry; i++) {
+ if (cd->entry[i].orig->offset < min)
+ min = cd->entry[i].orig->offset;
+ if (min > (zip_uint64_t)cd->offset) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return -1;
+ }
+
+ j = cd->entry[i].orig->offset + cd->entry[i].orig->comp_size
+ + _zip_string_length(cd->entry[i].orig->filename) + LENTRYSIZE;
+ if (j > max)
+ max = j;
+ if (max > (zip_uint64_t)cd->offset) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return -1;
+ }
+
+ if (zip_source_seek(za->src, (zip_int64_t)cd->entry[i].orig->offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(error, za->src);
+ return -1;
+ }
+
+ if (_zip_dirent_read(&temp, za->src, NULL, true, error) == -1) {
+ _zip_dirent_finalize(&temp);
+ return -1;
+ }
+
+ if (_zip_headercomp(cd->entry[i].orig, &temp) != 0) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ _zip_dirent_finalize(&temp);
+ return -1;
+ }
+
+ cd->entry[i].orig->extra_fields = _zip_ef_merge(cd->entry[i].orig->extra_fields, temp.extra_fields);
+ cd->entry[i].orig->local_extra_fields_read = 1;
+ temp.extra_fields = NULL;
+
+ _zip_dirent_finalize(&temp);
+ }
+
+ return (max-min) < ZIP_INT64_MAX ? (zip_int64_t)(max-min) : ZIP_INT64_MAX;
+}
+
+
+/* _zip_headercomp:
+ compares a central directory entry and a local file header
+ Return 0 if they are consistent, -1 if not. */
+
+static int
+_zip_headercomp(const zip_dirent_t *central, const zip_dirent_t *local)
+{
+ if ((central->version_needed != local->version_needed)
+#if 0
+ /* some zip-files have different values in local
+ and global headers for the bitflags */
+ || (central->bitflags != local->bitflags)
+#endif
+ || (central->comp_method != local->comp_method)
+ || (central->last_mod != local->last_mod)
+ || !_zip_string_equal(central->filename, local->filename))
+ return -1;
+
+ if ((central->crc != local->crc) || (central->comp_size != local->comp_size)
+ || (central->uncomp_size != local->uncomp_size)) {
+ /* InfoZip stores valid values in local header even when data descriptor is used.
+ This is in violation of the appnote. */
+ if (((local->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0
+ || local->crc != 0 || local->comp_size != 0 || local->uncomp_size != 0))
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static zip_t *
+_zip_allocate_new(zip_source_t *src, unsigned int flags, zip_error_t *error)
+{
+ zip_t *za;
+
+ if ((za = _zip_new(error)) == NULL) {
+ return NULL;
+ }
+
+ za->src = src;
+ za->open_flags = flags;
+ if (flags & ZIP_RDONLY) {
+ za->flags |= ZIP_AFL_RDONLY;
+ za->ch_flags |= ZIP_AFL_RDONLY;
+ }
+ return za;
+}
+
+
+/*
+ * tests for file existence
+ */
+static exists_t
+_zip_file_exists(zip_source_t *src, zip_error_t *error)
+{
+ struct zip_stat st;
+
+ zip_stat_init(&st);
+ if (zip_source_stat(src, &st) != 0) {
+ zip_error_t *src_error = zip_source_error(src);
+ if (zip_error_code_zip(src_error) == ZIP_ER_READ && zip_error_code_system(src_error) == ENOENT) {
+ return EXISTS_NOT;
+ }
+ _zip_error_copy(error, src_error);
+ return EXISTS_ERROR;
+ }
+
+ return (st.valid & ZIP_STAT_SIZE) && st.size == 0 ? EXISTS_EMPTY : EXISTS_NONEMPTY;
+}
+
+
+static zip_cdir_t *
+_zip_find_central_dir(zip_t *za, zip_uint64_t len)
+{
+ zip_cdir_t *cdir, *cdirnew;
+ zip_uint8_t *match;
+ zip_int64_t buf_offset;
+ zip_uint64_t buflen;
+ zip_int64_t a;
+ zip_int64_t best;
+ zip_error_t error;
+ zip_buffer_t *buffer;
+
+ if (len < EOCDLEN) {
+ zip_error_set(&za->error, ZIP_ER_NOZIP, 0);
+ return NULL;
+ }
+
+ buflen = (len < CDBUFSIZE ? len : CDBUFSIZE);
+ if (zip_source_seek(za->src, -(zip_int64_t)buflen, SEEK_END) < 0) {
+ zip_error_t *src_error = zip_source_error(za->src);
+ if (zip_error_code_zip(src_error) != ZIP_ER_SEEK || zip_error_code_system(src_error) != EFBIG) {
+ /* seek before start of file on my machine */
+ _zip_error_copy(&za->error, src_error);
+ return NULL;
+ }
+ }
+ if ((buf_offset = zip_source_tell(za->src)) < 0) {
+ _zip_error_set_from_source(&za->error, za->src);
+ return NULL;
+ }
+
+ if ((buffer = _zip_buffer_new_from_source(za->src, buflen, NULL, &za->error)) == NULL) {
+ return NULL;
+ }
+
+ best = -1;
+ cdir = NULL;
+ if (buflen >= CDBUFSIZE) {
+ /* EOCD64 locator is before EOCD, so leave place for it */
+ _zip_buffer_set_offset(buffer, EOCD64LOCLEN);
+ }
+ zip_error_set(&error, ZIP_ER_NOZIP, 0);
+
+ match = _zip_buffer_get(buffer, 0);
+ while ((match=_zip_memmem(match, _zip_buffer_left(buffer)-(EOCDLEN-4), (const unsigned char *)EOCD_MAGIC, 4)) != NULL) {
+ _zip_buffer_set_offset(buffer, (zip_uint64_t)(match - _zip_buffer_data(buffer)));
+ if ((cdirnew = _zip_read_cdir(za, buffer, (zip_uint64_t)buf_offset, &error)) != NULL) {
+ if (cdir) {
+ if (best <= 0) {
+ best = _zip_checkcons(za, cdir, &error);
+ }
+
+ a = _zip_checkcons(za, cdirnew, &error);
+ if (best < a) {
+ _zip_cdir_free(cdir);
+ cdir = cdirnew;
+ best = a;
+ }
+ else {
+ _zip_cdir_free(cdirnew);
+ }
+ }
+ else {
+ cdir = cdirnew;
+ if (za->open_flags & ZIP_CHECKCONS)
+ best = _zip_checkcons(za, cdir, &error);
+ else {
+ best = 0;
+ }
+ }
+ cdirnew = NULL;
+ }
+
+ match++;
+ _zip_buffer_set_offset(buffer, (zip_uint64_t)(match - _zip_buffer_data(buffer)));
+ }
+
+ _zip_buffer_free(buffer);
+
+ if (best < 0) {
+ _zip_error_copy(&za->error, &error);
+ _zip_cdir_free(cdir);
+ return NULL;
+ }
+
+ return cdir;
+}
+
+
+static unsigned char *
+_zip_memmem(const unsigned char *big, size_t biglen, const unsigned char *little, size_t littlelen)
+{
+ const unsigned char *p;
+
+ if ((biglen < littlelen) || (littlelen == 0))
+ return NULL;
+ p = big-1;
+ while ((p=(const unsigned char *)
+ memchr(p+1, little[0], (size_t)(big-(p+1))+(size_t)(biglen-littlelen)+1)) != NULL) {
+ if (memcmp(p+1, little+1, littlelen-1)==0)
+ return (unsigned char *)p;
+ }
+
+ return NULL;
+}
+
+
+static zip_cdir_t *
+_zip_read_eocd(zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags, zip_error_t *error)
+{
+ zip_cdir_t *cd;
+ zip_uint64_t i, nentry, size, offset, eocd_offset;
+
+ if (_zip_buffer_left(buffer) < EOCDLEN) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+
+ eocd_offset = _zip_buffer_offset(buffer);
+
+ _zip_buffer_get(buffer, 4); /* magic already verified */
+
+ if (_zip_buffer_get_32(buffer) != 0) {
+ zip_error_set(error, ZIP_ER_MULTIDISK, 0);
+ return NULL;
+ }
+
+ /* number of cdir-entries on this disk */
+ i = _zip_buffer_get_16(buffer);
+ /* number of cdir-entries */
+ nentry = _zip_buffer_get_16(buffer);
+
+ if (nentry != i) {
+ zip_error_set(error, ZIP_ER_NOZIP, 0);
+ return NULL;
+ }
+
+ size = _zip_buffer_get_32(buffer);
+ offset = _zip_buffer_get_32(buffer);
+
+ if (offset+size < offset) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return NULL;
+ }
+
+ if (offset+size > buf_offset + eocd_offset) {
+ /* cdir spans past EOCD record */
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+
+ if ((flags & ZIP_CHECKCONS) && offset+size != buf_offset + eocd_offset) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+
+ if ((cd=_zip_cdir_new(nentry, error)) == NULL)
+ return NULL;
+
+ cd->size = size;
+ cd->offset = offset;
+
+ return cd;
+}
+
+
+static zip_cdir_t *
+_zip_read_eocd64(zip_source_t *src, zip_buffer_t *buffer, zip_uint64_t buf_offset, unsigned int flags, zip_error_t *error)
+{
+ zip_cdir_t *cd;
+ zip_uint64_t offset;
+ zip_uint8_t eocd[EOCD64LEN];
+ zip_uint64_t eocd_offset;
+ zip_uint64_t size, nentry, i, eocdloc_offset;
+ bool free_buffer;
+ zip_uint32_t num_disks, num_disks64, eocd_disk, eocd_disk64;
+
+ eocdloc_offset = _zip_buffer_offset(buffer);
+
+ _zip_buffer_get(buffer, 4); /* magic already verified */
+
+ num_disks = _zip_buffer_get_16(buffer);
+ eocd_disk = _zip_buffer_get_16(buffer);
+ eocd_offset = _zip_buffer_get_64(buffer);
+
+ if (eocd_offset > ZIP_INT64_MAX || eocd_offset + EOCD64LEN < eocd_offset) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return NULL;
+ }
+
+ if (eocd_offset + EOCD64LEN > eocdloc_offset + buf_offset) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+
+ if (eocd_offset >= buf_offset && eocd_offset + EOCD64LEN <= buf_offset + _zip_buffer_size(buffer)) {
+ _zip_buffer_set_offset(buffer, eocd_offset - buf_offset);
+ free_buffer = false;
+ }
+ else {
+ if (zip_source_seek(src, (zip_int64_t)eocd_offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(error, src);
+ return NULL;
+ }
+ if ((buffer = _zip_buffer_new_from_source(src, EOCD64LEN, eocd, error)) == NULL) {
+ return NULL;
+ }
+ free_buffer = true;
+ }
+
+ if (memcmp(_zip_buffer_get(buffer, 4), EOCD64_MAGIC, 4) != 0) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ if (free_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return NULL;
+ }
+
+ size = _zip_buffer_get_64(buffer);
+
+ if ((flags & ZIP_CHECKCONS) && size + eocd_offset + 12 != buf_offset + eocdloc_offset) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ if (free_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return NULL;
+ }
+
+ _zip_buffer_get(buffer, 4); /* skip version made by/needed */
+
+ num_disks64 = _zip_buffer_get_32(buffer);
+ eocd_disk64 = _zip_buffer_get_32(buffer);
+
+ /* if eocd values are 0xffff, we have to use eocd64 values.
+ otherwise, if the values are not the same, it's inconsistent;
+ in any case, if the value is not 0, we don't support it */
+ if (num_disks == 0xffff) {
+ num_disks = num_disks64;
+ }
+ if (eocd_disk == 0xffff) {
+ eocd_disk = eocd_disk64;
+ }
+ if ((flags & ZIP_CHECKCONS) && (eocd_disk != eocd_disk64 || num_disks != num_disks64)) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+ if (num_disks != 0 || eocd_disk != 0) {
+ zip_error_set(error, ZIP_ER_MULTIDISK, 0);
+ return NULL;
+ }
+
+ nentry = _zip_buffer_get_64(buffer);
+ i = _zip_buffer_get_64(buffer);
+
+ if (nentry != i) {
+ zip_error_set(error, ZIP_ER_MULTIDISK, 0);
+ if (free_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return NULL;
+ }
+
+ size = _zip_buffer_get_64(buffer);
+ offset = _zip_buffer_get_64(buffer);
+
+ if (!_zip_buffer_ok(buffer)) {
+ zip_error_set(error, ZIP_ER_INTERNAL, 0);
+ if (free_buffer) {
+ _zip_buffer_free(buffer);
+ }
+ return NULL;
+ }
+
+ if (free_buffer) {
+ _zip_buffer_free(buffer);
+ }
+
+ if (offset > ZIP_INT64_MAX || offset+size < offset) {
+ zip_error_set(error, ZIP_ER_SEEK, EFBIG);
+ return NULL;
+ }
+ if ((flags & ZIP_CHECKCONS) && offset+size != eocd_offset) {
+ zip_error_set(error, ZIP_ER_INCONS, 0);
+ return NULL;
+ }
+
+ if ((cd=_zip_cdir_new(nentry, error)) == NULL)
+ return NULL;
+
+
+ cd->size = size;
+ cd->offset = offset;
+
+ return cd;
+}
diff --git a/src/Common/libzip/zip_rename.c b/src/Common/libzip/zip_rename.c
new file mode 100644
index 0000000..14e101d
--- /dev/null
+++ b/src/Common/libzip/zip_rename.c
@@ -0,0 +1,45 @@
+/*
+ zip_rename.c -- rename file in zip archive
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <string.h>
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_rename(zip_t *za, zip_uint64_t idx, const char *name)
+{
+ return zip_file_rename(za, idx, name, 0);
+}
diff --git a/src/Common/libzip/zip_replace.c b/src/Common/libzip/zip_replace.c
new file mode 100644
index 0000000..eed019a
--- /dev/null
+++ b/src/Common/libzip/zip_replace.c
@@ -0,0 +1,43 @@
+/*
+ zip_replace.c -- replace file via callback function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_replace(zip_t *za, zip_uint64_t idx, zip_source_t *source)
+{
+ return zip_file_replace(za, idx, source, 0);
+}
diff --git a/src/Common/libzip/zip_set_archive_comment.c b/src/Common/libzip/zip_set_archive_comment.c
new file mode 100644
index 0000000..9090eec
--- /dev/null
+++ b/src/Common/libzip/zip_set_archive_comment.c
@@ -0,0 +1,82 @@
+/*
+ zip_set_archive_comment.c -- set archive comment
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_set_archive_comment(zip_t *za, const char *comment, zip_uint16_t len)
+{
+ zip_string_t *cstr;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (len > 0 && comment == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (len > 0) {
+ if ((cstr=_zip_string_new((const zip_uint8_t *)comment, len, ZIP_FL_ENC_GUESS, &za->error)) == NULL)
+ return -1;
+
+ if (_zip_guess_encoding(cstr, ZIP_ENCODING_UNKNOWN) == ZIP_ENCODING_CP437) {
+ _zip_string_free(cstr);
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+ }
+ else
+ cstr = NULL;
+
+ _zip_string_free(za->comment_changes);
+ za->comment_changes = NULL;
+
+ if (((za->comment_orig && _zip_string_equal(za->comment_orig, cstr))
+ || (za->comment_orig == NULL && cstr == NULL))) {
+ _zip_string_free(cstr);
+ za->comment_changed = 0;
+ }
+ else {
+ za->comment_changes = cstr;
+ za->comment_changed = 1;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_set_archive_flag.c b/src/Common/libzip/zip_set_archive_flag.c
new file mode 100644
index 0000000..2625b2e
--- /dev/null
+++ b/src/Common/libzip/zip_set_archive_flag.c
@@ -0,0 +1,67 @@
+/*
+ zip_get_archive_flag.c -- set archive global flag
+ Copyright (C) 2008-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_set_archive_flag(zip_t *za, zip_flags_t flag, int value)
+{
+ unsigned int new_flags;
+
+ if (value)
+ new_flags = za->ch_flags | flag;
+ else
+ new_flags = za->ch_flags & ~flag;
+
+ if (new_flags == za->ch_flags)
+ return 0;
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if ((flag & ZIP_AFL_RDONLY) && value
+ && (za->ch_flags & ZIP_AFL_RDONLY) == 0) {
+ if (_zip_changed(za, NULL)) {
+ zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+ return -1;
+ }
+ }
+
+ za->ch_flags = new_flags;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_set_default_password.c b/src/Common/libzip/zip_set_default_password.c
new file mode 100644
index 0000000..10b4806
--- /dev/null
+++ b/src/Common/libzip/zip_set_default_password.c
@@ -0,0 +1,59 @@
+/*
+ zip_set_default_password.c -- set default password for decryption
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_set_default_password(zip_t *za, const char *passwd)
+{
+ if (za == NULL)
+ return -1;
+
+ free(za->default_password);
+
+ if (passwd) {
+ if ((za->default_password=strdup(passwd)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+ else
+ za->default_password = NULL;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_set_file_comment.c b/src/Common/libzip/zip_set_file_comment.c
new file mode 100644
index 0000000..d356693
--- /dev/null
+++ b/src/Common/libzip/zip_set_file_comment.c
@@ -0,0 +1,49 @@
+/*
+ zip_set_file_comment.c -- set comment for file in archive
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#define _ZIP_COMPILING_DEPRECATED
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_set_file_comment(zip_t *za, zip_uint64_t idx, const char *comment, int len)
+{
+ if (len < 0 || len > ZIP_UINT16_MAX) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+ return zip_file_set_comment(za, idx, comment, (zip_uint16_t)len, 0);
+}
diff --git a/src/Common/libzip/zip_set_file_compression.c b/src/Common/libzip/zip_set_file_compression.c
new file mode 100644
index 0000000..7bb0bf9
--- /dev/null
+++ b/src/Common/libzip/zip_set_file_compression.c
@@ -0,0 +1,87 @@
+/*
+ zip_set_file_compression.c -- set compression for file in archive
+ Copyright (C) 2012-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_set_file_compression(zip_t *za, zip_uint64_t idx, zip_int32_t method, zip_uint32_t flags)
+{
+ zip_entry_t *e;
+ zip_int32_t old_method;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (method != ZIP_CM_DEFAULT && method != ZIP_CM_STORE && method != ZIP_CM_DEFLATE) {
+ zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+ return -1;
+ }
+
+ e = za->entry+idx;
+
+ old_method = (e->orig == NULL ? ZIP_CM_DEFAULT : e->orig->comp_method);
+
+ /* TODO: revisit this when flags are supported, since they may require a recompression */
+
+ if (method == old_method) {
+ if (e->changes) {
+ e->changes->changed &= ~ZIP_DIRENT_COMP_METHOD;
+ if (e->changes->changed == 0) {
+ _zip_dirent_free(e->changes);
+ e->changes = NULL;
+ }
+ }
+ }
+ else {
+ if (e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ }
+
+ e->changes->comp_method = method;
+ e->changes->changed |= ZIP_DIRENT_COMP_METHOD;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_set_name.c b/src/Common/libzip/zip_set_name.c
new file mode 100644
index 0000000..2a46143
--- /dev/null
+++ b/src/Common/libzip/zip_set_name.c
@@ -0,0 +1,158 @@
+/*
+ zip_set_name.c -- rename helper function
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+int
+_zip_set_name(zip_t *za, zip_uint64_t idx, const char *name, zip_flags_t flags)
+{
+ zip_entry_t *e;
+ zip_string_t *str;
+ bool same_as_orig;
+ zip_int64_t i;
+ const zip_uint8_t *old_name, *new_name;
+ zip_string_t *old_str;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (ZIP_IS_RDONLY(za)) {
+ zip_error_set(&za->error, ZIP_ER_RDONLY, 0);
+ return -1;
+ }
+
+ if (name && name[0] != '\0') {
+ /* TODO: check for string too long */
+ if ((str=_zip_string_new((const zip_uint8_t *)name, (zip_uint16_t)strlen(name), flags, &za->error)) == NULL)
+ return -1;
+ if ((flags & ZIP_FL_ENCODING_ALL) == ZIP_FL_ENC_GUESS && _zip_guess_encoding(str, ZIP_ENCODING_UNKNOWN) == ZIP_ENCODING_UTF8_GUESSED)
+ str->encoding = ZIP_ENCODING_UTF8_KNOWN;
+ }
+ else
+ str = NULL;
+
+ /* TODO: encoding flags needed for CP437? */
+ if ((i=_zip_name_locate(za, name, 0, NULL)) >= 0 && (zip_uint64_t)i != idx) {
+ _zip_string_free(str);
+ zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+ return -1;
+ }
+
+ /* no effective name change */
+ if (i>=0 && (zip_uint64_t)i == idx) {
+ _zip_string_free(str);
+ return 0;
+ }
+
+ e = za->entry+idx;
+
+ if (e->orig)
+ same_as_orig = _zip_string_equal(e->orig->filename, str);
+ else
+ same_as_orig = false;
+
+ if (!same_as_orig && e->changes == NULL) {
+ if ((e->changes=_zip_dirent_clone(e->orig)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ _zip_string_free(str);
+ return -1;
+ }
+ }
+
+ if ((new_name = _zip_string_get(same_as_orig ? e->orig->filename : str, NULL, 0, &za->error)) == NULL) {
+ _zip_string_free(str);
+ return -1;
+ }
+
+ if (e->changes) {
+ old_str = e->changes->filename;
+ }
+ else if (e->orig) {
+ old_str = e->orig->filename;
+ }
+ else {
+ old_str = NULL;
+ }
+
+ if (old_str) {
+ if ((old_name = _zip_string_get(old_str, NULL, 0, &za->error)) == NULL) {
+ _zip_string_free(str);
+ return -1;
+ }
+ }
+ else {
+ old_name = NULL;
+ }
+
+ if (_zip_hash_add(za->names, new_name, idx, 0, &za->error) == false) {
+ _zip_string_free(str);
+ return -1;
+ }
+ if (old_name) {
+ _zip_hash_delete(za->names, old_name, NULL);
+ }
+
+ if (same_as_orig) {
+ if (e->changes) {
+ if (e->changes->changed & ZIP_DIRENT_FILENAME) {
+ _zip_string_free(e->changes->filename);
+ e->changes->changed &= ~ZIP_DIRENT_FILENAME;
+ if (e->changes->changed == 0) {
+ _zip_dirent_free(e->changes);
+ e->changes = NULL;
+ }
+ else {
+ /* TODO: what if not cloned? can that happen? */
+ e->changes->filename = e->orig->filename;
+ }
+ }
+ }
+ _zip_string_free(str);
+ }
+ else {
+ if (e->changes->changed & ZIP_DIRENT_FILENAME) {
+ _zip_string_free(e->changes->filename);
+ }
+ e->changes->changed |= ZIP_DIRENT_FILENAME;
+ e->changes->filename = str;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_begin_write.c b/src/Common/libzip/zip_source_begin_write.c
new file mode 100644
index 0000000..0459337
--- /dev/null
+++ b/src/Common/libzip/zip_source_begin_write.c
@@ -0,0 +1,53 @@
+/*
+ zip_source_begin_write.c -- start a new file for writing
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_begin_write(zip_source_t *src)
+{
+ if (ZIP_SOURCE_IS_OPEN_WRITING(src)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (_zip_source_call(src, NULL, 0, ZIP_SOURCE_BEGIN_WRITE) < 0) {
+ return -1;
+ }
+
+ src->write_state = ZIP_SOURCE_WRITE_OPEN;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_buffer.c b/src/Common/libzip/zip_source_buffer.c
new file mode 100644
index 0000000..f3f8ee0
--- /dev/null
+++ b/src/Common/libzip/zip_source_buffer.c
@@ -0,0 +1,435 @@
+/*
+ zip_source_buffer.c -- create zip data source from buffer
+ Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+#ifndef WRITE_FRAGMENT_SIZE
+#define WRITE_FRAGMENT_SIZE 64*1024
+#endif
+
+struct buffer {
+ zip_uint64_t fragment_size; /* size of each fragment */
+
+ zip_uint8_t **fragments; /* pointers to fragments */
+ zip_uint64_t nfragments; /* number of allocated fragments */
+ zip_uint64_t fragments_capacity; /* size of fragments (number of pointers) */
+ zip_uint64_t size; /* size of data in bytes */
+ zip_uint64_t offset; /* current offset */
+ int free_data;
+};
+
+typedef struct buffer buffer_t;
+
+struct read_data {
+ zip_error_t error;
+ time_t mtime;
+ buffer_t *in;
+ buffer_t *out;
+};
+
+static void buffer_free(buffer_t *buffer);
+static buffer_t *buffer_new(zip_uint64_t fragment_size);
+static buffer_t *buffer_new_read(const void *data, zip_uint64_t length, int free_data);
+static buffer_t *buffer_new_write(zip_uint64_t fragment_size);
+static zip_int64_t buffer_read(buffer_t *buffer, zip_uint8_t *data, zip_uint64_t length);
+static int buffer_seek(buffer_t *buffer, void *data, zip_uint64_t len, zip_error_t *error);
+static zip_int64_t buffer_write(buffer_t *buffer, const zip_uint8_t *data, zip_uint64_t length, zip_error_t *);
+
+static zip_int64_t read_data(void *, void *, zip_uint64_t, zip_source_cmd_t);
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_buffer(zip_t *za, const void *data, zip_uint64_t len, int freep)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_buffer_create(data, len, freep, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_buffer_create(const void *data, zip_uint64_t len, int freep, zip_error_t *error)
+{
+ struct read_data *ctx;
+ zip_source_t *zs;
+
+ if (data == NULL && len > 0) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct read_data *)malloc(sizeof(*ctx))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if ((ctx->in = buffer_new_read(data, len, freep)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ free(ctx);
+ return NULL;
+ }
+
+ ctx->out = NULL;
+ ctx->mtime = time(NULL);
+ zip_error_init(&ctx->error);
+
+ if ((zs=zip_source_function_create(read_data, ctx, error)) == NULL) {
+ buffer_free(ctx->in);
+ free(ctx);
+ return NULL;
+ }
+
+ return zs;
+}
+
+
+static zip_int64_t
+read_data(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct read_data *ctx = (struct read_data *)state;
+
+ switch (cmd) {
+ case ZIP_SOURCE_BEGIN_WRITE:
+ if ((ctx->out = buffer_new_write(WRITE_FRAGMENT_SIZE)) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ return 0;
+
+ case ZIP_SOURCE_CLOSE:
+ return 0;
+
+ case ZIP_SOURCE_COMMIT_WRITE:
+ buffer_free(ctx->in);
+ ctx->in = ctx->out;
+ ctx->out = NULL;
+ return 0;
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ buffer_free(ctx->in);
+ buffer_free(ctx->out);
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_OPEN:
+ ctx->in->offset = 0;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if (len > ZIP_INT64_MAX) {
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+ return buffer_read(ctx->in, data, len);
+
+ case ZIP_SOURCE_REMOVE:
+ {
+ buffer_t *empty = buffer_new_read(NULL, 0, 0);
+ if (empty == 0) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+
+ buffer_free(ctx->in);
+ ctx->in = empty;
+ return 0;
+ }
+
+ case ZIP_SOURCE_ROLLBACK_WRITE:
+ buffer_free(ctx->out);
+ ctx->out = NULL;
+ return 0;
+
+ case ZIP_SOURCE_SEEK:
+ return buffer_seek(ctx->in, data, len, &ctx->error);
+
+ case ZIP_SOURCE_SEEK_WRITE:
+ return buffer_seek(ctx->out, data, len, &ctx->error);
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ if (len < sizeof(*st)) {
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ st = (zip_stat_t *)data;
+
+ zip_stat_init(st);
+ st->mtime = ctx->mtime;
+ st->size = ctx->in->size;
+ st->comp_size = st->size;
+ st->comp_method = ZIP_CM_STORE;
+ st->encryption_method = ZIP_EM_NONE;
+ st->valid = ZIP_STAT_MTIME|ZIP_STAT_SIZE|ZIP_STAT_COMP_SIZE|ZIP_STAT_COMP_METHOD|ZIP_STAT_ENCRYPTION_METHOD;
+
+ return sizeof(*st);
+ }
+
+ case ZIP_SOURCE_SUPPORTS:
+ return zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_STAT, ZIP_SOURCE_ERROR, ZIP_SOURCE_FREE, ZIP_SOURCE_SEEK, ZIP_SOURCE_TELL, ZIP_SOURCE_BEGIN_WRITE, ZIP_SOURCE_COMMIT_WRITE, ZIP_SOURCE_REMOVE, ZIP_SOURCE_ROLLBACK_WRITE, ZIP_SOURCE_SEEK_WRITE, ZIP_SOURCE_TELL_WRITE, ZIP_SOURCE_WRITE, -1);
+
+ case ZIP_SOURCE_TELL:
+ if (ctx->in->offset > ZIP_INT64_MAX) {
+ zip_error_set(&ctx->error, ZIP_ER_TELL, EOVERFLOW);
+ return -1;
+ }
+ return (zip_int64_t)ctx->in->offset;
+
+
+ case ZIP_SOURCE_TELL_WRITE:
+ if (ctx->out->offset > ZIP_INT64_MAX) {
+ zip_error_set(&ctx->error, ZIP_ER_TELL, EOVERFLOW);
+ return -1;
+ }
+ return (zip_int64_t)ctx->out->offset;
+
+ case ZIP_SOURCE_WRITE:
+ if (len > ZIP_INT64_MAX) {
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+ return buffer_write(ctx->out, data, len, &ctx->error);
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
+
+
+static void
+buffer_free(buffer_t *buffer)
+{
+ if (buffer == NULL) {
+ return;
+ }
+
+ if (buffer->free_data) {
+ zip_uint64_t i;
+
+ for (i=0; i < buffer->nfragments; i++) {
+ free(buffer->fragments[i]);
+ }
+ }
+ free(buffer->fragments);
+ free(buffer);
+}
+
+
+static buffer_t *
+buffer_new(zip_uint64_t fragment_size)
+{
+ buffer_t *buffer;
+
+ if ((buffer = malloc(sizeof(*buffer))) == NULL) {
+ return NULL;
+ }
+
+ buffer->fragment_size = fragment_size;
+ buffer->offset = 0;
+ buffer->free_data = 0;
+ buffer->nfragments = 0;
+ buffer->fragments_capacity = 0;
+ buffer->fragments = NULL;
+ buffer->size = 0;
+
+ return buffer;
+}
+
+
+static buffer_t *
+buffer_new_read(const void *data, zip_uint64_t length, int free_data)
+{
+ buffer_t *buffer;
+
+ if ((buffer = buffer_new(length)) == NULL) {
+ return NULL;
+ }
+
+ buffer->size = length;
+
+ if (length > 0) {
+ if ((buffer->fragments = malloc(sizeof(*(buffer->fragments)))) == NULL) {
+ buffer_free(buffer);
+ return NULL;
+ }
+ buffer->fragments_capacity = 1;
+
+ buffer->nfragments = 1;
+ buffer->fragments[0] = (zip_uint8_t *)data;
+ buffer->free_data = free_data;
+ }
+
+ return buffer;
+}
+
+
+static buffer_t *
+buffer_new_write(zip_uint64_t fragment_size)
+{
+ buffer_t *buffer;
+
+ if ((buffer = buffer_new(fragment_size)) == NULL) {
+ return NULL;
+ }
+
+ if ((buffer->fragments = malloc(sizeof(*(buffer->fragments)))) == NULL) {
+ buffer_free(buffer);
+ return NULL;
+ }
+ buffer->fragments_capacity = 1;
+ buffer->nfragments = 0;
+ buffer->free_data = 1;
+
+ return buffer;
+}
+
+
+static zip_int64_t
+buffer_read(buffer_t *buffer, zip_uint8_t *data, zip_uint64_t length)
+{
+ zip_uint64_t n, i, fragment_offset;
+
+ length = ZIP_MIN(length, buffer->size - buffer->offset);
+
+ if (length == 0) {
+ return 0;
+ }
+ if (length > ZIP_INT64_MAX) {
+ return -1;
+ }
+
+ i = buffer->offset / buffer->fragment_size;
+ fragment_offset = buffer->offset % buffer->fragment_size;
+ n = 0;
+ while (n < length) {
+ zip_uint64_t left = ZIP_MIN(length - n, buffer->fragment_size - fragment_offset);
+
+ memcpy(data + n, buffer->fragments[i] + fragment_offset, left);
+
+ n += left;
+ i++;
+ fragment_offset = 0;
+ }
+
+ buffer->offset += n;
+ return (zip_int64_t)n;
+}
+
+
+static int
+buffer_seek(buffer_t *buffer, void *data, zip_uint64_t len, zip_error_t *error)
+{
+ zip_int64_t new_offset = zip_source_seek_compute_offset(buffer->offset, buffer->size, data, len, error);
+
+ if (new_offset < 0) {
+ return -1;
+ }
+
+ buffer->offset = (zip_uint64_t)new_offset;
+ return 0;
+}
+
+
+static zip_int64_t
+buffer_write(buffer_t *buffer, const zip_uint8_t *data, zip_uint64_t length, zip_error_t *error)
+{
+ zip_uint64_t n, i, fragment_offset;
+ zip_uint8_t **fragments;
+
+ if (buffer->offset + length + buffer->fragment_size - 1 < length) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ /* grow buffer if needed */
+ if (buffer->offset + length > buffer->nfragments * buffer->fragment_size) {
+ zip_uint64_t needed_fragments = (buffer->offset + length + buffer->fragment_size - 1) / buffer->fragment_size;
+
+ if (needed_fragments > buffer->fragments_capacity) {
+ zip_uint64_t new_capacity = buffer->fragments_capacity;
+
+ while (new_capacity < needed_fragments) {
+ new_capacity *= 2;
+ }
+
+ fragments = realloc(buffer->fragments, new_capacity * sizeof(*fragments));
+
+ if (fragments == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+
+ buffer->fragments = fragments;
+ buffer->fragments_capacity = new_capacity;
+ }
+
+ while (buffer->nfragments < needed_fragments) {
+ if ((buffer->fragments[buffer->nfragments] = malloc(buffer->fragment_size)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ buffer->nfragments++;
+ }
+ }
+
+ i = buffer->offset / buffer->fragment_size;
+ fragment_offset = buffer->offset % buffer->fragment_size;
+ n = 0;
+ while (n < length) {
+ zip_uint64_t left = ZIP_MIN(length - n, buffer->fragment_size - fragment_offset);
+
+ memcpy(buffer->fragments[i] + fragment_offset, data + n, left);
+
+ n += left;
+ i++;
+ fragment_offset = 0;
+ }
+
+ buffer->offset += n;
+ if (buffer->offset > buffer->size) {
+ buffer->size = buffer->offset;
+ }
+
+ return (zip_int64_t)n;
+}
diff --git a/src/Common/libzip/zip_source_call.c b/src/Common/libzip/zip_source_call.c
new file mode 100644
index 0000000..21f28bc
--- /dev/null
+++ b/src/Common/libzip/zip_source_call.c
@@ -0,0 +1,69 @@
+/*
+ zip_source_call.c -- invoke callback command on zip_source
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "zipint.h"
+
+
+zip_int64_t
+_zip_source_call(zip_source_t *src, void *data, zip_uint64_t length, zip_source_cmd_t command)
+{
+ zip_int64_t ret;
+
+ if ((src->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(command)) == 0) {
+ zip_error_set(&src->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+
+ if (src->src == NULL) {
+ ret = src->cb.f(src->ud, data, length, command);
+ }
+ else {
+ ret = src->cb.l(src->src, src->ud, data, length, command);
+ }
+
+ if (ret < 0) {
+ if (command != ZIP_SOURCE_ERROR && command != ZIP_SOURCE_SUPPORTS) {
+ int e[2];
+
+ if (_zip_source_call(src, e, sizeof(e), ZIP_SOURCE_ERROR) < 0) {
+ zip_error_set(&src->error, ZIP_ER_INTERNAL, 0);
+ }
+ else {
+ zip_error_set(&src->error, e[0], e[1]);
+ }
+ }
+ }
+
+ return ret;
+}
diff --git a/src/Common/libzip/zip_source_close.c b/src/Common/libzip/zip_source_close.c
new file mode 100644
index 0000000..36bc842
--- /dev/null
+++ b/src/Common/libzip/zip_source_close.c
@@ -0,0 +1,58 @@
+/*
+ zip_source_close.c -- close zip_source (stop reading)
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+int
+zip_source_close(zip_source_t *src)
+{
+ if (!ZIP_SOURCE_IS_OPEN_READING(src)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ src->open_count--;
+ if (src->open_count == 0) {
+ _zip_source_call(src, NULL, 0, ZIP_SOURCE_CLOSE);
+
+ if (ZIP_SOURCE_IS_LAYERED(src)) {
+ if (zip_source_close(src->src) < 0) {
+ zip_error_set(&src->error, ZIP_ER_INTERNAL, 0);
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_commit_write.c b/src/Common/libzip/zip_source_commit_write.c
new file mode 100644
index 0000000..ba77abc
--- /dev/null
+++ b/src/Common/libzip/zip_source_commit_write.c
@@ -0,0 +1,64 @@
+/*
+ zip_source_commit_write.c -- commit changes to file
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_commit_write(zip_source_t *src)
+{
+ if (!ZIP_SOURCE_IS_OPEN_WRITING(src)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (src->open_count > 1) {
+ zip_error_set(&src->error, ZIP_ER_INUSE, 0);
+ return -1;
+ }
+ else if (ZIP_SOURCE_IS_OPEN_READING(src)) {
+ if (zip_source_close(src) < 0) {
+ return -1;
+ }
+ }
+
+ if (_zip_source_call(src, NULL, 0, ZIP_SOURCE_COMMIT_WRITE) < 0) {
+ src->write_state = ZIP_SOURCE_WRITE_FAILED;
+ return -1;
+ }
+
+ src->write_state = ZIP_SOURCE_WRITE_CLOSED;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_crc.c b/src/Common/libzip/zip_source_crc.c
new file mode 100644
index 0000000..01f526c
--- /dev/null
+++ b/src/Common/libzip/zip_source_crc.c
@@ -0,0 +1,202 @@
+/*
+ zip_source_crc.c -- pass-through source that calculates CRC32 and size
+ Copyright (C) 2009-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "zipint.h"
+
+struct crc_context {
+ int validate; /* whether to check CRC on EOF and return error on mismatch */
+ int crc_complete; /* whether CRC was computed for complete file */
+ zip_error_t error;
+ zip_uint64_t size;
+ zip_uint64_t position; /* current reading position */
+ zip_uint64_t crc_position; /* how far we've computed the CRC */
+ zip_uint32_t crc;
+};
+
+static zip_int64_t crc_read(zip_source_t *, void *, void *, zip_uint64_t, zip_source_cmd_t);
+
+
+zip_source_t *
+zip_source_crc(zip_t *za, zip_source_t *src, int validate)
+{
+ struct crc_context *ctx;
+
+ if (src == NULL) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct crc_context *)malloc(sizeof(*ctx))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ zip_error_init(&ctx->error);
+ ctx->validate = validate;
+ ctx->crc_complete = 0;
+ ctx->crc_position = 0;
+ ctx->crc = (zip_uint32_t)crc32(0, NULL, 0);
+ ctx->size = 0;
+
+ return zip_source_layered(za, src, crc_read, ctx);
+}
+
+
+static zip_int64_t
+crc_read(zip_source_t *src, void *_ctx, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct crc_context *ctx;
+ zip_int64_t n;
+
+ ctx = (struct crc_context *)_ctx;
+
+ switch (cmd) {
+ case ZIP_SOURCE_OPEN:
+ ctx->position = 0;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if ((n = zip_source_read(src, data, len)) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ if (n == 0) {
+ if (ctx->crc_position == ctx->position) {
+ ctx->crc_complete = 1;
+ ctx->size = ctx->position;
+
+ if (ctx->validate) {
+ struct zip_stat st;
+
+ if (zip_source_stat(src, &st) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ if ((st.valid & ZIP_STAT_CRC) && st.crc != ctx->crc) {
+ zip_error_set(&ctx->error, ZIP_ER_CRC, 0);
+ return -1;
+ }
+ if ((st.valid & ZIP_STAT_SIZE) && st.size != ctx->size) {
+ zip_error_set(&ctx->error, ZIP_ER_INCONS, 0);
+ return -1;
+ }
+ }
+ }
+ }
+ else if (!ctx->crc_complete && ctx->position <= ctx->crc_position) {
+ zip_uint64_t i, nn;
+
+ for (i = ctx->crc_position - ctx->position; i < (zip_uint64_t)n; i += nn) {
+ nn = ZIP_MIN(UINT_MAX, (zip_uint64_t)n-i);
+
+ ctx->crc = (zip_uint32_t)crc32(ctx->crc, (const Bytef *)data+i, (uInt)nn);
+ ctx->crc_position += nn;
+ }
+ }
+ ctx->position += (zip_uint64_t)n;
+ return n;
+
+ case ZIP_SOURCE_CLOSE:
+ return 0;
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ st = (zip_stat_t *)data;
+
+ if (ctx->crc_complete) {
+ /* TODO: Set comp_size, comp_method, encryption_method?
+ After all, this only works for uncompressed data. */
+ st->size = ctx->size;
+ st->crc = ctx->crc;
+ st->comp_size = ctx->size;
+ st->comp_method = ZIP_CM_STORE;
+ st->encryption_method = ZIP_EM_NONE;
+ st->valid |= ZIP_STAT_SIZE|ZIP_STAT_CRC|ZIP_STAT_COMP_SIZE|ZIP_STAT_COMP_METHOD|ZIP_STAT_ENCRYPTION_METHOD;;
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_SUPPORTS:
+ {
+ zip_int64_t mask = zip_source_supports(src);
+
+ if (mask < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ return mask & ~zip_source_make_command_bitmap(ZIP_SOURCE_BEGIN_WRITE, ZIP_SOURCE_COMMIT_WRITE, ZIP_SOURCE_ROLLBACK_WRITE, ZIP_SOURCE_SEEK_WRITE, ZIP_SOURCE_TELL_WRITE, ZIP_SOURCE_REMOVE, -1);
+ }
+
+ case ZIP_SOURCE_SEEK:
+ {
+ zip_int64_t new_position;
+ zip_source_args_seek_t *args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error);
+
+ if (args == NULL) {
+ return -1;
+ }
+ if (zip_source_seek(src, args->offset, args->whence) < 0 || (new_position = zip_source_tell(src)) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ ctx->position = (zip_uint64_t)new_position;
+
+ return 0;
+ }
+
+ case ZIP_SOURCE_TELL:
+ return (zip_int64_t)ctx->position;
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
diff --git a/src/Common/libzip/zip_source_deflate.c b/src/Common/libzip/zip_source_deflate.c
new file mode 100644
index 0000000..2574ad0
--- /dev/null
+++ b/src/Common/libzip/zip_source_deflate.c
@@ -0,0 +1,415 @@
+/*
+ zip_source_deflate.c -- deflate (de)compressoin routines
+ Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+#include "zipint.h"
+
+struct deflate {
+ zip_error_t error;
+
+ bool eof;
+ bool can_store;
+ bool is_stored;
+ int mem_level;
+ zip_uint64_t size;
+ zip_uint8_t buffer[BUFSIZE];
+ z_stream zstr;
+};
+
+static zip_int64_t compress_read(zip_source_t *, struct deflate *, void *, zip_uint64_t);
+static zip_int64_t decompress_read(zip_source_t *, struct deflate *, void *, zip_uint64_t);
+static zip_int64_t deflate_compress(zip_source_t *, void *, void *, zip_uint64_t, zip_source_cmd_t);
+static zip_int64_t deflate_decompress(zip_source_t *, void *, void *, zip_uint64_t, zip_source_cmd_t);
+static void deflate_free(struct deflate *);
+
+
+zip_source_t *
+zip_source_deflate(zip_t *za, zip_source_t *src, zip_int32_t cm, int flags)
+{
+ struct deflate *ctx;
+ zip_source_t *s2;
+
+ if (src == NULL || (cm != ZIP_CM_DEFLATE && !ZIP_CM_IS_DEFAULT(cm))) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct deflate *)malloc(sizeof(*ctx))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ zip_error_init(&ctx->error);
+ ctx->eof = false;
+ ctx->is_stored = false;
+ ctx->can_store = ZIP_CM_IS_DEFAULT(cm);
+ if (flags & ZIP_CODEC_ENCODE) {
+ ctx->mem_level = MAX_MEM_LEVEL;
+ }
+
+ if ((s2=zip_source_layered(za, src,
+ ((flags & ZIP_CODEC_ENCODE)
+ ? deflate_compress : deflate_decompress),
+ ctx)) == NULL) {
+ deflate_free(ctx);
+ return NULL;
+ }
+
+ return s2;
+}
+
+
+static zip_int64_t
+compress_read(zip_source_t *src, struct deflate *ctx, void *data, zip_uint64_t len)
+{
+ int end, ret;
+ zip_int64_t n;
+ zip_uint64_t out_offset;
+ uInt out_len;
+
+ if (zip_error_code_zip(&ctx->error) != ZIP_ER_OK)
+ return -1;
+
+ if (len == 0 || ctx->is_stored) {
+ return 0;
+ }
+
+ out_offset = 0;
+ out_len = (uInt)ZIP_MIN(UINT_MAX, len);
+ ctx->zstr.next_out = (Bytef *)data;
+ ctx->zstr.avail_out = out_len;
+
+ end = 0;
+ while (!end) {
+ ret = deflate(&ctx->zstr, ctx->eof ? Z_FINISH : 0);
+
+ switch (ret) {
+ case Z_STREAM_END:
+ if (ctx->can_store && ctx->zstr.total_in <= ctx->zstr.total_out) {
+ ctx->is_stored = true;
+ ctx->size = ctx->zstr.total_in;
+ memcpy(data, ctx->buffer, ctx->size);
+ return (zip_int64_t)ctx->size;
+ }
+ /* fallthrough */
+ case Z_OK:
+ /* all ok */
+
+ if (ctx->zstr.avail_out == 0) {
+ out_offset += out_len;
+ if (out_offset < len) {
+ out_len = (uInt)ZIP_MIN(UINT_MAX, len-out_offset);
+ ctx->zstr.next_out = (Bytef *)data+out_offset;
+ ctx->zstr.avail_out = out_len;
+ }
+ else {
+ ctx->can_store = false;
+ end = 1;
+ }
+ }
+ else if (ctx->eof && ctx->zstr.avail_in == 0)
+ end = 1;
+ break;
+
+ case Z_BUF_ERROR:
+ if (ctx->zstr.avail_in == 0) {
+ if (ctx->eof) {
+ end = 1;
+ break;
+ }
+
+ if ((n=zip_source_read(src, ctx->buffer, sizeof(ctx->buffer))) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ end = 1;
+ break;
+ }
+ else if (n == 0) {
+ ctx->eof = true;
+ /* TODO: check against stat of src? */
+ ctx->size = ctx->zstr.total_in;
+ }
+ else {
+ if (ctx->zstr.total_in > 0) {
+ /* we overwrote a previously filled ctx->buffer */
+ ctx->can_store = false;
+ }
+ ctx->zstr.next_in = (Bytef *)ctx->buffer;
+ ctx->zstr.avail_in = (uInt)n;
+ }
+ continue;
+ }
+ /* fallthrough */
+ case Z_NEED_DICT:
+ case Z_DATA_ERROR:
+ case Z_STREAM_ERROR:
+ case Z_MEM_ERROR:
+ zip_error_set(&ctx->error, ZIP_ER_ZLIB, ret);
+
+ end = 1;
+ break;
+ }
+ }
+
+ if (ctx->zstr.avail_out < len) {
+ ctx->can_store = false;
+ return (zip_int64_t)(len - ctx->zstr.avail_out);
+ }
+
+ return (zip_error_code_zip(&ctx->error) == ZIP_ER_OK) ? 0 : -1;
+}
+
+
+static zip_int64_t
+decompress_read(zip_source_t *src, struct deflate *ctx, void *data, zip_uint64_t len)
+{
+ int end, ret;
+ zip_int64_t n;
+ zip_uint64_t out_offset;
+ uInt out_len;
+
+ if (zip_error_code_zip(&ctx->error) != ZIP_ER_OK)
+ return -1;
+
+ if (len == 0)
+ return 0;
+
+ out_offset = 0;
+ out_len = (uInt)ZIP_MIN(UINT_MAX, len);
+ ctx->zstr.next_out = (Bytef *)data;
+ ctx->zstr.avail_out = out_len;
+
+ end = 0;
+ while (!end) {
+ ret = inflate(&ctx->zstr, Z_SYNC_FLUSH);
+
+ switch (ret) {
+ case Z_OK:
+ if (ctx->zstr.avail_out == 0) {
+ out_offset += out_len;
+ if (out_offset < len) {
+ out_len = (uInt)ZIP_MIN(UINT_MAX, len-out_offset);
+ ctx->zstr.next_out = (Bytef *)data+out_offset;
+ ctx->zstr.avail_out = out_len;
+ }
+ else {
+ end = 1;
+ }
+ }
+ break;
+
+ case Z_STREAM_END:
+ ctx->eof = 1;
+ end = 1;
+ break;
+
+ case Z_BUF_ERROR:
+ if (ctx->zstr.avail_in == 0) {
+ if (ctx->eof) {
+ end = 1;
+ break;
+ }
+
+ if ((n=zip_source_read(src, ctx->buffer, sizeof(ctx->buffer))) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ end = 1;
+ break;
+ }
+ else if (n == 0) {
+ ctx->eof = 1;
+ }
+ else {
+ ctx->zstr.next_in = (Bytef *)ctx->buffer;
+ ctx->zstr.avail_in = (uInt)n;
+ }
+ continue;
+ }
+ /* fallthrough */
+ case Z_NEED_DICT:
+ case Z_DATA_ERROR:
+ case Z_STREAM_ERROR:
+ case Z_MEM_ERROR:
+ zip_error_set(&ctx->error, ZIP_ER_ZLIB, ret);
+ end = 1;
+ break;
+ }
+ }
+
+ if (ctx->zstr.avail_out < len)
+ return (zip_int64_t)(len - ctx->zstr.avail_out);
+
+ return (zip_error_code_zip(&ctx->error) == ZIP_ER_OK) ? 0 : -1;
+}
+
+
+static zip_int64_t
+deflate_compress(zip_source_t *src, void *ud, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct deflate *ctx;
+ int ret;
+
+ ctx = (struct deflate *)ud;
+
+ switch (cmd) {
+ case ZIP_SOURCE_OPEN:
+ ctx->zstr.zalloc = Z_NULL;
+ ctx->zstr.zfree = Z_NULL;
+ ctx->zstr.opaque = NULL;
+ ctx->zstr.avail_in = 0;
+ ctx->zstr.next_in = NULL;
+ ctx->zstr.avail_out = 0;
+ ctx->zstr.next_out = NULL;
+
+ /* negative value to tell zlib not to write a header */
+ if ((ret=deflateInit2(&ctx->zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, ctx->mem_level, Z_DEFAULT_STRATEGY)) != Z_OK) {
+ zip_error_set(&ctx->error, ZIP_ER_ZLIB, ret);
+ return -1;
+ }
+
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ return compress_read(src, ctx, data, len);
+
+ case ZIP_SOURCE_CLOSE:
+ deflateEnd(&ctx->zstr);
+ return 0;
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ st = (zip_stat_t *)data;
+
+ st->comp_method = ctx->is_stored ? ZIP_CM_STORE : ZIP_CM_DEFLATE;
+ st->valid |= ZIP_STAT_COMP_METHOD;
+ if (ctx->eof) {
+ st->comp_size = ctx->size;
+ st->valid |= ZIP_STAT_COMP_SIZE;
+ }
+ else
+ st->valid &= ~ZIP_STAT_COMP_SIZE;
+ }
+ return 0;
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ deflate_free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_SUPPORTS:
+ return ZIP_SOURCE_SUPPORTS_READABLE;
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_INTERNAL, 0);
+ return -1;
+ }
+}
+
+
+static zip_int64_t
+deflate_decompress(zip_source_t *src, void *ud, void *data,
+ zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct deflate *ctx;
+ zip_int64_t n;
+ int ret;
+
+ ctx = (struct deflate *)ud;
+
+ switch (cmd) {
+ case ZIP_SOURCE_OPEN:
+ if ((n=zip_source_read(src, ctx->buffer, sizeof(ctx->buffer))) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ ctx->zstr.zalloc = Z_NULL;
+ ctx->zstr.zfree = Z_NULL;
+ ctx->zstr.opaque = NULL;
+ ctx->zstr.next_in = (Bytef *)ctx->buffer;
+ ctx->zstr.avail_in = (uInt)n;
+
+ /* negative value to tell zlib that there is no header */
+ if ((ret=inflateInit2(&ctx->zstr, -MAX_WBITS)) != Z_OK) {
+ zip_error_set(&ctx->error, ZIP_ER_ZLIB, ret);
+ return -1;
+ }
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ return decompress_read(src, ctx, data, len);
+
+ case ZIP_SOURCE_CLOSE:
+ inflateEnd(&ctx->zstr);
+ return 0;
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ st = (zip_stat_t *)data;
+
+ st->comp_method = ZIP_CM_STORE;
+ if (st->comp_size > 0 && st->size > 0)
+ st->comp_size = st->size;
+
+ return 0;
+ }
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_SUPPORTS:
+ return zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_STAT, ZIP_SOURCE_ERROR, ZIP_SOURCE_FREE, -1);
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
+
+
+static void
+deflate_free(struct deflate *ctx)
+{
+ free(ctx);
+}
diff --git a/src/Common/libzip/zip_source_error.c b/src/Common/libzip/zip_source_error.c
new file mode 100644
index 0000000..e09199b
--- /dev/null
+++ b/src/Common/libzip/zip_source_error.c
@@ -0,0 +1,42 @@
+/*
+ zip_source_error.c -- get last error from zip_source
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+zip_error_t *
+zip_source_error(zip_source_t *src)
+{
+ return &src->error;
+}
diff --git a/src/Common/libzip/zip_source_file.c b/src/Common/libzip/zip_source_file.c
new file mode 100644
index 0000000..8678c1a
--- /dev/null
+++ b/src/Common/libzip/zip_source_file.c
@@ -0,0 +1,63 @@
+/*
+ zip_source_file.c -- create data source from file
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+
+#include "zipint.h"
+
+#ifdef _WIN32
+#error This file is incompatible with Windows, use zip_source_win32utf8.c instead.
+#error Something probably went wrong with configure/cmake.
+#endif
+
+ZIP_EXTERN zip_source_t *
+zip_source_file(zip_t *za, const char *fname, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_file_create(fname, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_file_create(const char *fname, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ if (fname == NULL || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ return _zip_source_file_or_p(fname, NULL, start, length, NULL, error);
+}
diff --git a/src/Common/libzip/zip_source_filep.c b/src/Common/libzip/zip_source_filep.c
new file mode 100644
index 0000000..70255de
--- /dev/null
+++ b/src/Common/libzip/zip_source_filep.c
@@ -0,0 +1,503 @@
+/*
+ zip_source_filep.c -- create data source from FILE *
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef _WIN32
+/* WIN32 needs <fcntl.h> for _O_BINARY */
+#include <fcntl.h>
+#endif
+
+/* Windows sys/types.h does not provide these */
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+#if defined(S_IXUSR) && defined(S_IRWXG) && defined(S_IRWXO)
+#define _SAFE_MASK (S_IXUSR | S_IRWXG | S_IRWXO)
+#elif defined(_S_IWRITE)
+#define _SAFE_MASK (_S_IWRITE)
+#else
+#error do not know safe values for umask, please report this
+#endif
+
+#ifdef _MSC_VER
+/* MSVC doesn't have mode_t */
+typedef int mode_t;
+#endif
+
+struct read_file {
+ zip_error_t error; /* last error information */
+ zip_int64_t supports;
+
+ /* reading */
+ char *fname; /* name of file to read from */
+ FILE *f; /* file to read from */
+ struct zip_stat st; /* stat information passed in */
+ zip_uint64_t start; /* start offset of data to read */
+ zip_uint64_t end; /* end offset of data to read, 0 for up to EOF */
+ zip_uint64_t current; /* current offset */
+
+ /* writing */
+ char *tmpname;
+ FILE *fout;
+};
+
+static zip_int64_t read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd);
+static int create_temp_output(struct read_file *ctx);
+static int _zip_fseek_u(FILE *f, zip_uint64_t offset, int whence, zip_error_t *error);
+static int _zip_fseek(FILE *f, zip_int64_t offset, int whence, zip_error_t *error);
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_filep(zip_t *za, FILE *file, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_filep_create(file, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_filep_create(FILE *file, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ if (file == NULL || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ return _zip_source_file_or_p(NULL, file, start, length, NULL, error);
+}
+
+
+zip_source_t *
+_zip_source_file_or_p(const char *fname, FILE *file, zip_uint64_t start, zip_int64_t len, const zip_stat_t *st, zip_error_t *error)
+{
+ struct read_file *ctx;
+ zip_source_t *zs;
+
+ if (file == NULL && fname == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ ctx->fname = NULL;
+ if (fname) {
+ if ((ctx->fname=strdup(fname)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ free(ctx);
+ return NULL;
+ }
+ }
+ ctx->f = file;
+ ctx->start = start;
+ ctx->end = (len < 0 ? 0 : start+(zip_uint64_t)len);
+ if (st) {
+ memcpy(&ctx->st, st, sizeof(ctx->st));
+ ctx->st.name = NULL;
+ ctx->st.valid &= ~ZIP_STAT_NAME;
+ }
+ else {
+ zip_stat_init(&ctx->st);
+ }
+
+ ctx->tmpname = NULL;
+ ctx->fout = NULL;
+
+ zip_error_init(&ctx->error);
+
+ ctx->supports = ZIP_SOURCE_SUPPORTS_READABLE | zip_source_make_command_bitmap(ZIP_SOURCE_SUPPORTS, ZIP_SOURCE_TELL, -1);
+ if (ctx->fname) {
+ struct stat sb;
+
+ if (stat(ctx->fname, &sb) < 0 || S_ISREG(sb.st_mode)) {
+ ctx->supports = ZIP_SOURCE_SUPPORTS_WRITABLE;
+ }
+ }
+ else if (fseeko(ctx->f, 0, SEEK_CUR) == 0) {
+ ctx->supports = ZIP_SOURCE_SUPPORTS_SEEKABLE;
+ }
+
+ if ((zs=zip_source_function_create(read_file, ctx, error)) == NULL) {
+ free(ctx->fname);
+ free(ctx);
+ return NULL;
+ }
+
+ return zs;
+}
+
+
+static int
+create_temp_output(struct read_file *ctx)
+{
+ char *temp;
+ int tfd;
+ mode_t mask;
+ FILE *tfp;
+
+ if ((temp=(char *)malloc(strlen(ctx->fname)+8)) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ sprintf(temp, "%s.XXXXXX", ctx->fname);
+
+ mask = umask(_SAFE_MASK);
+ if ((tfd=mkstemp(temp)) == -1) {
+ zip_error_set(&ctx->error, ZIP_ER_TMPOPEN, errno);
+ umask(mask);
+ free(temp);
+ return -1;
+ }
+ umask(mask);
+
+ if ((tfp=fdopen(tfd, "r+b")) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_TMPOPEN, errno);
+ close(tfd);
+ (void)remove(temp);
+ free(temp);
+ return -1;
+ }
+
+#ifdef _WIN32
+ /*
+ According to Pierre Joye, Windows in some environments per
+ default creates text files, so force binary mode.
+ */
+ _setmode(_fileno(tfp), _O_BINARY );
+#endif
+
+ ctx->fout = tfp;
+ ctx->tmpname = temp;
+
+ return 0;
+}
+
+
+static zip_int64_t
+read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct read_file *ctx;
+ char *buf;
+ zip_uint64_t n;
+ size_t i;
+
+ ctx = (struct read_file *)state;
+ buf = (char *)data;
+
+ switch (cmd) {
+ case ZIP_SOURCE_BEGIN_WRITE:
+ if (ctx->fname == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+ return create_temp_output(ctx);
+
+ case ZIP_SOURCE_COMMIT_WRITE: {
+ mode_t mask;
+
+ if (fclose(ctx->fout) < 0) {
+ ctx->fout = NULL;
+ zip_error_set(&ctx->error, ZIP_ER_WRITE, errno);
+ }
+ ctx->fout = NULL;
+ if (rename(ctx->tmpname, ctx->fname) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_RENAME, errno);
+ return -1;
+ }
+ mask = umask(022);
+ umask(mask);
+ /* not much we can do if chmod fails except make the whole commit fail */
+ (void)chmod(ctx->fname, 0666&~mask);
+ free(ctx->tmpname);
+ ctx->tmpname = NULL;
+ return 0;
+ }
+
+ case ZIP_SOURCE_CLOSE:
+ if (ctx->fname) {
+ fclose(ctx->f);
+ ctx->f = NULL;
+ }
+ return 0;
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ free(ctx->fname);
+ free(ctx->tmpname);
+ if (ctx->f)
+ fclose(ctx->f);
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_OPEN:
+ if (ctx->fname) {
+ if ((ctx->f=fopen(ctx->fname, "rb")) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_OPEN, errno);
+ return -1;
+ }
+ }
+
+ if (ctx->start > 0) {
+ if (_zip_fseek_u(ctx->f, ctx->start, SEEK_SET, &ctx->error) < 0) {
+ return -1;
+ }
+ }
+ ctx->current = ctx->start;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if (ctx->end > 0) {
+ n = ctx->end-ctx->current;
+ if (n > len) {
+ n = len;
+ }
+ }
+ else {
+ n = len;
+ }
+
+ if (n > SIZE_MAX)
+ n = SIZE_MAX;
+
+ if ((i=fread(buf, 1, (size_t)n, ctx->f)) == 0) {
+ if (ferror(ctx->f)) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, errno);
+ return -1;
+ }
+ }
+ ctx->current += i;
+
+ return (zip_int64_t)i;
+
+ case ZIP_SOURCE_REMOVE:
+ if (remove(ctx->fname) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_REMOVE, errno);
+ return -1;
+ }
+ return 0;
+
+ case ZIP_SOURCE_ROLLBACK_WRITE:
+ if (ctx->fout) {
+ fclose(ctx->fout);
+ ctx->fout = NULL;
+ }
+ (void)remove(ctx->tmpname);
+ free(ctx->tmpname);
+ ctx->tmpname = NULL;
+ return 0;
+
+ case ZIP_SOURCE_SEEK: {
+ zip_int64_t new_current;
+ int need_seek;
+ zip_source_args_seek_t *args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error);
+
+ if (args == NULL)
+ return -1;
+
+ need_seek = 1;
+
+ switch (args->whence) {
+ case SEEK_SET:
+ new_current = args->offset;
+ break;
+
+ case SEEK_END:
+ if (ctx->end == 0) {
+ if (_zip_fseek(ctx->f, args->offset, SEEK_END, &ctx->error) < 0) {
+ return -1;
+ }
+ if ((new_current = ftello(ctx->f)) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_SEEK, errno);
+ return -1;
+ }
+ need_seek = 0;
+ }
+ else {
+ new_current = (zip_int64_t)ctx->end + args->offset;
+ }
+ break;
+ case SEEK_CUR:
+ new_current = (zip_int64_t)ctx->current + args->offset;
+ break;
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (new_current < 0 || (zip_uint64_t)new_current < ctx->start || (ctx->end != 0 && (zip_uint64_t)new_current > ctx->end)) {
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ ctx->current = (zip_uint64_t)new_current;
+
+ if (need_seek) {
+ if (_zip_fseek_u(ctx->f, ctx->current, SEEK_SET, &ctx->error) < 0) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_SEEK_WRITE: {
+ zip_source_args_seek_t *args;
+
+ args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error);
+ if (args == NULL) {
+ return -1;
+ }
+
+ if (_zip_fseek(ctx->fout, args->offset, args->whence, &ctx->error) < 0) {
+ return -1;
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_STAT: {
+ if (len < sizeof(ctx->st))
+ return -1;
+
+ if (ctx->st.valid != 0)
+ memcpy(data, &ctx->st, sizeof(ctx->st));
+ else {
+ zip_stat_t *st;
+ struct stat fst;
+ int err;
+
+ if (ctx->f)
+ err = fstat(fileno(ctx->f), &fst);
+ else
+ err = stat(ctx->fname, &fst);
+
+ if (err != 0) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, errno);
+ return -1;
+ }
+
+ st = (zip_stat_t *)data;
+
+ zip_stat_init(st);
+ st->mtime = fst.st_mtime;
+ st->valid |= ZIP_STAT_MTIME;
+ if (ctx->end != 0) {
+ st->size = ctx->end - ctx->start;
+ st->valid |= ZIP_STAT_SIZE;
+ }
+ else if ((fst.st_mode&S_IFMT) == S_IFREG) {
+ st->size = (zip_uint64_t)fst.st_size;
+ st->valid |= ZIP_STAT_SIZE;
+ }
+ }
+ return sizeof(ctx->st);
+ }
+
+ case ZIP_SOURCE_SUPPORTS:
+ return ctx->supports;
+
+ case ZIP_SOURCE_TELL:
+ return (zip_int64_t)ctx->current;
+
+ case ZIP_SOURCE_TELL_WRITE:
+ {
+ off_t ret = ftello(ctx->fout);
+
+ if (ret < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_TELL, errno);
+ return -1;
+ }
+ return ret;
+ }
+
+ case ZIP_SOURCE_WRITE:
+ {
+ size_t ret;
+
+ clearerr(ctx->fout);
+ ret = fwrite(data, 1, len, ctx->fout);
+ if (ret != len || ferror(ctx->fout)) {
+ zip_error_set(&ctx->error, ZIP_ER_WRITE, errno);
+ return -1;
+ }
+
+ return (zip_int64_t)ret;
+ }
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
+
+
+static int
+_zip_fseek_u(FILE *f, zip_uint64_t offset, int whence, zip_error_t *error)
+{
+ if (offset > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_SEEK, EOVERFLOW);
+ return -1;
+ }
+ return _zip_fseek(f, (zip_int64_t)offset, whence, error);
+}
+
+
+static int
+_zip_fseek(FILE *f, zip_int64_t offset, int whence, zip_error_t *error)
+{
+ if (offset > ZIP_FSEEK_MAX || offset < ZIP_FSEEK_MIN) {
+ zip_error_set(error, ZIP_ER_SEEK, EOVERFLOW);
+ return -1;
+ }
+ if (fseeko(f, (off_t)offset, whence) < 0) {
+ zip_error_set(error, ZIP_ER_SEEK, errno);
+ return -1;
+ }
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_free.c b/src/Common/libzip/zip_source_free.c
new file mode 100644
index 0000000..9070469
--- /dev/null
+++ b/src/Common/libzip/zip_source_free.c
@@ -0,0 +1,72 @@
+/*
+ zip_source_free.c -- free zip data source
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_source_free(zip_source_t *src)
+{
+ if (src == NULL)
+ return;
+
+ if (src->refcount > 0) {
+ src->refcount--;
+ }
+ if (src->refcount > 0) {
+ return;
+ }
+
+ if (ZIP_SOURCE_IS_OPEN_READING(src)) {
+ src->open_count = 1; /* force close */
+ zip_source_close(src);
+ }
+ if (ZIP_SOURCE_IS_OPEN_WRITING(src)) {
+ zip_source_rollback_write(src);
+ }
+
+ if (src->source_archive && !src->source_closed) {
+ _zip_deregister_source(src->source_archive, src);
+ }
+
+ (void)_zip_source_call(src, NULL, 0, ZIP_SOURCE_FREE);
+
+ if (src->src) {
+ zip_source_free(src->src);
+ }
+
+ free(src);
+}
diff --git a/src/Common/libzip/zip_source_function.c b/src/Common/libzip/zip_source_function.c
new file mode 100644
index 0000000..1d4be93
--- /dev/null
+++ b/src/Common/libzip/zip_source_function.c
@@ -0,0 +1,99 @@
+/*
+ zip_source_function.c -- create zip data source from callback function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_function(zip_t *za, zip_source_callback zcb, void *ud)
+{
+ if (za == NULL) {
+ return NULL;
+ }
+
+ return zip_source_function_create(zcb, ud, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_function_create(zip_source_callback zcb, void *ud, zip_error_t *error)
+{
+ zip_source_t *zs;
+
+ if ((zs=_zip_source_new(error)) == NULL)
+ return NULL;
+
+ zs->cb.f = zcb;
+ zs->ud = ud;
+
+ zs->supports = zcb(ud, NULL, 0, ZIP_SOURCE_SUPPORTS);
+ if (zs->supports < 0) {
+ zs->supports = ZIP_SOURCE_SUPPORTS_READABLE;
+ }
+
+ return zs;
+}
+
+
+ZIP_EXTERN void
+zip_source_keep(zip_source_t *src)
+{
+ src->refcount++;
+}
+
+
+zip_source_t *
+_zip_source_new(zip_error_t *error)
+{
+ zip_source_t *src;
+
+ if ((src=(zip_source_t *)malloc(sizeof(*src))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ src->src = NULL;
+ src->cb.f = NULL;
+ src->ud = NULL;
+ src->open_count = 0;
+ src->write_state = ZIP_SOURCE_WRITE_CLOSED;
+ src->source_closed = false;
+ src->source_archive = NULL;
+ src->refcount = 1;
+ zip_error_init(&src->error);
+
+ return src;
+}
diff --git a/src/Common/libzip/zip_source_is_deleted.c b/src/Common/libzip/zip_source_is_deleted.c
new file mode 100644
index 0000000..e50cdd9
--- /dev/null
+++ b/src/Common/libzip/zip_source_is_deleted.c
@@ -0,0 +1,42 @@
+/*
+ zip_source_is_deleted.c -- was archive was removed?
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_is_deleted(zip_source_t *src)
+{
+ return src->write_state == ZIP_SOURCE_WRITE_REMOVED;
+}
diff --git a/src/Common/libzip/zip_source_layered.c b/src/Common/libzip/zip_source_layered.c
new file mode 100644
index 0000000..94b3310
--- /dev/null
+++ b/src/Common/libzip/zip_source_layered.c
@@ -0,0 +1,69 @@
+/*
+ zip_source_layered.c -- create layered source
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+zip_source_t *
+zip_source_layered(zip_t *za, zip_source_t *src, zip_source_layered_callback cb, void *ud)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_layered_create(src, cb, ud, &za->error);
+}
+
+
+zip_source_t *
+zip_source_layered_create(zip_source_t *src, zip_source_layered_callback cb, void *ud, zip_error_t *error)
+{
+ zip_source_t *zs;
+
+ if ((zs=_zip_source_new(error)) == NULL)
+ return NULL;
+
+ zip_source_keep(src);
+ zs->src = src;
+ zs->cb.l = cb;
+ zs->ud = ud;
+
+ zs->supports = cb(src, ud, NULL, 0, ZIP_SOURCE_SUPPORTS);
+ if (zs->supports < 0) {
+ zs->supports = ZIP_SOURCE_SUPPORTS_READABLE;
+ }
+
+ return zs;
+}
diff --git a/src/Common/libzip/zip_source_open.c b/src/Common/libzip/zip_source_open.c
new file mode 100644
index 0000000..ec5e39d
--- /dev/null
+++ b/src/Common/libzip/zip_source_open.c
@@ -0,0 +1,73 @@
+/*
+ zip_source_open.c -- open zip_source (prepare for reading)
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+ZIP_EXTERN int
+zip_source_open(zip_source_t *src)
+{
+ if (src->source_closed) {
+ return -1;
+ }
+ if (src->write_state == ZIP_SOURCE_WRITE_REMOVED) {
+ zip_error_set(&src->error, ZIP_ER_DELETED, 0);
+ return -1;
+ }
+
+ if (ZIP_SOURCE_IS_OPEN_READING(src)) {
+ if ((zip_source_supports(src) & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK)) == 0) {
+ zip_error_set(&src->error, ZIP_ER_INUSE, 0);
+ return -1;
+ }
+ }
+ else {
+ if (ZIP_SOURCE_IS_LAYERED(src)) {
+ if (zip_source_open(src->src) < 0) {
+ _zip_error_set_from_source(&src->error, src->src);
+ return -1;
+ }
+ }
+
+ if (_zip_source_call(src, NULL, 0, ZIP_SOURCE_OPEN) < 0) {
+ if (ZIP_SOURCE_IS_LAYERED(src)) {
+ zip_source_close(src->src);
+ }
+ return -1;
+ }
+ }
+
+ src->open_count++;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_pkware.c b/src/Common/libzip/zip_source_pkware.c
new file mode 100644
index 0000000..125e4e2
--- /dev/null
+++ b/src/Common/libzip/zip_source_pkware.c
@@ -0,0 +1,226 @@
+/*
+ zip_source_pkware.c -- Traditional PKWARE de/encryption routines
+ Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+struct trad_pkware {
+ zip_error_t error;
+ zip_uint32_t key[3];
+};
+
+#define HEADERLEN 12
+#define KEY0 305419896
+#define KEY1 591751049
+#define KEY2 878082192
+
+
+static void decrypt(struct trad_pkware *, zip_uint8_t *,
+ const zip_uint8_t *, zip_uint64_t, int);
+static int decrypt_header(zip_source_t *, struct trad_pkware *);
+static zip_int64_t pkware_decrypt(zip_source_t *, void *, void *,
+ zip_uint64_t, zip_source_cmd_t);
+static void pkware_free(struct trad_pkware *);
+
+
+zip_source_t *
+zip_source_pkware(zip_t *za, zip_source_t *src,
+ zip_uint16_t em, int flags, const char *password)
+{
+ struct trad_pkware *ctx;
+ zip_source_t *s2;
+
+ if (password == NULL || src == NULL || em != ZIP_EM_TRAD_PKWARE) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+ if (flags & ZIP_CODEC_ENCODE) {
+ zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct trad_pkware *)malloc(sizeof(*ctx))) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ zip_error_init(&ctx->error);
+
+ ctx->key[0] = KEY0;
+ ctx->key[1] = KEY1;
+ ctx->key[2] = KEY2;
+ decrypt(ctx, NULL, (const zip_uint8_t *)password, strlen(password), 1);
+
+ if ((s2=zip_source_layered(za, src, pkware_decrypt, ctx)) == NULL) {
+ pkware_free(ctx);
+ return NULL;
+ }
+
+ return s2;
+}
+
+
+static void
+decrypt(struct trad_pkware *ctx, zip_uint8_t *out, const zip_uint8_t *in,
+ zip_uint64_t len, int update_only)
+{
+ zip_uint16_t tmp;
+ zip_uint64_t i;
+ Bytef b;
+
+ for (i=0; i<len; i++) {
+ b = in[i];
+
+ if (!update_only) {
+ /* decrypt next byte */
+ tmp = (zip_uint16_t)(ctx->key[2] | 2);
+ tmp = (zip_uint16_t)(((zip_uint32_t)tmp * (tmp ^ 1)) >> 8);
+ b ^= (Bytef)tmp;
+ }
+
+ /* store cleartext */
+ if (out)
+ out[i] = b;
+
+ /* update keys */
+ ctx->key[0] = (zip_uint32_t)crc32(ctx->key[0] ^ 0xffffffffUL, &b, 1) ^ 0xffffffffUL;
+ ctx->key[1] = (ctx->key[1] + (ctx->key[0] & 0xff)) * 134775813 + 1;
+ b = (Bytef)(ctx->key[1] >> 24);
+ ctx->key[2] = (zip_uint32_t)crc32(ctx->key[2] ^ 0xffffffffUL, &b, 1) ^ 0xffffffffUL;
+ }
+}
+
+
+static int
+decrypt_header(zip_source_t *src, struct trad_pkware *ctx)
+{
+ zip_uint8_t header[HEADERLEN];
+ struct zip_stat st;
+ zip_int64_t n;
+ unsigned short dostime, dosdate;
+
+ if ((n=zip_source_read(src, header, HEADERLEN)) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ if (n != HEADERLEN) {
+ zip_error_set(&ctx->error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+
+ decrypt(ctx, header, header, HEADERLEN, 0);
+
+ if (zip_source_stat(src, &st) < 0) {
+ /* stat failed, skip password validation */
+ return 0;
+ }
+
+ _zip_u2d_time(st.mtime, &dostime, &dosdate);
+
+ if (header[HEADERLEN-1] != st.crc>>24 && header[HEADERLEN-1] != dostime>>8) {
+ zip_error_set(&ctx->error, ZIP_ER_WRONGPASSWD, 0);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static zip_int64_t
+pkware_decrypt(zip_source_t *src, void *ud, void *data,
+ zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct trad_pkware *ctx;
+ zip_int64_t n;
+
+ ctx = (struct trad_pkware *)ud;
+
+ switch (cmd) {
+ case ZIP_SOURCE_OPEN:
+ if (decrypt_header(src, ctx) < 0)
+ return -1;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if ((n=zip_source_read(src, data, len)) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+
+ decrypt((struct trad_pkware *)ud, (zip_uint8_t *)data, (zip_uint8_t *)data, (zip_uint64_t)n, 0);
+ return n;
+
+ case ZIP_SOURCE_CLOSE:
+ return 0;
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ st = (zip_stat_t *)data;
+
+ st->encryption_method = ZIP_EM_NONE;
+ st->valid |= ZIP_STAT_ENCRYPTION_METHOD;
+ /* TODO: deduce HEADERLEN from size for uncompressed */
+ if (st->valid & ZIP_STAT_COMP_SIZE)
+ st->comp_size -= HEADERLEN;
+
+ return 0;
+ }
+
+ case ZIP_SOURCE_SUPPORTS:
+ return zip_source_make_command_bitmap(ZIP_SOURCE_OPEN, ZIP_SOURCE_READ, ZIP_SOURCE_CLOSE, ZIP_SOURCE_STAT, ZIP_SOURCE_ERROR, ZIP_SOURCE_FREE, -1);
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ pkware_free(ctx);
+ return 0;
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+}
+
+
+static void
+pkware_free(struct trad_pkware *ctx)
+{
+ free(ctx);
+}
diff --git a/src/Common/libzip/zip_source_read.c b/src/Common/libzip/zip_source_read.c
new file mode 100644
index 0000000..061a6f9
--- /dev/null
+++ b/src/Common/libzip/zip_source_read.c
@@ -0,0 +1,50 @@
+/*
+ zip_source_read.c -- read data from zip_source
+ Copyright (C) 2009-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+zip_int64_t
+zip_source_read(zip_source_t *src, void *data, zip_uint64_t len)
+{
+ if (src->source_closed) {
+ return -1;
+ }
+ if (!ZIP_SOURCE_IS_OPEN_READING(src) || len > ZIP_INT64_MAX || (len > 0 && data == NULL)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_source_call(src, data, len, ZIP_SOURCE_READ);
+}
diff --git a/src/Common/libzip/zip_source_remove.c b/src/Common/libzip/zip_source_remove.c
new file mode 100644
index 0000000..470a5ed
--- /dev/null
+++ b/src/Common/libzip/zip_source_remove.c
@@ -0,0 +1,61 @@
+/*
+ zip_source_remove.c -- remove empty archive
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#include "zipint.h"
+
+
+int
+zip_source_remove(zip_source_t *src)
+{
+ if (src->write_state == ZIP_SOURCE_WRITE_REMOVED) {
+ return 0;
+ }
+
+ if (ZIP_SOURCE_IS_OPEN_READING(src)) {
+ if (zip_source_close(src) < 0) {
+ return -1;
+ }
+ }
+ if (src->write_state != ZIP_SOURCE_WRITE_CLOSED) {
+ zip_source_rollback_write(src);
+ }
+
+ if (_zip_source_call(src, NULL, 0, ZIP_SOURCE_REMOVE) < 0) {
+ return -1;
+ }
+
+ src->write_state = ZIP_SOURCE_WRITE_REMOVED;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_rollback_write.c b/src/Common/libzip/zip_source_rollback_write.c
new file mode 100644
index 0000000..c35f30f
--- /dev/null
+++ b/src/Common/libzip/zip_source_rollback_write.c
@@ -0,0 +1,47 @@
+/*
+ zip_source_rollback_write.c -- discard changes
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_source_rollback_write(zip_source_t *src)
+{
+ if (src->write_state != ZIP_SOURCE_WRITE_OPEN && src->write_state != ZIP_SOURCE_WRITE_FAILED) {
+ return;
+ }
+
+ _zip_source_call(src, NULL, 0, ZIP_SOURCE_ROLLBACK_WRITE);
+ src->write_state = ZIP_SOURCE_WRITE_CLOSED;
+}
diff --git a/src/Common/libzip/zip_source_seek.c b/src/Common/libzip/zip_source_seek.c
new file mode 100644
index 0000000..c3f4703
--- /dev/null
+++ b/src/Common/libzip/zip_source_seek.c
@@ -0,0 +1,92 @@
+/*
+ zip_source_seek.c -- seek to offset
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_seek(zip_source_t *src, zip_int64_t offset, int whence)
+{
+ zip_source_args_seek_t args;
+
+ if (src->source_closed) {
+ return -1;
+ }
+ if (!ZIP_SOURCE_IS_OPEN_READING(src) || (whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ args.offset = offset;
+ args.whence = whence;
+
+ return (_zip_source_call(src, &args, sizeof(args), ZIP_SOURCE_SEEK) < 0 ? -1 : 0);
+}
+
+
+zip_int64_t
+zip_source_seek_compute_offset(zip_uint64_t offset, zip_uint64_t length, void *data, zip_uint64_t data_length, zip_error_t *error)
+{
+ zip_int64_t new_offset;
+ zip_source_args_seek_t *args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, data_length, error);
+
+ if (args == NULL) {
+ return -1;
+ }
+
+ switch (args->whence) {
+ case SEEK_CUR:
+ new_offset = (zip_int64_t)offset + args->offset;
+ break;
+
+ case SEEK_END:
+ new_offset = (zip_int64_t)length + args->offset;
+ break;
+
+ case SEEK_SET:
+ new_offset = args->offset;
+ break;
+
+ default:
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (new_offset < 0 || (zip_uint64_t)new_offset > length) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return new_offset;
+}
diff --git a/src/Common/libzip/zip_source_seek_write.c b/src/Common/libzip/zip_source_seek_write.c
new file mode 100644
index 0000000..6660766
--- /dev/null
+++ b/src/Common/libzip/zip_source_seek_write.c
@@ -0,0 +1,52 @@
+/*
+ zip_source_seek_write.c -- seek to offset for writing
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_seek_write(zip_source_t *src, zip_int64_t offset, int whence)
+{
+ zip_source_args_seek_t args;
+
+ if (!ZIP_SOURCE_IS_OPEN_WRITING(src) || (whence != SEEK_SET && whence != SEEK_CUR && whence != SEEK_END)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ args.offset = offset;
+ args.whence = whence;
+
+ return (_zip_source_call(src, &args, sizeof(args), ZIP_SOURCE_SEEK_WRITE) < 0 ? -1 : 0);
+}
diff --git a/src/Common/libzip/zip_source_stat.c b/src/Common/libzip/zip_source_stat.c
new file mode 100644
index 0000000..a6b46d0
--- /dev/null
+++ b/src/Common/libzip/zip_source_stat.c
@@ -0,0 +1,63 @@
+/*
+ zip_source_stat.c -- get meta information from zip_source
+ Copyright (C) 2009-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_source_stat(zip_source_t *src, zip_stat_t *st)
+{
+ if (src->source_closed) {
+ return -1;
+ }
+ if (st == NULL) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ zip_stat_init(st);
+
+ if (ZIP_SOURCE_IS_LAYERED(src)) {
+ if (zip_source_stat(src->src, st) < 0) {
+ _zip_error_set_from_source(&src->error, src->src);
+ return -1;
+ }
+ }
+
+ if (_zip_source_call(src, st, sizeof(*st), ZIP_SOURCE_STAT) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_supports.c b/src/Common/libzip/zip_source_supports.c
new file mode 100644
index 0000000..75a4a46
--- /dev/null
+++ b/src/Common/libzip/zip_source_supports.c
@@ -0,0 +1,68 @@
+/*
+ zip_source_supports.c -- check for supported functions
+ Copyright (C) 2014-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdarg.h>
+
+#include "zipint.h"
+
+
+zip_int64_t
+zip_source_supports(zip_source_t *src)
+{
+ return src->supports;
+}
+
+
+ZIP_EXTERN zip_int64_t
+zip_source_make_command_bitmap(zip_source_cmd_t cmd0, ...)
+{
+ zip_int64_t bitmap;
+ va_list ap;
+
+ bitmap = ZIP_SOURCE_MAKE_COMMAND_BITMASK(cmd0);
+
+
+
+ va_start(ap, cmd0);
+ for (;;) {
+ int cmd = va_arg(ap, int);
+ if (cmd < 0) {
+ break;
+ }
+ bitmap |= ZIP_SOURCE_MAKE_COMMAND_BITMASK(cmd);
+ }
+ va_end(ap);
+
+ return bitmap;
+}
diff --git a/src/Common/libzip/zip_source_tell.c b/src/Common/libzip/zip_source_tell.c
new file mode 100644
index 0000000..f1c10b5
--- /dev/null
+++ b/src/Common/libzip/zip_source_tell.c
@@ -0,0 +1,50 @@
+/*
+ zip_source_tell.c -- report current offset
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_source_tell(zip_source_t *src)
+{
+ if (src->source_closed) {
+ return -1;
+ }
+ if (!ZIP_SOURCE_IS_OPEN_READING(src)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_source_call(src, NULL, 0, ZIP_SOURCE_TELL);
+}
diff --git a/src/Common/libzip/zip_source_tell_write.c b/src/Common/libzip/zip_source_tell_write.c
new file mode 100644
index 0000000..2fa1507
--- /dev/null
+++ b/src/Common/libzip/zip_source_tell_write.c
@@ -0,0 +1,47 @@
+/*
+ zip_source_tell_write.c -- report current offset for writing
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_source_tell_write(zip_source_t *src)
+{
+ if (!ZIP_SOURCE_IS_OPEN_WRITING(src)) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_source_call(src, NULL, 0, ZIP_SOURCE_TELL_WRITE);
+}
diff --git a/src/Common/libzip/zip_source_win32a.c b/src/Common/libzip/zip_source_win32a.c
new file mode 100644
index 0000000..85493b6
--- /dev/null
+++ b/src/Common/libzip/zip_source_win32a.c
@@ -0,0 +1,124 @@
+/*
+zip_source_win32a.c -- create data source from Windows file (ANSI)
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+This file is part of libzip, a library to manipulate ZIP archives.
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the
+distribution.
+3. The names of the authors may not be used to endorse or promote
+products derived from this software without specific prior
+written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+
+#include "zipint.h"
+#include "zipwin32.h"
+
+static void * _win32_strdup_a(const void *str);
+static HANDLE _win32_open_a(_zip_source_win32_read_file_t *ctx);
+static HANDLE _win32_create_temp_a(_zip_source_win32_read_file_t *ctx, void **temp, zip_uint32_t value, PSECURITY_ATTRIBUTES sa);
+static int _win32_rename_temp_a(_zip_source_win32_read_file_t *ctx);
+static int _win32_remove_a(const void *fname);
+
+static _zip_source_win32_file_ops_t win32_ops_a = {
+ _win32_strdup_a,
+ _win32_open_a,
+ _win32_create_temp_a,
+ _win32_rename_temp_a,
+ _win32_remove_a
+};
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32a(zip_t *za, const char *fname, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_win32a_create(fname, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32a_create(const char *fname, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ if (fname == NULL || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ return _zip_source_win32_handle_or_name(fname, INVALID_HANDLE_VALUE, start, length, 1, NULL, &win32_ops_a, error);
+}
+
+
+static void *
+_win32_strdup_a(const void *str)
+{
+ return strdup((const char *)str);
+}
+
+
+static HANDLE
+_win32_open_a(_zip_source_win32_read_file_t *ctx)
+{
+ return CreateFileA(ctx->fname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+}
+
+
+static HANDLE
+_win32_create_temp_a(_zip_source_win32_read_file_t *ctx, void **temp, zip_uint32_t value, PSECURITY_ATTRIBUTES sa)
+{
+ int len;
+
+ len = strlen((const char *)ctx->fname) + 10;
+ if (*temp == NULL) {
+ if ((*temp = malloc(sizeof(char) * len)) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return INVALID_HANDLE_VALUE;
+ }
+ }
+ if (sprintf((char *)*temp, "%s.%08x", (const char *)ctx->fname, value) != len - 1) {
+ return INVALID_HANDLE_VALUE;
+ }
+
+ return CreateFileA((const char *)*temp, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY, NULL);
+}
+
+
+static int
+_win32_rename_temp_a(_zip_source_win32_read_file_t *ctx)
+{
+ if (!MoveFileExA(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING))
+ return -1;
+ return 0;
+}
+
+
+static int
+_win32_remove_a(const void *fname)
+{
+ DeleteFileA((const char *)fname);
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_win32handle.c b/src/Common/libzip/zip_source_win32handle.c
new file mode 100644
index 0000000..35e2e67
--- /dev/null
+++ b/src/Common/libzip/zip_source_win32handle.c
@@ -0,0 +1,607 @@
+/*
+zip_source_win32file.c -- create data source from HANDLE (Win32)
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+This file is part of libzip, a library to manipulate ZIP archives.
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the
+distribution.
+3. The names of the authors may not be used to endorse or promote
+products derived from this software without specific prior
+written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <wchar.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+#include "zipwin32.h"
+
+static zip_int64_t _win32_read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd);
+static int _win32_create_temp_file(_zip_source_win32_read_file_t *ctx);
+static int _zip_filetime_to_time_t(FILETIME ft, time_t *t);
+static int _zip_seek_win32_u(void *h, zip_uint64_t offset, int whence, zip_error_t *error);
+static int _zip_seek_win32(void *h, zip_int64_t offset, int whence, zip_error_t *error);
+static int _zip_win32_error_to_errno(unsigned long win32err);
+static int _zip_stat_win32(void *h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx);
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32handle(zip_t *za, HANDLE h, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_win32handle_create(h, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32handle_create(HANDLE h, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ if (h == INVALID_HANDLE_VALUE || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ return _zip_source_win32_handle_or_name(NULL, h, start, length, 1, NULL, NULL, error);
+}
+
+
+zip_source_t *
+_zip_source_win32_handle_or_name(const void *fname, HANDLE h, zip_uint64_t start, zip_int64_t len, int closep, const zip_stat_t *st, _zip_source_win32_file_ops_t *ops, zip_error_t *error)
+{
+ _zip_source_win32_read_file_t *ctx;
+ zip_source_t *zs;
+
+ if (h == INVALID_HANDLE_VALUE && fname == NULL) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx = (_zip_source_win32_read_file_t *)malloc(sizeof(_zip_source_win32_read_file_t))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ ctx->fname = NULL;
+ if (fname) {
+ if ((ctx->fname = ops->op_strdup(fname)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ free(ctx);
+ return NULL;
+ }
+ }
+
+ ctx->ops = ops;
+ ctx->h = h;
+ ctx->start = start;
+ ctx->end = (len < 0 ? 0 : start + (zip_uint64_t)len);
+ ctx->closep = ctx->fname ? 1 : closep;
+ if (st) {
+ memcpy(&ctx->st, st, sizeof(ctx->st));
+ ctx->st.name = NULL;
+ ctx->st.valid &= ~ZIP_STAT_NAME;
+ }
+ else {
+ zip_stat_init(&ctx->st);
+ }
+
+ ctx->tmpname = NULL;
+ ctx->hout = INVALID_HANDLE_VALUE;
+
+ zip_error_init(&ctx->error);
+
+ ctx->supports = ZIP_SOURCE_SUPPORTS_READABLE | zip_source_make_command_bitmap(ZIP_SOURCE_SUPPORTS, ZIP_SOURCE_TELL, -1);
+ if (ctx->fname) {
+ HANDLE th;
+
+ th = ops->op_open(ctx);
+ if (th == INVALID_HANDLE_VALUE || GetFileType(th) == FILE_TYPE_DISK) {
+ ctx->supports = ZIP_SOURCE_SUPPORTS_WRITABLE;
+ }
+ if (th != INVALID_HANDLE_VALUE) {
+ CloseHandle(th);
+ }
+ }
+ else if (GetFileType(ctx->h) == FILE_TYPE_DISK) {
+ ctx->supports = ZIP_SOURCE_SUPPORTS_SEEKABLE;
+ }
+
+ if ((zs = zip_source_function_create(_win32_read_file, ctx, error)) == NULL) {
+ free(ctx->fname);
+ free(ctx);
+ return NULL;
+ }
+
+ return zs;
+}
+
+
+static zip_int64_t
+_win32_read_file(void *state, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ _zip_source_win32_read_file_t *ctx;
+ char *buf;
+ zip_uint64_t n;
+ DWORD i;
+
+ ctx = (_zip_source_win32_read_file_t *)state;
+ buf = (char *)data;
+
+ switch (cmd) {
+ case ZIP_SOURCE_BEGIN_WRITE:
+ if (ctx->fname == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+ return _win32_create_temp_file(ctx);
+
+ case ZIP_SOURCE_COMMIT_WRITE: {
+ if (!CloseHandle(ctx->hout)) {
+ ctx->hout = INVALID_HANDLE_VALUE;
+ zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_win32_error_to_errno(GetLastError()));
+ }
+ ctx->hout = INVALID_HANDLE_VALUE;
+ if (ctx->ops->op_rename_temp(ctx) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_RENAME, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ free(ctx->tmpname);
+ ctx->tmpname = NULL;
+ return 0;
+ }
+
+ case ZIP_SOURCE_CLOSE:
+ if (ctx->fname) {
+ CloseHandle(ctx->h);
+ ctx->h = INVALID_HANDLE_VALUE;
+ }
+ return 0;
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ free(ctx->fname);
+ free(ctx->tmpname);
+ if (ctx->closep && ctx->h != INVALID_HANDLE_VALUE)
+ CloseHandle(ctx->h);
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_OPEN:
+ if (ctx->fname) {
+ if ((ctx->h = ctx->ops->op_open(ctx)) == INVALID_HANDLE_VALUE) {
+ zip_error_set(&ctx->error, ZIP_ER_OPEN, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ }
+
+ if (ctx->closep && ctx->start > 0) {
+ if (_zip_seek_win32_u(ctx->h, ctx->start, SEEK_SET, &ctx->error) < 0) {
+ return -1;
+ }
+ }
+ ctx->current = ctx->start;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if (ctx->end > 0) {
+ n = ctx->end - ctx->current;
+ if (n > len) {
+ n = len;
+ }
+ }
+ else {
+ n = len;
+ }
+
+ if (n > SIZE_MAX)
+ n = SIZE_MAX;
+
+ if (!ctx->closep) {
+ if (_zip_seek_win32_u(ctx->h, ctx->current, SEEK_SET, &ctx->error) < 0) {
+ return -1;
+ }
+ }
+
+ if (!ReadFile(ctx->h, buf, (DWORD)n, &i, NULL)) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ ctx->current += i;
+
+ return (zip_int64_t)i;
+
+ case ZIP_SOURCE_REMOVE:
+ if (ctx->ops->op_remove(ctx->fname) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_REMOVE, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ return 0;
+
+ case ZIP_SOURCE_ROLLBACK_WRITE:
+ if (ctx->hout) {
+ CloseHandle(ctx->hout);
+ ctx->hout = INVALID_HANDLE_VALUE;
+ }
+ ctx->ops->op_remove(ctx->tmpname);
+ free(ctx->tmpname);
+ ctx->tmpname = NULL;
+ return 0;
+
+ case ZIP_SOURCE_SEEK: {
+ zip_int64_t new_current;
+ int need_seek;
+ zip_source_args_seek_t *args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error);
+
+ if (args == NULL)
+ return -1;
+
+ need_seek = ctx->closep;
+
+ switch (args->whence) {
+ case SEEK_SET:
+ new_current = args->offset;
+ break;
+
+ case SEEK_END:
+ if (ctx->end == 0) {
+ LARGE_INTEGER zero;
+ LARGE_INTEGER new_offset;
+
+ if (_zip_seek_win32(ctx->h, args->offset, SEEK_END, &ctx->error) < 0) {
+ return -1;
+ }
+ zero.QuadPart = 0;
+ if (!SetFilePointerEx(ctx->h, zero, &new_offset, FILE_CURRENT)) {
+ zip_error_set(&ctx->error, ZIP_ER_SEEK, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ new_current = new_offset.QuadPart;
+ need_seek = 0;
+ }
+ else {
+ new_current = (zip_int64_t)ctx->end + args->offset;
+ }
+ break;
+ case SEEK_CUR:
+ new_current = (zip_int64_t)ctx->current + args->offset;
+ break;
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (new_current < 0 || (zip_uint64_t)new_current < ctx->start || (ctx->end != 0 && (zip_uint64_t)new_current > ctx->end)) {
+ zip_error_set(&ctx->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ ctx->current = (zip_uint64_t)new_current;
+
+ if (need_seek) {
+ if (_zip_seek_win32_u(ctx->h, ctx->current, SEEK_SET, &ctx->error) < 0) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_SEEK_WRITE: {
+ zip_source_args_seek_t *args;
+
+ args = ZIP_SOURCE_GET_ARGS(zip_source_args_seek_t, data, len, &ctx->error);
+ if (args == NULL) {
+ return -1;
+ }
+
+ if (_zip_seek_win32(ctx->hout, args->offset, args->whence, &ctx->error) < 0) {
+ return -1;
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_STAT: {
+ if (len < sizeof(ctx->st))
+ return -1;
+
+ if (ctx->st.valid != 0)
+ memcpy(data, &ctx->st, sizeof(ctx->st));
+ else {
+ DWORD win32err;
+ zip_stat_t *st;
+ HANDLE h;
+ int success;
+
+ st = (zip_stat_t *)data;
+
+ if (ctx->h != INVALID_HANDLE_VALUE) {
+ h = ctx->h;
+ }
+ else {
+ h = ctx->ops->op_open(ctx);
+ if (h == INVALID_HANDLE_VALUE && GetLastError() == ERROR_FILE_NOT_FOUND) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, ENOENT);
+ return -1;
+ }
+ }
+
+ success = _zip_stat_win32(h, st, ctx);
+ win32err = GetLastError();
+
+ /* We're done with the handle, so close it if we just opened it. */
+ if (h != ctx->h) {
+ CloseHandle(h);
+ }
+
+ if (success < 0) {
+ /* TODO: Is this the correct error to return in all cases? */
+ zip_error_set(&ctx->error, ZIP_ER_READ, _zip_win32_error_to_errno(win32err));
+ return -1;
+ }
+ }
+ return sizeof(ctx->st);
+ }
+
+ case ZIP_SOURCE_SUPPORTS:
+ return ctx->supports;
+
+ case ZIP_SOURCE_TELL:
+ return (zip_int64_t)ctx->current;
+
+ case ZIP_SOURCE_TELL_WRITE:
+ {
+ LARGE_INTEGER zero;
+ LARGE_INTEGER offset;
+
+ zero.QuadPart = 0;
+ if (!SetFilePointerEx(ctx->hout, zero, &offset, FILE_CURRENT)) {
+ zip_error_set(&ctx->error, ZIP_ER_TELL, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+
+ return offset.QuadPart;
+ }
+
+ case ZIP_SOURCE_WRITE:
+ {
+ DWORD ret;
+ if (!WriteFile(ctx->hout, data, (DWORD)len, &ret, NULL) || ret != len) {
+ zip_error_set(&ctx->error, ZIP_ER_WRITE, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+
+ return (zip_int64_t)ret;
+ }
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
+
+
+static int
+_win32_create_temp_file(_zip_source_win32_read_file_t *ctx)
+{
+ zip_uint32_t value;
+ /*
+ Windows has GetTempFileName(), but it closes the file after
+ creation, leaving it open to a horrible race condition. So
+ we reinvent the wheel.
+ */
+ int i;
+ HANDLE th = INVALID_HANDLE_VALUE;
+ void *temp = NULL;
+ SECURITY_INFORMATION si;
+ SECURITY_ATTRIBUTES sa;
+ PSECURITY_DESCRIPTOR psd = NULL;
+ PSECURITY_ATTRIBUTES psa = NULL;
+ DWORD len;
+ BOOL success;
+
+ /*
+ Read the DACL from the original file, so we can copy it to the temp file.
+ If there is no original file, or if we can't read the DACL, we'll use the
+ default security descriptor.
+ */
+ if (ctx->h != INVALID_HANDLE_VALUE && GetFileType(ctx->h) == FILE_TYPE_DISK) {
+ si = DACL_SECURITY_INFORMATION | UNPROTECTED_DACL_SECURITY_INFORMATION;
+ len = 0;
+ success = GetUserObjectSecurity(ctx->h, &si, NULL, len, &len);
+ if (!success && GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+ if ((psd = (PSECURITY_DESCRIPTOR)malloc(len)) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ success = GetUserObjectSecurity(ctx->h, &si, psd, len, &len);
+ }
+ if (success) {
+ sa.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sa.bInheritHandle = FALSE;
+ sa.lpSecurityDescriptor = psd;
+ psa = &sa;
+ }
+ }
+
+ value = GetTickCount();
+ for (i = 0; i < 1024 && th == INVALID_HANDLE_VALUE; i++) {
+ th = ctx->ops->op_create_temp(ctx, &temp, value + i, psa);
+ if (th == INVALID_HANDLE_VALUE && GetLastError() != ERROR_FILE_EXISTS)
+ break;
+ }
+
+ if (th == INVALID_HANDLE_VALUE) {
+ free(temp);
+ free(psd);
+ zip_error_set(&ctx->error, ZIP_ER_TMPOPEN, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+
+ free(psd);
+ ctx->hout = th;
+ ctx->tmpname = temp;
+
+ return 0;
+}
+
+
+static int
+_zip_seek_win32_u(HANDLE h, zip_uint64_t offset, int whence, zip_error_t *error)
+{
+ if (offset > ZIP_INT64_MAX) {
+ zip_error_set(error, ZIP_ER_SEEK, EOVERFLOW);
+ return -1;
+ }
+ return _zip_seek_win32(h, (zip_int64_t)offset, whence, error);
+}
+
+
+static int
+_zip_seek_win32(HANDLE h, zip_int64_t offset, int whence, zip_error_t *error)
+{
+ LARGE_INTEGER li;
+ DWORD method;
+
+ switch (whence) {
+ case SEEK_SET:
+ method = FILE_BEGIN;
+ break;
+ case SEEK_END:
+ method = FILE_END;
+ break;
+ case SEEK_CUR:
+ method = FILE_CURRENT;
+ break;
+ default:
+ zip_error_set(error, ZIP_ER_SEEK, EINVAL);
+ return -1;
+ }
+
+ li.QuadPart = (LONGLONG)offset;
+ if (!SetFilePointerEx(h, li, NULL, method)) {
+ zip_error_set(error, ZIP_ER_SEEK, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static int
+_zip_win32_error_to_errno(DWORD win32err)
+{
+ /*
+ Note: This list isn't exhaustive, but should cover common cases.
+ */
+ switch (win32err) {
+ case ERROR_INVALID_PARAMETER:
+ return EINVAL;
+ case ERROR_FILE_NOT_FOUND:
+ return ENOENT;
+ case ERROR_INVALID_HANDLE:
+ return EBADF;
+ case ERROR_ACCESS_DENIED:
+ return EACCES;
+ case ERROR_FILE_EXISTS:
+ return EEXIST;
+ case ERROR_TOO_MANY_OPEN_FILES:
+ return EMFILE;
+ case ERROR_DISK_FULL:
+ return ENOSPC;
+ default:
+ return 0;
+ }
+}
+
+
+static int
+_zip_stat_win32(HANDLE h, zip_stat_t *st, _zip_source_win32_read_file_t *ctx)
+{
+ FILETIME mtimeft;
+ time_t mtime;
+ LARGE_INTEGER size;
+ int regularp;
+
+ if (!GetFileTime(h, NULL, NULL, &mtimeft)) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+ if (_zip_filetime_to_time_t(mtimeft, &mtime) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, ERANGE);
+ return -1;
+ }
+
+ regularp = 0;
+ if (GetFileType(h) == FILE_TYPE_DISK) {
+ regularp = 1;
+ }
+
+ if (!GetFileSizeEx(h, &size)) {
+ zip_error_set(&ctx->error, ZIP_ER_READ, _zip_win32_error_to_errno(GetLastError()));
+ return -1;
+ }
+
+ zip_stat_init(st);
+ st->mtime = mtime;
+ st->valid |= ZIP_STAT_MTIME;
+ if (ctx->end != 0) {
+ st->size = ctx->end - ctx->start;
+ st->valid |= ZIP_STAT_SIZE;
+ }
+ else if (regularp) {
+ st->size = (zip_uint64_t)size.QuadPart;
+ st->valid |= ZIP_STAT_SIZE;
+ }
+
+ return 0;
+}
+
+
+static int
+_zip_filetime_to_time_t(FILETIME ft, time_t *t)
+{
+ /*
+ Inspired by http://stackoverflow.com/questions/6161776/convert-windows-filetime-to-second-in-unix-linux
+ */
+ const zip_int64_t WINDOWS_TICK = 10000000LL;
+ const zip_int64_t SEC_TO_UNIX_EPOCH = 11644473600LL;
+ ULARGE_INTEGER li;
+ zip_int64_t secs;
+ time_t temp;
+
+ li.LowPart = ft.dwLowDateTime;
+ li.HighPart = ft.dwHighDateTime;
+ secs = (li.QuadPart / WINDOWS_TICK - SEC_TO_UNIX_EPOCH);
+
+ temp = (time_t)secs;
+ if (secs != (zip_int64_t)temp)
+ return -1;
+
+ *t = temp;
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_win32utf8.c b/src/Common/libzip/zip_source_win32utf8.c
new file mode 100644
index 0000000..004c66a
--- /dev/null
+++ b/src/Common/libzip/zip_source_win32utf8.c
@@ -0,0 +1,79 @@
+/*
+zip_source_win32utf8.c -- create data source from Windows file (UTF-8)
+Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+This file is part of libzip, a library to manipulate ZIP archives.
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the
+distribution.
+3. The names of the authors may not be used to endorse or promote
+products derived from this software without specific prior
+written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+
+#include "zipint.h"
+#include "zipwin32.h"
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_file(zip_t *za, const char *fname, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_file_create(fname, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_file_create(const char *fname, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ int size;
+ wchar_t *wfname;
+ zip_source_t *source;
+
+ if (fname == NULL || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ /* Convert fname from UTF-8 to Windows-friendly UTF-16. */
+ size = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, fname, -1, NULL, 0);
+ if (size == 0) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+ if ((wfname = (wchar_t *)malloc(sizeof(wchar_t) * size)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+ MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, fname, -1, wfname, size);
+
+ source = zip_source_win32w_create(wfname, start, length, error);
+
+ free(wfname);
+ return source;
+}
diff --git a/src/Common/libzip/zip_source_win32w.c b/src/Common/libzip/zip_source_win32w.c
new file mode 100644
index 0000000..551aba5
--- /dev/null
+++ b/src/Common/libzip/zip_source_win32w.c
@@ -0,0 +1,124 @@
+/*
+zip_source_win32w.c -- create data source from Windows file (UTF-16)
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+This file is part of libzip, a library to manipulate ZIP archives.
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the
+distribution.
+3. The names of the authors may not be used to endorse or promote
+products derived from this software without specific prior
+written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdio.h>
+
+#include "zipint.h"
+#include "zipwin32.h"
+
+static void * _win32_strdup_w(const void *str);
+static HANDLE _win32_open_w(_zip_source_win32_read_file_t *ctx);
+static HANDLE _win32_create_temp_w(_zip_source_win32_read_file_t *ctx, void **temp, zip_uint32_t value, PSECURITY_ATTRIBUTES sa);
+static int _win32_rename_temp_w(_zip_source_win32_read_file_t *ctx);
+static int _win32_remove_w(const void *fname);
+
+static _zip_source_win32_file_ops_t win32_ops_w = {
+ _win32_strdup_w,
+ _win32_open_w,
+ _win32_create_temp_w,
+ _win32_rename_temp_w,
+ _win32_remove_w
+};
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32w(zip_t *za, const wchar_t *fname, zip_uint64_t start, zip_int64_t len)
+{
+ if (za == NULL)
+ return NULL;
+
+ return zip_source_win32w_create(fname, start, len, &za->error);
+}
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_win32w_create(const wchar_t *fname, zip_uint64_t start, zip_int64_t length, zip_error_t *error)
+{
+ if (fname == NULL || length < -1) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ return _zip_source_win32_handle_or_name(fname, INVALID_HANDLE_VALUE, start, length, 1, NULL, &win32_ops_w, error);
+}
+
+
+static void *
+_win32_strdup_w(const void *str)
+{
+ return _wcsdup((const wchar_t *)str);
+}
+
+
+static HANDLE
+_win32_open_w(_zip_source_win32_read_file_t *ctx)
+{
+ return CreateFileW(ctx->fname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+}
+
+
+static HANDLE
+_win32_create_temp_w(_zip_source_win32_read_file_t *ctx, void **temp, zip_uint32_t value, PSECURITY_ATTRIBUTES sa)
+{
+ int len;
+
+ len = wcslen((const wchar_t *)ctx->fname) + 10;
+ if (*temp == NULL) {
+ if ((*temp = malloc(sizeof(wchar_t) * len)) == NULL) {
+ zip_error_set(&ctx->error, ZIP_ER_MEMORY, 0);
+ return INVALID_HANDLE_VALUE;
+ }
+ }
+ if (_snwprintf((wchar_t *)*temp, len, L"%s.%08x", (const wchar_t *)ctx->fname, value) != len - 1) {
+ return INVALID_HANDLE_VALUE;
+ }
+
+ return CreateFileW((const wchar_t *)*temp, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, sa, CREATE_NEW, FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY, NULL);
+}
+
+
+static int
+_win32_rename_temp_w(_zip_source_win32_read_file_t *ctx)
+{
+ if (!MoveFileExW(ctx->tmpname, ctx->fname, MOVEFILE_REPLACE_EXISTING))
+ return -1;
+ return 0;
+}
+
+
+static int
+_win32_remove_w(const void *fname)
+{
+ DeleteFileW((const wchar_t *)fname);
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_window.c b/src/Common/libzip/zip_source_window.c
new file mode 100644
index 0000000..f02d048
--- /dev/null
+++ b/src/Common/libzip/zip_source_window.c
@@ -0,0 +1,253 @@
+/*
+ zip_source_window.c -- return part of lower source
+ Copyright (C) 2012-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+struct window {
+ zip_uint64_t start;
+ zip_uint64_t end;
+ zip_uint64_t offset;
+ zip_stat_t stat;
+ zip_error_t error;
+ zip_int64_t supports;
+ bool needs_seek;
+};
+
+static zip_int64_t window_read(zip_source_t *, void *, void *, zip_uint64_t, zip_source_cmd_t);
+
+
+zip_source_t *
+zip_source_window(zip_t *za, zip_source_t *src, zip_uint64_t start, zip_uint64_t len)
+{
+ return _zip_source_window_new(src, start, len, NULL, &za->error);
+}
+
+
+zip_source_t *
+_zip_source_window_new(zip_source_t *src, zip_uint64_t start, zip_uint64_t length, zip_stat_t *st, zip_error_t *error)
+{
+ struct window *ctx;
+
+ if (src == NULL || start + length < start) {
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((ctx=(struct window *)malloc(sizeof(*ctx))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ ctx->start = start;
+ ctx->end = start + length;
+ zip_stat_init(&ctx->stat);
+ zip_error_init(&ctx->error);
+ ctx->supports = (zip_source_supports(src) & ZIP_SOURCE_SUPPORTS_SEEKABLE) | (zip_source_make_command_bitmap(ZIP_SOURCE_SUPPORTS, ZIP_SOURCE_TELL, -1));
+ ctx->needs_seek = (ctx->supports & ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK)) ? true : false;
+
+ if (st) {
+ if (_zip_stat_merge(&ctx->stat, st, error) < 0) {
+ free(ctx);
+ return NULL;
+ }
+ }
+
+ return zip_source_layered_create(src, window_read, ctx, error);
+}
+
+
+int
+_zip_source_set_source_archive(zip_source_t *src, zip_t *za)
+{
+ src->source_archive = za;
+ return _zip_register_source(za, src);
+}
+
+
+/* called by zip_discard to avoid operating on file from closed archive */
+void
+_zip_source_invalidate(zip_source_t *src)
+{
+ src->source_closed = 1;
+
+ if (zip_error_code_zip(&src->error) == ZIP_ER_OK) {
+ zip_error_set(&src->error, ZIP_ER_ZIPCLOSED, 0);
+ }
+}
+
+
+static zip_int64_t
+window_read(zip_source_t *src, void *_ctx, void *data, zip_uint64_t len, zip_source_cmd_t cmd)
+{
+ struct window *ctx;
+ zip_int64_t ret;
+ zip_uint64_t n, i;
+ char b[8192];
+
+ ctx = (struct window *)_ctx;
+
+ switch (cmd) {
+ case ZIP_SOURCE_CLOSE:
+ return 0;
+
+ case ZIP_SOURCE_ERROR:
+ return zip_error_to_data(&ctx->error, data, len);
+
+ case ZIP_SOURCE_FREE:
+ free(ctx);
+ return 0;
+
+ case ZIP_SOURCE_OPEN:
+ if (!ctx->needs_seek) {
+ for (n=0; n<ctx->start; n+=(zip_uint64_t)ret) {
+ i = (ctx->start-n > sizeof(b) ? sizeof(b) : ctx->start-n);
+ if ((ret=zip_source_read(src, b, i)) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+ if (ret==0) {
+ zip_error_set(&ctx->error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+ }
+
+ }
+ ctx->offset = ctx->start;
+ return 0;
+
+ case ZIP_SOURCE_READ:
+ if (len > ctx->end - ctx->offset)
+ len = ctx->end - ctx->offset;
+
+ if (len == 0)
+ return 0;
+
+ if (ctx->needs_seek) {
+ if (zip_source_seek(src, (zip_int64_t)ctx->offset, SEEK_SET) < 0) {
+ _zip_error_set_from_source(&ctx->error, src);
+ return -1;
+ }
+ }
+
+ if ((ret=zip_source_read(src, data, len)) < 0) {
+ zip_error_set(&ctx->error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+
+ ctx->offset += (zip_uint64_t)ret;
+
+ if (ret == 0) {
+ if (ctx->offset < ctx->end) {
+ zip_error_set(&ctx->error, ZIP_ER_EOF, 0);
+ return -1;
+ }
+ }
+ return ret;
+
+ case ZIP_SOURCE_SEEK:
+ {
+ zip_int64_t new_offset = zip_source_seek_compute_offset(ctx->offset - ctx->start, ctx->end - ctx->start, data, len, &ctx->error);
+
+ if (new_offset < 0) {
+ return -1;
+ }
+
+ ctx->offset = (zip_uint64_t)new_offset + ctx->start;
+ return 0;
+ }
+
+ case ZIP_SOURCE_STAT:
+ {
+ zip_stat_t *st;
+
+ st = (zip_stat_t *)data;
+
+ if (_zip_stat_merge(st, &ctx->stat, &ctx->error) < 0) {
+ return -1;
+ }
+ return 0;
+ }
+
+ case ZIP_SOURCE_SUPPORTS:
+ return ctx->supports;
+
+ case ZIP_SOURCE_TELL:
+ return (zip_int64_t)(ctx->offset - ctx->start);
+
+ default:
+ zip_error_set(&ctx->error, ZIP_ER_OPNOTSUPP, 0);
+ return -1;
+ }
+}
+
+
+void
+_zip_deregister_source(zip_t *za, zip_source_t *src)
+{
+ unsigned int i;
+
+ for (i=0; i<za->nopen_source; i++) {
+ if (za->open_source[i] == src) {
+ za->open_source[i] = za->open_source[za->nopen_source-1];
+ za->nopen_source--;
+ break;
+ }
+ }
+}
+
+
+int
+_zip_register_source(zip_t *za, zip_source_t *src)
+{
+ zip_source_t **open_source;
+
+ if (za->nopen_source+1 >= za->nopen_source_alloc) {
+ unsigned int n;
+ n = za->nopen_source_alloc + 10;
+ open_source = (zip_source_t **)realloc(za->open_source, n*sizeof(zip_source_t *));
+ if (open_source == NULL) {
+ zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
+ return -1;
+ }
+ za->nopen_source_alloc = n;
+ za->open_source = open_source;
+ }
+
+ za->open_source[za->nopen_source++] = src;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_source_write.c b/src/Common/libzip/zip_source_write.c
new file mode 100644
index 0000000..c98f567
--- /dev/null
+++ b/src/Common/libzip/zip_source_write.c
@@ -0,0 +1,47 @@
+/*
+ zip_source_write.c -- start a new file for writing
+ Copyright (C) 2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_int64_t
+zip_source_write(zip_source_t *src, const void *data, zip_uint64_t length)
+{
+ if (!ZIP_SOURCE_IS_OPEN_WRITING(src) || length > ZIP_INT64_MAX) {
+ zip_error_set(&src->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ return _zip_source_call(src, (void *)data, length, ZIP_SOURCE_WRITE);
+}
diff --git a/src/Common/libzip/zip_source_zip.c b/src/Common/libzip/zip_source_zip.c
new file mode 100644
index 0000000..e172ca2
--- /dev/null
+++ b/src/Common/libzip/zip_source_zip.c
@@ -0,0 +1,59 @@
+/*
+ zip_source_zip.c -- create data source from zip file
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN zip_source_t *
+zip_source_zip(zip_t *za, zip_t *srcza, zip_uint64_t srcidx,
+ zip_flags_t flags, zip_uint64_t start, zip_int64_t len)
+{
+ if (len < -1) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if (len == -1)
+ len = 0;
+
+ if (start == 0 && len == 0)
+ flags |= ZIP_FL_COMPRESSED;
+ else
+ flags &= ~ZIP_FL_COMPRESSED;
+
+ return _zip_source_zip_new(za, srcza, srcidx, flags, start, (zip_uint64_t)len, NULL);
+}
diff --git a/src/Common/libzip/zip_source_zip_new.c b/src/Common/libzip/zip_source_zip_new.c
new file mode 100644
index 0000000..40f1195
--- /dev/null
+++ b/src/Common/libzip/zip_source_zip_new.c
@@ -0,0 +1,173 @@
+/*
+ zip_source_zip_new.c -- prepare data structures for zip_fopen/zip_source_zip
+ Copyright (C) 2012-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+zip_source_t *
+_zip_source_zip_new(zip_t *za, zip_t *srcza, zip_uint64_t srcidx, zip_flags_t flags, zip_uint64_t start, zip_uint64_t len, const char *password)
+{
+ zip_compression_implementation comp_impl;
+ zip_encryption_implementation enc_impl;
+ zip_source_t *src, *s2;
+ zip_uint64_t offset;
+ struct zip_stat st;
+
+ if (za == NULL)
+ return NULL;
+
+ if (srcza == NULL || srcidx >= srcza->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((flags & ZIP_FL_UNCHANGED) == 0
+ && (ZIP_ENTRY_DATA_CHANGED(srcza->entry+srcidx) || srcza->entry[srcidx].deleted)) {
+ zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+ return NULL;
+ }
+
+ if (zip_stat_index(srcza, srcidx, flags|ZIP_FL_UNCHANGED, &st) < 0) {
+ zip_error_set(&za->error, ZIP_ER_INTERNAL, 0);
+ return NULL;
+ }
+
+ if (flags & ZIP_FL_ENCRYPTED)
+ flags |= ZIP_FL_COMPRESSED;
+
+ if ((start > 0 || len > 0) && (flags & ZIP_FL_COMPRESSED)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ /* overflow or past end of file */
+ if ((start > 0 || len > 0) && (start+len < start || start+len > st.size)) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ enc_impl = NULL;
+ if (((flags & ZIP_FL_ENCRYPTED) == 0) && (st.encryption_method != ZIP_EM_NONE)) {
+ if (password == NULL) {
+ zip_error_set(&za->error, ZIP_ER_NOPASSWD, 0);
+ return NULL;
+ }
+ if ((enc_impl=_zip_get_encryption_implementation(st.encryption_method)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_ENCRNOTSUPP, 0);
+ return NULL;
+ }
+ }
+
+ comp_impl = NULL;
+ if ((flags & ZIP_FL_COMPRESSED) == 0) {
+ if (st.comp_method != ZIP_CM_STORE) {
+ if ((comp_impl=_zip_get_compression_implementation(st.comp_method)) == NULL) {
+ zip_error_set(&za->error, ZIP_ER_COMPNOTSUPP, 0);
+ return NULL;
+ }
+ }
+ }
+
+ if ((offset=_zip_file_get_offset(srcza, srcidx, &za->error)) == 0)
+ return NULL;
+
+ if (st.comp_size == 0) {
+ return zip_source_buffer(za, NULL, 0, 0);
+ }
+
+ if (start+len > 0 && enc_impl == NULL && comp_impl == NULL) {
+ struct zip_stat st2;
+
+ st2.size = len ? len : st.size-start;
+ st2.comp_size = st2.size;
+ st2.comp_method = ZIP_CM_STORE;
+ st2.mtime = st.mtime;
+ st2.valid = ZIP_STAT_SIZE|ZIP_STAT_COMP_SIZE|ZIP_STAT_COMP_METHOD|ZIP_STAT_MTIME;
+
+ if ((src = _zip_source_window_new(srcza->src, offset+start, st2.size, &st2, &za->error)) == NULL) {
+ return NULL;
+ }
+ }
+ else {
+ if ((src = _zip_source_window_new(srcza->src, offset, st.comp_size, &st, &za->error)) == NULL) {
+ return NULL;
+ }
+ }
+
+ if (_zip_source_set_source_archive(src, srcza) < 0) {
+ zip_source_free(src);
+ return NULL;
+ }
+
+ /* creating a layered source calls zip_keep() on the lower layer, so we free it */
+
+ if (enc_impl) {
+ s2 = enc_impl(za, src, st.encryption_method, 0, password);
+ zip_source_free(src);
+ if (s2 == NULL) {
+ return NULL;
+ }
+ src = s2;
+ }
+ if (comp_impl) {
+ s2 = comp_impl(za, src, st.comp_method, 0);
+ zip_source_free(src);
+ if (s2 == NULL) {
+ return NULL;
+ }
+ src = s2;
+ }
+ if (((flags & ZIP_FL_COMPRESSED) == 0 || st.comp_method == ZIP_CM_STORE) && (len == 0 || len == st.comp_size)) {
+ /* when reading the whole file, check for CRC errors */
+ s2 = zip_source_crc(za, src, 1);
+ zip_source_free(src);
+ if (s2 == NULL) {
+ return NULL;
+ }
+ src = s2;
+ }
+
+ if (start+len > 0 && (comp_impl || enc_impl)) {
+ s2 = zip_source_window(za, src, start, len ? len : st.size-start);
+ zip_source_free(src);
+ if (s2 == NULL) {
+ return NULL;
+ }
+ src = s2;
+ }
+
+ return src;
+}
diff --git a/src/Common/libzip/zip_stat.c b/src/Common/libzip/zip_stat.c
new file mode 100644
index 0000000..cf8e566
--- /dev/null
+++ b/src/Common/libzip/zip_stat.c
@@ -0,0 +1,47 @@
+/*
+ zip_stat.c -- get information about file by name
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_stat(zip_t *za, const char *fname, zip_flags_t flags, zip_stat_t *st)
+{
+ zip_int64_t idx;
+
+ if ((idx=zip_name_locate(za, fname, flags)) < 0)
+ return -1;
+
+ return zip_stat_index(za, (zip_uint64_t)idx, flags, st);
+}
diff --git a/src/Common/libzip/zip_stat_index.c b/src/Common/libzip/zip_stat_index.c
new file mode 100644
index 0000000..601e3f7
--- /dev/null
+++ b/src/Common/libzip/zip_stat_index.c
@@ -0,0 +1,86 @@
+/*
+ zip_stat_index.c -- get information about file by index
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_stat_index(zip_t *za, zip_uint64_t index, zip_flags_t flags,
+ zip_stat_t *st)
+{
+ const char *name;
+ zip_dirent_t *de;
+
+ if ((de=_zip_get_dirent(za, index, flags, NULL)) == NULL)
+ return -1;
+
+ if ((name=zip_get_name(za, index, flags)) == NULL)
+ return -1;
+
+
+ if ((flags & ZIP_FL_UNCHANGED) == 0
+ && ZIP_ENTRY_DATA_CHANGED(za->entry+index)) {
+ if (zip_source_stat(za->entry[index].source, st) < 0) {
+ zip_error_set(&za->error, ZIP_ER_CHANGED, 0);
+ return -1;
+ }
+ }
+ else {
+ zip_stat_init(st);
+
+ st->crc = de->crc;
+ st->size = de->uncomp_size;
+ st->mtime = de->last_mod;
+ st->comp_size = de->comp_size;
+ st->comp_method = (zip_uint16_t)de->comp_method;
+ if (de->bitflags & ZIP_GPBF_ENCRYPTED) {
+ if (de->bitflags & ZIP_GPBF_STRONG_ENCRYPTION) {
+ /* TODO */
+ st->encryption_method = ZIP_EM_UNKNOWN;
+ }
+ else
+ st->encryption_method = ZIP_EM_TRAD_PKWARE;
+ }
+ else
+ st->encryption_method = ZIP_EM_NONE;
+ st->valid = ZIP_STAT_CRC|ZIP_STAT_SIZE|ZIP_STAT_MTIME
+ |ZIP_STAT_COMP_SIZE|ZIP_STAT_COMP_METHOD|ZIP_STAT_ENCRYPTION_METHOD;
+ }
+
+ st->index = index;
+ st->name = name;
+ st->valid |= ZIP_STAT_INDEX|ZIP_STAT_NAME;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_stat_init.c b/src/Common/libzip/zip_stat_init.c
new file mode 100644
index 0000000..6b7d633
--- /dev/null
+++ b/src/Common/libzip/zip_stat_init.c
@@ -0,0 +1,85 @@
+/*
+ zip_stat_init.c -- initialize struct zip_stat.
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <string.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN void
+zip_stat_init(zip_stat_t *st)
+{
+ st->valid = 0;
+ st->name = NULL;
+ st->index = ZIP_UINT64_MAX;
+ st->crc = 0;
+ st->mtime = (time_t)-1;
+ st->size = 0;
+ st->comp_size = 0;
+ st->comp_method = ZIP_CM_STORE;
+ st->encryption_method = ZIP_EM_NONE;
+}
+
+
+int
+_zip_stat_merge(zip_stat_t *dst, const zip_stat_t *src, zip_error_t *error)
+{
+ /* name is not merged, since zip_stat_t doesn't own it, and src may not be valid as long as dst */
+ if (src->valid & ZIP_STAT_INDEX) {
+ dst->index = src->index;
+ }
+ if (src->valid & ZIP_STAT_SIZE) {
+ dst->size = src->size;
+ }
+ if (src->valid & ZIP_STAT_COMP_SIZE) {
+ dst->comp_size = src->comp_size;
+ }
+ if (src->valid & ZIP_STAT_MTIME) {
+ dst->mtime = src->mtime;
+ }
+ if (src->valid & ZIP_STAT_CRC) {
+ dst->crc = src->crc;
+ }
+ if (src->valid & ZIP_STAT_COMP_METHOD) {
+ dst->comp_method = src->comp_method;
+ }
+ if (src->valid & ZIP_STAT_ENCRYPTION_METHOD) {
+ dst->encryption_method = src->encryption_method;
+ }
+ if (src->valid & ZIP_STAT_FLAGS) {
+ dst->flags = src->flags;
+ }
+ dst->valid |= src->valid;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_strerror.c b/src/Common/libzip/zip_strerror.c
new file mode 100644
index 0000000..98c4f6b
--- /dev/null
+++ b/src/Common/libzip/zip_strerror.c
@@ -0,0 +1,42 @@
+/*
+ zip_sterror.c -- get string representation of zip error
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+
+ZIP_EXTERN const char *
+zip_strerror(zip_t *za)
+{
+ return zip_error_strerror(&za->error);
+}
diff --git a/src/Common/libzip/zip_string.c b/src/Common/libzip/zip_string.c
new file mode 100644
index 0000000..307a425
--- /dev/null
+++ b/src/Common/libzip/zip_string.c
@@ -0,0 +1,188 @@
+/*
+ zip_string.c -- string handling (with encoding)
+ Copyright (C) 2012-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "zipint.h"
+
+
+zip_uint32_t
+_zip_string_crc32(const zip_string_t *s)
+{
+ zip_uint32_t crc;
+
+ crc = (zip_uint32_t)crc32(0L, Z_NULL, 0);
+
+ if (s != NULL)
+ crc = (zip_uint32_t)crc32(crc, s->raw, s->length);
+
+ return crc;
+}
+
+
+int
+_zip_string_equal(const zip_string_t *a, const zip_string_t *b)
+{
+ if (a == NULL || b == NULL)
+ return a == b;
+
+ if (a->length != b->length)
+ return 0;
+
+ /* TODO: encoding */
+
+ return (memcmp(a->raw, b->raw, a->length) == 0);
+}
+
+
+void
+_zip_string_free(zip_string_t *s)
+{
+ if (s == NULL)
+ return;
+
+ free(s->raw);
+ free(s->converted);
+ free(s);
+}
+
+
+const zip_uint8_t *
+_zip_string_get(zip_string_t *string, zip_uint32_t *lenp, zip_flags_t flags, zip_error_t *error)
+{
+ static const zip_uint8_t empty[1] = "";
+
+ if (string == NULL) {
+ if (lenp)
+ *lenp = 0;
+ return empty;
+ }
+
+ if ((flags & ZIP_FL_ENC_RAW) == 0) {
+ /* start guessing */
+ if (string->encoding == ZIP_ENCODING_UNKNOWN)
+ _zip_guess_encoding(string, ZIP_ENCODING_UNKNOWN);
+
+ if (((flags & ZIP_FL_ENC_STRICT)
+ && string->encoding != ZIP_ENCODING_ASCII && string->encoding != ZIP_ENCODING_UTF8_KNOWN)
+ || (string->encoding == ZIP_ENCODING_CP437)) {
+ if (string->converted == NULL) {
+ if ((string->converted=_zip_cp437_to_utf8(string->raw, string->length,
+ &string->converted_length, error)) == NULL)
+ return NULL;
+ }
+ if (lenp)
+ *lenp = string->converted_length;
+ return string->converted;
+ }
+ }
+
+ if (lenp)
+ *lenp = string->length;
+ return string->raw;
+}
+
+
+zip_uint16_t
+_zip_string_length(const zip_string_t *s)
+{
+ if (s == NULL)
+ return 0;
+
+ return s->length;
+}
+
+
+zip_string_t *
+_zip_string_new(const zip_uint8_t *raw, zip_uint16_t length, zip_flags_t flags, zip_error_t *error)
+{
+ zip_string_t *s;
+ zip_encoding_type_t expected_encoding;
+
+ if (length == 0)
+ return NULL;
+
+ switch (flags & ZIP_FL_ENCODING_ALL) {
+ case ZIP_FL_ENC_GUESS:
+ expected_encoding = ZIP_ENCODING_UNKNOWN;
+ break;
+ case ZIP_FL_ENC_UTF_8:
+ expected_encoding = ZIP_ENCODING_UTF8_KNOWN;
+ break;
+ case ZIP_FL_ENC_CP437:
+ expected_encoding = ZIP_ENCODING_CP437;
+ break;
+ default:
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
+ if ((s=(zip_string_t *)malloc(sizeof(*s))) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ if ((s->raw=(zip_uint8_t *)malloc((size_t)(length+1))) == NULL) {
+ free(s);
+ return NULL;
+ }
+
+ memcpy(s->raw, raw, length);
+ s->raw[length] = '\0';
+ s->length = length;
+ s->encoding = ZIP_ENCODING_UNKNOWN;
+ s->converted = NULL;
+ s->converted_length = 0;
+
+ if (expected_encoding != ZIP_ENCODING_UNKNOWN) {
+ if (_zip_guess_encoding(s, expected_encoding) == ZIP_ENCODING_ERROR) {
+ _zip_string_free(s);
+ zip_error_set(error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+ }
+
+ return s;
+}
+
+
+int
+_zip_string_write(zip_t *za, const zip_string_t *s)
+{
+ if (s == NULL)
+ return 0;
+
+ return _zip_write(za, s->raw, s->length);
+}
diff --git a/src/Common/libzip/zip_unchange.c b/src/Common/libzip/zip_unchange.c
new file mode 100644
index 0000000..5ef5462
--- /dev/null
+++ b/src/Common/libzip/zip_unchange.c
@@ -0,0 +1,95 @@
+/*
+ zip_unchange.c -- undo changes to file in zip archive
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_unchange(zip_t *za, zip_uint64_t idx)
+{
+ return _zip_unchange(za, idx, 0);
+}
+
+
+int
+_zip_unchange(zip_t *za, zip_uint64_t idx, int allow_duplicates)
+{
+ zip_int64_t i;
+ const char *orig_name, *changed_name;
+
+ if (idx >= za->nentry) {
+ zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return -1;
+ }
+
+ if (!allow_duplicates && za->entry[idx].changes && (za->entry[idx].changes->changed & ZIP_DIRENT_FILENAME)) {
+ if (za->entry[idx].orig != NULL) {
+ if ((orig_name=_zip_get_name(za, idx, ZIP_FL_UNCHANGED, &za->error)) == NULL) {
+ return -1;
+ }
+
+ i = _zip_name_locate(za, orig_name, 0, NULL);
+ if (i >= 0 && (zip_uint64_t)i != idx) {
+ zip_error_set(&za->error, ZIP_ER_EXISTS, 0);
+ return -1;
+ }
+ }
+ else {
+ orig_name = NULL;
+ }
+
+ if ((changed_name=_zip_get_name(za, idx, 0, &za->error)) == NULL) {
+ return -1;
+ }
+
+ if (orig_name) {
+ if (_zip_hash_add(za->names, (const zip_uint8_t *)orig_name, idx, 0, &za->error) == false) {
+ return -1;
+ }
+ }
+ if (_zip_hash_delete(za->names, (const zip_uint8_t *)changed_name, &za->error) == false) {
+ _zip_hash_delete(za->names, (const zip_uint8_t *)orig_name, NULL);
+ return -1;
+ }
+ }
+
+ _zip_dirent_free(za->entry[idx].changes);
+ za->entry[idx].changes = NULL;
+
+ _zip_unchange_data(za->entry+idx);
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_unchange_all.c b/src/Common/libzip/zip_unchange_all.c
new file mode 100644
index 0000000..dc89f7f
--- /dev/null
+++ b/src/Common/libzip/zip_unchange_all.c
@@ -0,0 +1,55 @@
+/*
+ zip_unchange.c -- undo changes to all files in zip archive
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_unchange_all(zip_t *za)
+{
+ int ret;
+ zip_uint64_t i;
+
+ _zip_hash_revert(za->names);
+
+ ret = 0;
+ for (i=0; i<za->nentry; i++)
+ ret |= _zip_unchange(za, i, 1);
+
+ ret |= zip_unchange_archive(za);
+
+ return ret;
+}
diff --git a/src/Common/libzip/zip_unchange_archive.c b/src/Common/libzip/zip_unchange_archive.c
new file mode 100644
index 0000000..920255c
--- /dev/null
+++ b/src/Common/libzip/zip_unchange_archive.c
@@ -0,0 +1,52 @@
+/*
+ zip_unchange_archive.c -- undo global changes to ZIP archive
+ Copyright (C) 2006-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include <stdlib.h>
+
+#include "zipint.h"
+
+
+ZIP_EXTERN int
+zip_unchange_archive(zip_t *za)
+{
+ if (za->comment_changed) {
+ _zip_string_free(za->comment_changes);
+ za->comment_changes = NULL;
+ za->comment_changed = 0;
+ }
+
+ za->ch_flags = za->flags;
+
+ return 0;
+}
diff --git a/src/Common/libzip/zip_unchange_data.c b/src/Common/libzip/zip_unchange_data.c
new file mode 100644
index 0000000..839d9a3
--- /dev/null
+++ b/src/Common/libzip/zip_unchange_data.c
@@ -0,0 +1,55 @@
+/*
+ zip_unchange_data.c -- undo helper function
+ Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+void
+_zip_unchange_data(zip_entry_t *ze)
+{
+ if (ze->source) {
+ zip_source_free(ze->source);
+ ze->source = NULL;
+ }
+
+ if (ze->changes != NULL && (ze->changes->changed & ZIP_DIRENT_COMP_METHOD) && ze->changes->comp_method == ZIP_CM_REPLACED_DEFAULT) {
+ ze->changes->changed &= ~ZIP_DIRENT_COMP_METHOD;
+ if (ze->changes->changed == 0) {
+ _zip_dirent_free(ze->changes);
+ ze->changes = NULL;
+ }
+ }
+
+ ze->deleted = 0;
+}
+
diff --git a/src/Common/libzip/zip_utf-8.c b/src/Common/libzip/zip_utf-8.c
new file mode 100644
index 0000000..f38eea0
--- /dev/null
+++ b/src/Common/libzip/zip_utf-8.c
@@ -0,0 +1,249 @@
+/*
+ zip_utf-8.c -- UTF-8 support functions for libzip
+ Copyright (C) 2011-2014 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "zipint.h"
+
+#include <stdlib.h>
+
+
+static const zip_uint16_t _cp437_to_unicode[256] = {
+ /* 0x00 - 0x0F */
+ 0x2007, 0x263A, 0x263B, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022,
+ 0x25D8, 0x25CB, 0x25D9, 0x2642, 0x2640, 0x266A, 0x266B, 0x263C,
+
+ /* 0x10 - 0x1F */
+ 0x25BA, 0x25C4, 0x2195, 0x203C, 0x00B6, 0x00A7, 0x25AC, 0x21A8,
+ 0x2191, 0x2193, 0x2192, 0x2190, 0x221F, 0x2194, 0x25B2, 0x25BC,
+
+ /* 0x20 - 0x2F */
+ 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+ 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
+
+ /* 0x30 - 0x3F */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
+
+ /* 0x40 - 0x4F */
+ 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
+
+ /* 0x50 - 0x5F */
+ 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+ 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
+
+ /* 0x60 - 0x6F */
+ 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
+
+ /* 0x70 - 0x7F */
+ 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+ 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x2302,
+
+ /* 0x80 - 0x8F */
+ 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7,
+ 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
+
+ /* 0x90 - 0x9F */
+ 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9,
+ 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
+
+ /* 0xA0 - 0xAF */
+ 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA,
+ 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
+
+ /* 0xB0 - 0xBF */
+ 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+ 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
+
+ /* 0xC0 - 0xCF */
+ 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F,
+ 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
+
+ /* 0xD0 - 0xDF */
+ 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B,
+ 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
+
+ /* 0xE0 - 0xEF */
+ 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4,
+ 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
+
+ /* 0xF0 - 0xFF */
+ 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248,
+ 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
+};
+
+#define UTF_8_LEN_2_MASK 0xe0
+#define UTF_8_LEN_2_MATCH 0xc0
+#define UTF_8_LEN_3_MASK 0xf0
+#define UTF_8_LEN_3_MATCH 0xe0
+#define UTF_8_LEN_4_MASK 0xf8
+#define UTF_8_LEN_4_MATCH 0xf0
+#define UTF_8_CONTINUE_MASK 0xc0
+#define UTF_8_CONTINUE_MATCH 0x80
+
+
+zip_encoding_type_t
+_zip_guess_encoding(zip_string_t *str, zip_encoding_type_t expected_encoding)
+{
+ zip_encoding_type_t enc;
+ const zip_uint8_t *name;
+ zip_uint32_t i, j, ulen;
+
+ if (str == NULL)
+ return ZIP_ENCODING_ASCII;
+
+ name = str->raw;
+
+ if (str->encoding != ZIP_ENCODING_UNKNOWN)
+ enc = str->encoding;
+ else {
+ enc = ZIP_ENCODING_ASCII;
+ for (i=0; i<str->length; i++) {
+ if ((name[i] > 31 && name[i] < 128) || name[i] == '\r' || name[i] == '\n' || name[i] == '\t')
+ continue;
+
+ enc = ZIP_ENCODING_UTF8_GUESSED;
+ if ((name[i] & UTF_8_LEN_2_MASK) == UTF_8_LEN_2_MATCH)
+ ulen = 1;
+ else if ((name[i] & UTF_8_LEN_3_MASK) == UTF_8_LEN_3_MATCH)
+ ulen = 2;
+ else if ((name[i] & UTF_8_LEN_4_MASK) == UTF_8_LEN_4_MATCH)
+ ulen = 3;
+ else {
+ enc = ZIP_ENCODING_CP437;
+ break;
+ }
+
+ if (i + ulen >= str->length) {
+ enc = ZIP_ENCODING_CP437;
+ break;
+ }
+
+ for (j=1; j<=ulen; j++) {
+ if ((name[i+j] & UTF_8_CONTINUE_MASK) != UTF_8_CONTINUE_MATCH) {
+ enc = ZIP_ENCODING_CP437;
+ goto done;
+ }
+ }
+ i += ulen;
+ }
+ }
+
+done:
+ str->encoding = enc;
+
+ if (expected_encoding != ZIP_ENCODING_UNKNOWN) {
+ if (expected_encoding == ZIP_ENCODING_UTF8_KNOWN && enc == ZIP_ENCODING_UTF8_GUESSED)
+ str->encoding = enc = ZIP_ENCODING_UTF8_KNOWN;
+
+ if (expected_encoding != enc && enc != ZIP_ENCODING_ASCII)
+ return ZIP_ENCODING_ERROR;
+ }
+
+ return enc;
+}
+
+
+static zip_uint32_t
+_zip_unicode_to_utf8_len(zip_uint32_t codepoint)
+{
+ if (codepoint < 0x0080)
+ return 1;
+ if (codepoint < 0x0800)
+ return 2;
+ if (codepoint < 0x10000)
+ return 3;
+ return 4;
+}
+
+
+static zip_uint32_t
+_zip_unicode_to_utf8(zip_uint32_t codepoint, zip_uint8_t *buf)
+{
+ if (codepoint < 0x0080) {
+ buf[0] = codepoint & 0xff;
+ return 1;
+ }
+ if (codepoint < 0x0800) {
+ buf[0] = (zip_uint8_t)(UTF_8_LEN_2_MATCH | ((codepoint >> 6) & 0x1f));
+ buf[1] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | (codepoint & 0x3f));
+ return 2;
+ }
+ if (codepoint < 0x10000) {
+ buf[0] = (zip_uint8_t)(UTF_8_LEN_3_MATCH | ((codepoint >> 12) & 0x0f));
+ buf[1] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | ((codepoint >> 6) & 0x3f));
+ buf[2] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | (codepoint & 0x3f));
+ return 3;
+ }
+ buf[0] = (zip_uint8_t)(UTF_8_LEN_4_MATCH | ((codepoint >> 18) & 0x07));
+ buf[1] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | ((codepoint >> 12) & 0x3f));
+ buf[2] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | ((codepoint >> 6) & 0x3f));
+ buf[3] = (zip_uint8_t)(UTF_8_CONTINUE_MATCH | (codepoint & 0x3f));
+ return 4;
+}
+
+
+zip_uint8_t *
+_zip_cp437_to_utf8(const zip_uint8_t * const _cp437buf, zip_uint32_t len,
+ zip_uint32_t *utf8_lenp, zip_error_t *error)
+{
+ zip_uint8_t *cp437buf = (zip_uint8_t *)_cp437buf;
+ zip_uint8_t *utf8buf;
+ zip_uint32_t buflen, i, offset;
+
+ if (len == 0) {
+ if (utf8_lenp)
+ *utf8_lenp = 0;
+ return NULL;
+ }
+
+ buflen = 1;
+ for (i=0; i<len; i++)
+ buflen += _zip_unicode_to_utf8_len(_cp437_to_unicode[cp437buf[i]]);
+
+ if ((utf8buf=(zip_uint8_t*)malloc(buflen)) == NULL) {
+ zip_error_set(error, ZIP_ER_MEMORY, 0);
+ return NULL;
+ }
+
+ offset = 0;
+ for (i=0; i<len; i++)
+ offset += _zip_unicode_to_utf8(_cp437_to_unicode[cp437buf[i]],
+ utf8buf+offset);
+
+ utf8buf[buflen-1] = 0;
+ if (utf8_lenp)
+ *utf8_lenp = buflen-1;
+ return utf8buf;
+}
diff --git a/src/Common/libzip/zipconf.h b/src/Common/libzip/zipconf.h
new file mode 100644
index 0000000..3c506ae
--- /dev/null
+++ b/src/Common/libzip/zipconf.h
@@ -0,0 +1,121 @@
+#ifndef _HAD_ZIPCONF_H
+#define _HAD_ZIPCONF_H
+
+/*
+ zipconf.h -- platform specific include file
+
+ This file was generated automatically by CMake
+ based on ../cmake-zipconf.h.in.
+ */
+
+/* #undef HAVE_INTTYPES_H_LIBZIP */
+#define HAVE_STDINT_H_LIBZIP
+#define HAVE_SYS_TYPES_H_LIBZIP
+#define HAVE___INT8_LIBZIP
+#define HAVE_INT8_T_LIBZIP
+#define HAVE_UINT8_T_LIBZIP
+#define HAVE___INT16_LIBZIP
+#define HAVE_INT16_T_LIBZIP
+#define HAVE_UINT16_T_LIBZIP
+#define HAVE___INT32_LIBZIP
+#define HAVE_INT32_T_LIBZIP
+#define HAVE_UINT32_T_LIBZIP
+#define HAVE___INT64_LIBZIP
+#define HAVE_INT64_T_LIBZIP
+#define HAVE_UINT64_T_LIBZIP
+/* #undef HAVE_SSIZE_T_LIBZIP */
+#define SHORT_LIBZIP 2
+#define INT_LIBZIP 4
+#define LONG_LIBZIP 4
+#define LONG_LONG_LIBZIP 8
+
+#if defined(HAVE_STDINT_H_LIBZIP)
+#include <stdint.h>
+#elif defined(HAVE_INTTYPES_H_LIBZIP)
+#include <inttypes.h>
+#elif defined(HAVE_SYS_TYPES_H_LIBZIP)
+#include <sys/types.h>
+#endif
+
+#if defined(HAVE_INT8_T_LIBZIP)
+typedef int8_t zip_int8_t;
+#elif defined(HAVE___INT8_LIBZIP)
+typedef __int8 zip_int8_t;
+#else
+typedef signed char zip_int8_t;
+#endif
+#if defined(HAVE_UINT8_T_LIBZIP)
+typedef uint8_t zip_uint8_t;
+#elif defined(HAVE___INT8_LIBZIP)
+typedef unsigned __int8 zip_uint8_t;
+#else
+typedef unsigned char zip_uint8_t;
+#endif
+#if defined(HAVE_INT16_T_LIBZIP)
+typedef int16_t zip_int16_t;
+#elif defined(HAVE___INT16_LIBZIP)
+typedef __int16 zip_int16_t;
+#elif defined(SHORT_LIBZIP) && SHORT_LIBZIP == 2
+typedef signed short zip_int16_t;
+#endif
+#if defined(HAVE_UINT16_T_LIBZIP)
+typedef uint16_t zip_uint16_t;
+#elif defined(HAVE___INT16_LIBZIP)
+typedef unsigned __int16 zip_uint16_t;
+#elif defined(SHORT_LIBZIP) && SHORT_LIBZIP == 2
+typedef unsigned short zip_uint16_t;
+#endif
+#if defined(HAVE_INT32_T_LIBZIP)
+typedef int32_t zip_int32_t;
+#elif defined(HAVE___INT32_LIBZIP)
+typedef __int32 zip_int32_t;
+#elif defined(INT_LIBZIP) && INT_LIBZIP == 4
+typedef signed int zip_int32_t;
+#elif defined(LONG_LIBZIP) && LONG_LIBZIP == 4
+typedef signed long zip_int32_t;
+#endif
+#if defined(HAVE_UINT32_T_LIBZIP)
+typedef uint32_t zip_uint32_t;
+#elif defined(HAVE___INT32_LIBZIP)
+typedef unsigned __int32 zip_uint32_t;
+#elif defined(INT_LIBZIP) && INT_LIBZIP == 4
+typedef unsigned int zip_uint32_t;
+#elif defined(LONG_LIBZIP) && LONG_LIBZIP == 4
+typedef unsigned long zip_uint32_t;
+#endif
+#if defined(HAVE_INT64_T_LIBZIP)
+typedef int64_t zip_int64_t;
+#elif defined(HAVE___INT64_LIBZIP)
+typedef __int64 zip_int64_t;
+#elif defined(LONG_LIBZIP) && LONG_LIBZIP == 8
+typedef signed long zip_int64_t;
+#elif defined(LONG_LONG_LIBZIP) && LONG_LONG_LIBZIP == 8
+typedef signed long long zip_int64_t;
+#endif
+#if defined(HAVE_UINT64_T_LIBZIP)
+typedef uint64_t zip_uint64_t;
+#elif defined(HAVE___INT64_LIBZIP)
+typedef unsigned __int64 zip_uint64_t;
+#elif defined(LONG_LIBZIP) && LONG_LONG_LIBZIP == 8
+typedef unsigned long zip_uint64_t;
+#elif defined(LONG_LONG_LIBZIP) && LONG_LONG_LIBZIP == 8
+typedef unsigned long long zip_uint64_t;
+#endif
+
+#define ZIP_INT8_MIN -0x80
+#define ZIP_INT8_MAX 0x7f
+#define ZIP_UINT8_MAX 0xff
+
+#define ZIP_INT16_MIN -0x8000
+#define ZIP_INT16_MAX 0x7fff
+#define ZIP_UINT16_MAX 0xffff
+
+#define ZIP_INT32_MIN -0x80000000L
+#define ZIP_INT32_MAX 0x7fffffffL
+#define ZIP_UINT32_MAX 0xffffffffLU
+
+#define ZIP_INT64_MIN (-ZIP_INT64_MAX-1LL)
+#define ZIP_INT64_MAX 0x7fffffffffffffffLL
+#define ZIP_UINT64_MAX 0xffffffffffffffffULL
+
+#endif /* zipconf.h */
diff --git a/src/Common/libzip/zipint.h b/src/Common/libzip/zipint.h
new file mode 100644
index 0000000..6939d73
--- /dev/null
+++ b/src/Common/libzip/zipint.h
@@ -0,0 +1,465 @@
+#ifndef _HAD_ZIPINT_H
+#define _HAD_ZIPINT_H
+
+/*
+ zipint.h -- internal declarations.
+ Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "compat.h"
+
+#include <zlib.h>
+
+#ifndef _ZIP_COMPILING_DEPRECATED
+#define ZIP_DISABLE_DEPRECATED
+#endif
+
+#include "zip.h"
+
+#define CENTRAL_MAGIC "PK\1\2"
+#define LOCAL_MAGIC "PK\3\4"
+#define EOCD_MAGIC "PK\5\6"
+#define DATADES_MAGIC "PK\7\8"
+#define EOCD64LOC_MAGIC "PK\6\7"
+#define EOCD64_MAGIC "PK\6\6"
+#define CDENTRYSIZE 46u
+#define LENTRYSIZE 30
+#define MAXCOMLEN 65536
+#define MAXEXTLEN 65536
+#define EOCDLEN 22
+#define EOCD64LOCLEN 20
+#define EOCD64LEN 56
+#define CDBUFSIZE (MAXCOMLEN+EOCDLEN+EOCD64LOCLEN)
+#define BUFSIZE 8192
+#define EFZIP64SIZE 28
+
+#define ZIP_CM_REPLACED_DEFAULT (-2)
+
+#define ZIP_CM_IS_DEFAULT(x) ((x) == ZIP_CM_DEFAULT || (x) == ZIP_CM_REPLACED_DEFAULT)
+
+#define ZIP_EF_UTF_8_COMMENT 0x6375
+#define ZIP_EF_UTF_8_NAME 0x7075
+#define ZIP_EF_ZIP64 0x0001
+
+#define ZIP_EF_IS_INTERNAL(id) ((id) == ZIP_EF_UTF_8_COMMENT || (id) == ZIP_EF_UTF_8_NAME || (id) == ZIP_EF_ZIP64)
+
+/* according to unzip-6.0's zipinfo.c, this corresponds to a regular file with rw permissions for everyone */
+#define ZIP_EXT_ATTRIB_DEFAULT (0100666u<<16)
+/* according to unzip-6.0's zipinfo.c, this corresponds to a directory with rwx permissions for everyone */
+#define ZIP_EXT_ATTRIB_DEFAULT_DIR (0040777u<<16)
+
+
+#define ZIP_MAX(a, b) ((a) > (b) ? (a) : (b))
+#define ZIP_MIN(a, b) ((a) < (b) ? (a) : (b))
+
+/* This section contains API that won't materialize like this. It's
+ placed in the internal section, pending cleanup. */
+
+/* flags for compression and encryption sources */
+
+#define ZIP_CODEC_DECODE 0 /* decompress/decrypt (encode flag not set) */
+#define ZIP_CODEC_ENCODE 1 /* compress/encrypt */
+
+
+typedef zip_source_t *(*zip_compression_implementation)(zip_t *, zip_source_t *, zip_int32_t, int);
+typedef zip_source_t *(*zip_encryption_implementation)(zip_t *, zip_source_t *, zip_uint16_t, int, const char *);
+
+zip_compression_implementation _zip_get_compression_implementation(zip_int32_t);
+zip_encryption_implementation _zip_get_encryption_implementation(zip_uint16_t);
+
+
+
+/* This API is not final yet, but we need it internally, so it's private for now. */
+
+const zip_uint8_t *zip_get_extra_field_by_id(zip_t *, int, int, zip_uint16_t, int, zip_uint16_t *);
+
+/* This section contains API that is of limited use until support for
+ user-supplied compression/encryption implementation is finished.
+ Thus we will keep it private for now. */
+
+typedef zip_int64_t (*zip_source_layered_callback)(zip_source_t *, void *, void *, zip_uint64_t, enum zip_source_cmd);
+zip_source_t *zip_source_crc(zip_t *, zip_source_t *, int);
+zip_source_t *zip_source_deflate(zip_t *, zip_source_t *, zip_int32_t, int);
+zip_source_t *zip_source_layered(zip_t *, zip_source_t *, zip_source_layered_callback, void *);
+zip_source_t *zip_source_layered_create(zip_source_t *src, zip_source_layered_callback cb, void *ud, zip_error_t *error);
+zip_source_t *zip_source_pkware(zip_t *, zip_source_t *, zip_uint16_t, int, const char *);
+int zip_source_remove(zip_source_t *);
+zip_int64_t zip_source_supports(zip_source_t *src);
+zip_source_t *zip_source_window(zip_t *, zip_source_t *, zip_uint64_t, zip_uint64_t);
+
+
+/* error source for layered sources */
+
+enum zip_les { ZIP_LES_NONE, ZIP_LES_UPPER, ZIP_LES_LOWER, ZIP_LES_INVAL };
+
+/* directory entry: general purpose bit flags */
+
+#define ZIP_GPBF_ENCRYPTED 0x0001 /* is encrypted */
+#define ZIP_GPBF_DATA_DESCRIPTOR 0x0008 /* crc/size after file data */
+#define ZIP_GPBF_STRONG_ENCRYPTION 0x0040 /* uses strong encryption */
+#define ZIP_GPBF_ENCODING_UTF_8 0x0800 /* file name encoding is UTF-8 */
+
+
+/* extra fields */
+#define ZIP_EF_LOCAL ZIP_FL_LOCAL /* include in local header */
+#define ZIP_EF_CENTRAL ZIP_FL_CENTRAL /* include in central directory */
+#define ZIP_EF_BOTH (ZIP_EF_LOCAL|ZIP_EF_CENTRAL) /* include in both */
+
+#define ZIP_FL_FORCE_ZIP64 1024 /* force zip64 extra field (_zip_dirent_write) */
+
+#define ZIP_FL_ENCODING_ALL (ZIP_FL_ENC_GUESS|ZIP_FL_ENC_CP437|ZIP_FL_ENC_UTF_8)
+
+
+/* encoding type */
+enum zip_encoding_type {
+ ZIP_ENCODING_UNKNOWN, /* not yet analyzed */
+ ZIP_ENCODING_ASCII, /* plain ASCII */
+ ZIP_ENCODING_UTF8_KNOWN, /* is UTF-8 */
+ ZIP_ENCODING_UTF8_GUESSED, /* possibly UTF-8 */
+ ZIP_ENCODING_CP437, /* Code Page 437 */
+ ZIP_ENCODING_ERROR /* should be UTF-8 but isn't */
+};
+
+typedef enum zip_encoding_type zip_encoding_type_t;
+
+#ifndef ZIP_HASH_TABLE_SIZE
+#define ZIP_HASH_TABLE_SIZE 8192
+#endif
+
+struct zip_hash;
+
+typedef struct zip_cdir zip_cdir_t;
+typedef struct zip_dirent zip_dirent_t;
+typedef struct zip_entry zip_entry_t;
+typedef struct zip_extra_field zip_extra_field_t;
+typedef struct zip_string zip_string_t;
+typedef struct zip_buffer zip_buffer_t;
+typedef struct zip_hash zip_hash_t;
+
+/* zip archive, part of API */
+
+struct zip {
+ zip_source_t *src; /* data source for archive */
+ unsigned int open_flags; /* flags passed to zip_open */
+ zip_error_t error; /* error information */
+
+ unsigned int flags; /* archive global flags */
+ unsigned int ch_flags; /* changed archive global flags */
+
+ char *default_password; /* password used when no other supplied */
+
+ zip_string_t *comment_orig; /* archive comment */
+ zip_string_t *comment_changes; /* changed archive comment */
+ bool comment_changed; /* whether archive comment was changed */
+
+ zip_uint64_t nentry; /* number of entries */
+ zip_uint64_t nentry_alloc; /* number of entries allocated */
+ zip_entry_t *entry; /* entries */
+
+ unsigned int nopen_source; /* number of open sources using archive */
+ unsigned int nopen_source_alloc; /* number of sources allocated */
+ zip_source_t **open_source; /* open sources using archive */
+
+ zip_hash_t *names; /* hash table for name lookup */
+
+ char *tempdir; /* custom temp dir (needed e.g. for OS X sandboxing) */
+};
+
+/* file in zip archive, part of API */
+
+struct zip_file {
+ zip_t *za; /* zip archive containing this file */
+ zip_error_t error; /* error information */
+ bool eof;
+ zip_source_t *src; /* data source */
+};
+
+/* zip archive directory entry (central or local) */
+
+#define ZIP_DIRENT_COMP_METHOD 0x0001u
+#define ZIP_DIRENT_FILENAME 0x0002u
+#define ZIP_DIRENT_COMMENT 0x0004u
+#define ZIP_DIRENT_EXTRA_FIELD 0x0008u
+#define ZIP_DIRENT_ATTRIBUTES 0x0010u
+#define ZIP_DIRENT_LAST_MOD 0x0020u
+#define ZIP_DIRENT_ALL 0xffffu
+
+struct zip_dirent {
+ zip_uint32_t changed;
+ bool local_extra_fields_read; /* whether we already read in local header extra fields */
+ bool cloned; /* whether this instance is cloned, and thus shares non-changed strings */
+
+ zip_uint16_t version_madeby; /* (c) version of creator */
+ zip_uint16_t version_needed; /* (cl) version needed to extract */
+ zip_uint16_t bitflags; /* (cl) general purpose bit flag */
+ zip_int32_t comp_method; /* (cl) compression method used (uint16 and ZIP_CM_DEFAULT (-1)) */
+ time_t last_mod; /* (cl) time of last modification */
+ zip_uint32_t crc; /* (cl) CRC-32 of uncompressed data */
+ zip_uint64_t comp_size; /* (cl) size of compressed data */
+ zip_uint64_t uncomp_size; /* (cl) size of uncompressed data */
+ zip_string_t *filename; /* (cl) file name (NUL-terminated) */
+ zip_extra_field_t *extra_fields; /* (cl) extra fields, parsed */
+ zip_string_t *comment; /* (c) file comment */
+ zip_uint32_t disk_number; /* (c) disk number start */
+ zip_uint16_t int_attrib; /* (c) internal file attributes */
+ zip_uint32_t ext_attrib; /* (c) external file attributes */
+ zip_uint64_t offset; /* (c) offset of local header */
+};
+
+/* zip archive central directory */
+
+struct zip_cdir {
+ zip_entry_t *entry; /* directory entries */
+ zip_uint64_t nentry; /* number of entries */
+ zip_uint64_t nentry_alloc; /* number of entries allocated */
+
+ zip_uint64_t size; /* size of central directory */
+ zip_uint64_t offset; /* offset of central directory in file */
+ zip_string_t *comment; /* zip archive comment */
+};
+
+struct zip_extra_field {
+ zip_extra_field_t *next;
+ zip_flags_t flags; /* in local/central header */
+ zip_uint16_t id; /* header id */
+ zip_uint16_t size; /* data size */
+ zip_uint8_t *data;
+};
+
+enum zip_source_write_state {
+ ZIP_SOURCE_WRITE_CLOSED, /* write is not in progress */
+ ZIP_SOURCE_WRITE_OPEN, /* write is in progress */
+ ZIP_SOURCE_WRITE_FAILED, /* commit failed, only rollback allowed */
+ ZIP_SOURCE_WRITE_REMOVED /* file was removed */
+};
+typedef enum zip_source_write_state zip_source_write_state_t;
+
+struct zip_source {
+ zip_source_t *src;
+ union {
+ zip_source_callback f;
+ zip_source_layered_callback l;
+ } cb;
+ void *ud;
+ zip_error_t error;
+ zip_int64_t supports; /* supported commands */
+ unsigned int open_count; /* number of times source was opened (directly or as lower layer) */
+ zip_source_write_state_t write_state; /* whether source is open for writing */
+ bool source_closed; /* set if source archive is closed */
+ zip_t *source_archive; /* zip archive we're reading from, NULL if not from archive */
+ unsigned int refcount;
+};
+
+#define ZIP_SOURCE_IS_OPEN_READING(src) ((src)->open_count > 0)
+#define ZIP_SOURCE_IS_OPEN_WRITING(src) ((src)->write_state == ZIP_SOURCE_WRITE_OPEN)
+#define ZIP_SOURCE_IS_LAYERED(src) ((src)->src != NULL)
+
+/* entry in zip archive directory */
+
+struct zip_entry {
+ zip_dirent_t *orig;
+ zip_dirent_t *changes;
+ zip_source_t *source;
+ bool deleted;
+};
+
+
+/* file or archive comment, or filename */
+
+struct zip_string {
+ zip_uint8_t *raw; /* raw string */
+ zip_uint16_t length; /* length of raw string */
+ enum zip_encoding_type encoding; /* autorecognized encoding */
+ zip_uint8_t *converted; /* autoconverted string */
+ zip_uint32_t converted_length; /* length of converted */
+};
+
+
+/* bounds checked access to memory buffer */
+
+struct zip_buffer {
+ bool ok;
+ bool free_data;
+
+ zip_uint8_t *data;
+ zip_uint64_t size;
+ zip_uint64_t offset;
+};
+
+/* which files to write in which order */
+
+struct zip_filelist {
+ zip_uint64_t idx;
+/* TODO const char *name; */
+};
+
+typedef struct zip_filelist zip_filelist_t;
+
+
+extern const char * const _zip_err_str[];
+extern const int _zip_nerr_str;
+extern const int _zip_err_type[];
+
+
+#define ZIP_ENTRY_CHANGED(e, f) ((e)->changes && ((e)->changes->changed & (f)))
+
+#define ZIP_ENTRY_DATA_CHANGED(x) ((x)->source != NULL)
+
+#define ZIP_IS_RDONLY(za) ((za)->ch_flags & ZIP_AFL_RDONLY)
+
+
+zip_int64_t _zip_add_entry(zip_t *);
+
+zip_uint8_t *_zip_buffer_data(zip_buffer_t *buffer);
+bool _zip_buffer_eof(zip_buffer_t *buffer);
+void _zip_buffer_free(zip_buffer_t *buffer);
+zip_uint8_t *_zip_buffer_get(zip_buffer_t *buffer, zip_uint64_t length);
+zip_uint16_t _zip_buffer_get_16(zip_buffer_t *buffer);
+zip_uint32_t _zip_buffer_get_32(zip_buffer_t *buffer);
+zip_uint64_t _zip_buffer_get_64(zip_buffer_t *buffer);
+zip_uint8_t _zip_buffer_get_8(zip_buffer_t *buffer);
+zip_uint64_t _zip_buffer_left(zip_buffer_t *buffer);
+zip_buffer_t *_zip_buffer_new(zip_uint8_t *data, zip_uint64_t size);
+zip_buffer_t *_zip_buffer_new_from_source(zip_source_t *src, zip_uint64_t size, zip_uint8_t *buf, zip_error_t *error);
+zip_uint64_t _zip_buffer_offset(zip_buffer_t *buffer);
+bool _zip_buffer_ok(zip_buffer_t *buffer);
+int _zip_buffer_put(zip_buffer_t *buffer, const void *src, size_t length);
+int _zip_buffer_put_16(zip_buffer_t *buffer, zip_uint16_t i);
+int _zip_buffer_put_32(zip_buffer_t *buffer, zip_uint32_t i);
+int _zip_buffer_put_64(zip_buffer_t *buffer, zip_uint64_t i);
+int _zip_buffer_put_8(zip_buffer_t *buffer, zip_uint8_t i);
+int _zip_buffer_skip(zip_buffer_t *buffer, zip_uint64_t length);
+int _zip_buffer_set_offset(zip_buffer_t *buffer, zip_uint64_t offset);
+zip_uint64_t _zip_buffer_size(zip_buffer_t *buffer);
+
+int _zip_cdir_compute_crc(zip_t *, uLong *);
+void _zip_cdir_free(zip_cdir_t *);
+zip_cdir_t *_zip_cdir_new(zip_uint64_t, zip_error_t *);
+zip_int64_t _zip_cdir_write(zip_t *za, const zip_filelist_t *filelist, zip_uint64_t survivors);
+void _zip_deregister_source(zip_t *za, zip_source_t *src);
+
+zip_dirent_t *_zip_dirent_clone(const zip_dirent_t *);
+void _zip_dirent_free(zip_dirent_t *);
+void _zip_dirent_finalize(zip_dirent_t *);
+void _zip_dirent_init(zip_dirent_t *);
+bool _zip_dirent_needs_zip64(const zip_dirent_t *, zip_flags_t);
+zip_dirent_t *_zip_dirent_new(void);
+zip_int64_t _zip_dirent_read(zip_dirent_t *zde, zip_source_t *src, zip_buffer_t *buffer, bool local, zip_error_t *error);
+zip_int32_t _zip_dirent_size(zip_source_t *src, zip_uint16_t, zip_error_t *);
+int _zip_dirent_write(zip_t *za, zip_dirent_t *dirent, zip_flags_t flags);
+
+zip_extra_field_t *_zip_ef_clone(const zip_extra_field_t *, zip_error_t *);
+zip_extra_field_t *_zip_ef_delete_by_id(zip_extra_field_t *, zip_uint16_t, zip_uint16_t, zip_flags_t);
+void _zip_ef_free(zip_extra_field_t *);
+const zip_uint8_t *_zip_ef_get_by_id(const zip_extra_field_t *, zip_uint16_t *, zip_uint16_t, zip_uint16_t, zip_flags_t, zip_error_t *);
+zip_extra_field_t *_zip_ef_merge(zip_extra_field_t *, zip_extra_field_t *);
+zip_extra_field_t *_zip_ef_new(zip_uint16_t, zip_uint16_t, const zip_uint8_t *, zip_flags_t);
+bool _zip_ef_parse(const zip_uint8_t *, zip_uint16_t, zip_flags_t, zip_extra_field_t **, zip_error_t *);
+zip_extra_field_t *_zip_ef_remove_internal(zip_extra_field_t *);
+zip_uint16_t _zip_ef_size(const zip_extra_field_t *, zip_flags_t);
+int _zip_ef_write(zip_t *za, const zip_extra_field_t *ef, zip_flags_t flags);
+
+void _zip_entry_finalize(zip_entry_t *);
+void _zip_entry_init(zip_entry_t *);
+
+void _zip_error_clear(zip_error_t *);
+void _zip_error_get(const zip_error_t *, int *, int *);
+
+void _zip_error_copy(zip_error_t *dst, const zip_error_t *src);
+void _zip_error_set_from_source(zip_error_t *, zip_source_t *);
+
+const zip_uint8_t *_zip_extract_extra_field_by_id(zip_error_t *, zip_uint16_t, int, const zip_uint8_t *, zip_uint16_t, zip_uint16_t *);
+
+int _zip_file_extra_field_prepare_for_change(zip_t *, zip_uint64_t);
+int _zip_file_fillbuf(void *, size_t, zip_file_t *);
+zip_uint64_t _zip_file_get_offset(const zip_t *, zip_uint64_t, zip_error_t *);
+
+int _zip_filerange_crc(zip_source_t *src, zip_uint64_t offset, zip_uint64_t length, uLong *crcp, zip_error_t *error);
+
+zip_dirent_t *_zip_get_dirent(zip_t *, zip_uint64_t, zip_flags_t, zip_error_t *);
+
+enum zip_encoding_type _zip_guess_encoding(zip_string_t *, enum zip_encoding_type);
+zip_uint8_t *_zip_cp437_to_utf8(const zip_uint8_t * const, zip_uint32_t, zip_uint32_t *, zip_error_t *);
+
+bool _zip_hash_add(zip_hash_t *hash, const zip_uint8_t *name, zip_uint64_t index, zip_flags_t flags, zip_error_t *error);
+bool _zip_hash_delete(zip_hash_t *hash, const zip_uint8_t *key, zip_error_t *error);
+void _zip_hash_free(zip_hash_t *hash);
+zip_int64_t _zip_hash_lookup(zip_hash_t *hash, const zip_uint8_t *name, zip_flags_t flags, zip_error_t *error);
+zip_hash_t *_zip_hash_new(zip_uint16_t hash_size, zip_error_t *error);
+void _zip_hash_revert(zip_hash_t *hash);
+
+zip_t *_zip_open(zip_source_t *, unsigned int, zip_error_t *);
+
+int _zip_read(zip_source_t *src, zip_uint8_t *data, zip_uint64_t length, zip_error_t *error);
+int _zip_read_at_offset(zip_source_t *src, zip_uint64_t offset, unsigned char *b, size_t length, zip_error_t *error);
+zip_uint8_t *_zip_read_data(zip_buffer_t *buffer, zip_source_t *src, size_t length, bool nulp, zip_error_t *error);
+int _zip_read_local_ef(zip_t *, zip_uint64_t);
+zip_string_t *_zip_read_string(zip_buffer_t *buffer, zip_source_t *src, zip_uint16_t lenght, bool nulp, zip_error_t *error);
+int _zip_register_source(zip_t *za, zip_source_t *src);
+
+void _zip_set_open_error(int *zep, const zip_error_t *err, int ze);
+
+zip_int64_t _zip_source_call(zip_source_t *src, void *data, zip_uint64_t length, zip_source_cmd_t command);
+zip_source_t *_zip_source_file_or_p(const char *, FILE *, zip_uint64_t, zip_int64_t, const zip_stat_t *, zip_error_t *error);
+void _zip_source_invalidate(zip_source_t *src);
+zip_source_t *_zip_source_new(zip_error_t *error);
+int _zip_source_set_source_archive(zip_source_t *, zip_t *);
+zip_source_t *_zip_source_window_new(zip_source_t *src, zip_uint64_t start, zip_uint64_t length, zip_stat_t *st, zip_error_t *error);
+zip_source_t *_zip_source_zip_new(zip_t *, zip_t *, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_uint64_t, const char *);
+
+int _zip_stat_merge(zip_stat_t *dst, const zip_stat_t *src, zip_error_t *error);
+int _zip_string_equal(const zip_string_t *, const zip_string_t *);
+void _zip_string_free(zip_string_t *);
+zip_uint32_t _zip_string_crc32(const zip_string_t *);
+const zip_uint8_t *_zip_string_get(zip_string_t *, zip_uint32_t *, zip_flags_t, zip_error_t *);
+zip_uint16_t _zip_string_length(const zip_string_t *);
+zip_string_t *_zip_string_new(const zip_uint8_t *, zip_uint16_t, zip_flags_t, zip_error_t *);
+int _zip_string_write(zip_t *za, const zip_string_t *string);
+
+int _zip_changed(const zip_t *, zip_uint64_t *);
+const char *_zip_get_name(zip_t *, zip_uint64_t, zip_flags_t, zip_error_t *);
+int _zip_local_header_read(zip_t *, int);
+void *_zip_memdup(const void *, size_t, zip_error_t *);
+zip_int64_t _zip_name_locate(zip_t *, const char *, zip_flags_t, zip_error_t *);
+zip_t *_zip_new(zip_error_t *);
+
+zip_int64_t _zip_file_replace(zip_t *, zip_uint64_t, const char *, zip_source_t *, zip_flags_t);
+int _zip_set_name(zip_t *, zip_uint64_t, const char *, zip_flags_t);
+void _zip_u2d_time(time_t, zip_uint16_t *, zip_uint16_t *);
+int _zip_unchange(zip_t *, zip_uint64_t, int);
+void _zip_unchange_data(zip_entry_t *);
+int _zip_write(zip_t *za, const void *data, zip_uint64_t length);
+
+#endif /* zipint.h */
diff --git a/src/Common/libzip/zipwin32.h b/src/Common/libzip/zipwin32.h
new file mode 100644
index 0000000..60f8d0c
--- /dev/null
+++ b/src/Common/libzip/zipwin32.h
@@ -0,0 +1,82 @@
+#ifndef _HAD_ZIPWIN32_H
+#define _HAD_ZIPWIN32_H
+
+/*
+ zipwin32.h -- internal declarations for Windows.
+ Copyright (C) 1999-2015 Dieter Baron and Thomas Klausner
+
+ This file is part of libzip, a library to manipulate ZIP archives.
+ The authors can be contacted at <libzip@nih.at>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ 3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* 0x0501 => Windows XP; needs to be at least this value because of GetFileSizeEx */
+#define _WIN32_WINNT 0x0501
+#include <windows.h>
+
+/* context for Win32 source */
+
+struct _zip_source_win32_file_ops;
+
+struct _zip_source_win32_read_file {
+ zip_error_t error; /* last error information */
+ zip_int64_t supports;
+
+ /* operations */
+ struct _zip_source_win32_file_ops *ops;
+
+ /* reading */
+ void *fname; /* name of file to read from - ANSI (char *) or Unicode (wchar_t *) */
+ void *h; /* HANDLE for file to read from */
+ int closep; /* whether to close f on ZIP_CMD_FREE */
+ struct zip_stat st; /* stat information passed in */
+ zip_uint64_t start; /* start offset of data to read */
+ zip_uint64_t end; /* end offset of data to read, 0 for up to EOF */
+ zip_uint64_t current; /* current offset */
+
+ /* writing */
+ void *tmpname; /* name of temp file - ANSI (char *) or Unicode (wchar_t *) */
+ void *hout; /* HANDLE for output file */
+};
+
+typedef struct _zip_source_win32_read_file _zip_source_win32_read_file_t;
+
+/* internal operations for Win32 source */
+
+struct _zip_source_win32_file_ops {
+ void *(*op_strdup)(const void *);
+ void *(*op_open)(_zip_source_win32_read_file_t *);
+ void *(*op_create_temp)(_zip_source_win32_read_file_t *, void **, zip_uint32_t, PSECURITY_ATTRIBUTES);
+ int (*op_rename_temp)(_zip_source_win32_read_file_t *);
+ int (*op_remove)(const void *);
+};
+
+typedef struct _zip_source_win32_file_ops _zip_source_win32_file_ops_t;
+
+zip_source_t *_zip_source_win32_handle_or_name(const void *, void *, zip_uint64_t, zip_int64_t, int, const zip_stat_t *, _zip_source_win32_file_ops_t *, zip_error_t *);
+
+#endif /* zipwin32.h */
diff --git a/src/Common/zlib/README b/src/Common/zlib/README
new file mode 100644
index 0000000..5ca9d12
--- /dev/null
+++ b/src/Common/zlib/README
@@ -0,0 +1,115 @@
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.8 is a general purpose data compression library. All the code is
+thread safe. The data format used by the zlib library is described by RFCs
+(Request for Comments) 1950 to 1952 in the files
+http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
+rfc1952 (gzip format).
+
+All functions of the compression library are documented in the file zlib.h
+(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
+of the library is given in the file test/example.c which also tests that
+the library is working correctly. Another example is given in the file
+test/minigzip.c. The compression library itself is composed of all source
+files in the root directory.
+
+To compile all files and run the test program, follow the instructions given at
+the top of Makefile.in. In short "./configure; make test", and if that goes
+well, "make install" should work for most flavors of Unix. For Windows, use
+one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
+make_vms.com.
+
+Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
+<info@winimage.com> for the Windows DLL version. The zlib home page is
+http://zlib.net/ . Before reporting a problem, please check this site to
+verify that you have the latest version of zlib; otherwise get the latest
+version and check whether the problem still exists or not.
+
+PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
+
+Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
+issue of Dr. Dobb's Journal; a copy of the article is available at
+http://marknelson.us/1997/01/01/zlib-engine/ .
+
+The changes made in version 1.2.8 are documented in the file ChangeLog.
+
+Unsupported third party contributions are provided in directory contrib/ .
+
+zlib is available in Java using the java.util.zip package, documented at
+http://java.sun.com/developer/technicalArticles/Programming/compression/ .
+
+A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
+at CPAN (Comprehensive Perl Archive Network) sites, including
+http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
+
+A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
+available in Python 1.5 and later versions, see
+http://docs.python.org/library/zlib.html .
+
+zlib is built into tcl: http://wiki.tcl.tk/4610 .
+
+An experimental package to read and write files in .zip format, written on top
+of zlib by Gilles Vollant <info@winimage.com>, is available in the
+contrib/minizip directory of zlib.
+
+
+Notes for some targets:
+
+- For Windows DLL versions, please see win32/DLL_FAQ.txt
+
+- For 64-bit Irix, deflate.c must be compiled without any optimization. With
+ -O, one libpng test fails. The test works in 32 bit mode (with the -n32
+ compiler flag). The compiler bug has been reported to SGI.
+
+- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
+ when compiled with cc.
+
+- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
+ necessary to get gzprintf working correctly. This is done by configure.
+
+- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
+ other compilers. Use "make test" to check your compiler.
+
+- gzdopen is not supported on RISCOS or BEOS.
+
+- For PalmOs, see http://palmzlib.sourceforge.net/
+
+
+Acknowledgments:
+
+ The deflate format used by zlib was defined by Phil Katz. The deflate and
+ zlib specifications were written by L. Peter Deutsch. Thanks to all the
+ people who reported problems and suggested various improvements in zlib; they
+ are too numerous to cite here.
+
+Copyright notice:
+
+ (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+If you use the zlib library in a product, we would appreciate *not* receiving
+lengthy legal documents to sign. The sources are provided for free but without
+warranty of any kind. The library has been entirely written by Jean-loup
+Gailly and Mark Adler; it does not include third-party code.
+
+If you redistribute modified sources, we would appreciate that you include in
+the file ChangeLog history information documenting your changes. Please read
+the FAQ for more information on the distribution of modified source versions.
diff --git a/src/Common/zlib/adler32.c b/src/Common/zlib/adler32.c
new file mode 100644
index 0000000..a868f07
--- /dev/null
+++ b/src/Common/zlib/adler32.c
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521 /* largest prime smaller than 65536 */
+#define NMAX 5552
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
+
+#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
+#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
+#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
+#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
+#define DO16(buf) DO8(buf,0); DO8(buf,8);
+
+/* use NO_DIVIDE if your processor does not do division in hardware --
+ try it both ways to see which is faster */
+#ifdef NO_DIVIDE
+/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
+ (thank you to John Reiser for pointing this out) */
+# define CHOP(a) \
+ do { \
+ unsigned long tmp = a >> 16; \
+ a &= 0xffffUL; \
+ a += (tmp << 4) - tmp; \
+ } while (0)
+# define MOD28(a) \
+ do { \
+ CHOP(a); \
+ if (a >= BASE) a -= BASE; \
+ } while (0)
+# define MOD(a) \
+ do { \
+ CHOP(a); \
+ MOD28(a); \
+ } while (0)
+# define MOD63(a) \
+ do { /* this assumes a is not negative */ \
+ z_off64_t tmp = a >> 32; \
+ a &= 0xffffffffL; \
+ a += (tmp << 8) - (tmp << 5) + tmp; \
+ tmp = a >> 16; \
+ a &= 0xffffL; \
+ a += (tmp << 4) - tmp; \
+ tmp = a >> 16; \
+ a &= 0xffffL; \
+ a += (tmp << 4) - tmp; \
+ if (a >= BASE) a -= BASE; \
+ } while (0)
+#else
+# define MOD(a) a %= BASE
+# define MOD28(a) a %= BASE
+# define MOD63(a) a %= BASE
+#endif
+
+/* ========================================================================= */
+uLong ZEXPORT adler32(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt len;
+{
+ unsigned long sum2;
+ unsigned n;
+
+ /* split Adler-32 into component sums */
+ sum2 = (adler >> 16) & 0xffff;
+ adler &= 0xffff;
+
+ /* in case user likes doing a byte at a time, keep it fast */
+ if (len == 1) {
+ adler += buf[0];
+ if (adler >= BASE)
+ adler -= BASE;
+ sum2 += adler;
+ if (sum2 >= BASE)
+ sum2 -= BASE;
+ return adler | (sum2 << 16);
+ }
+
+ /* initial Adler-32 value (deferred check for len == 1 speed) */
+ if (buf == Z_NULL)
+ return 1L;
+
+ /* in case short lengths are provided, keep it somewhat fast */
+ if (len < 16) {
+ while (len--) {
+ adler += *buf++;
+ sum2 += adler;
+ }
+ if (adler >= BASE)
+ adler -= BASE;
+ MOD28(sum2); /* only added so many BASE's */
+ return adler | (sum2 << 16);
+ }
+
+ /* do length NMAX blocks -- requires just one modulo operation */
+ while (len >= NMAX) {
+ len -= NMAX;
+ n = NMAX / 16; /* NMAX is divisible by 16 */
+ do {
+ DO16(buf); /* 16 sums unrolled */
+ buf += 16;
+ } while (--n);
+ MOD(adler);
+ MOD(sum2);
+ }
+
+ /* do remaining bytes (less than NMAX, still just one modulo) */
+ if (len) { /* avoid modulos if none remaining */
+ while (len >= 16) {
+ len -= 16;
+ DO16(buf);
+ buf += 16;
+ }
+ while (len--) {
+ adler += *buf++;
+ sum2 += adler;
+ }
+ MOD(adler);
+ MOD(sum2);
+ }
+
+ /* return recombined sums */
+ return adler | (sum2 << 16);
+}
+
+/* ========================================================================= */
+local uLong adler32_combine_(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off64_t len2;
+{
+ unsigned long sum1;
+ unsigned long sum2;
+ unsigned rem;
+
+ /* for negative len, return invalid adler32 as a clue for debugging */
+ if (len2 < 0)
+ return 0xffffffffUL;
+
+ /* the derivation of this formula is left as an exercise for the reader */
+ MOD63(len2); /* assumes len2 >= 0 */
+ rem = (unsigned)len2;
+ sum1 = adler1 & 0xffff;
+ sum2 = rem * sum1;
+ MOD(sum2);
+ sum1 += (adler2 & 0xffff) + BASE - 1;
+ sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
+ if (sum1 >= BASE) sum1 -= BASE;
+ if (sum1 >= BASE) sum1 -= BASE;
+ if (sum2 >= (BASE << 1)) sum2 -= (BASE << 1);
+ if (sum2 >= BASE) sum2 -= BASE;
+ return sum1 | (sum2 << 16);
+}
+
+/* ========================================================================= */
+uLong ZEXPORT adler32_combine(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
+
+uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
+ uLong adler1;
+ uLong adler2;
+ z_off64_t len2;
+{
+ return adler32_combine_(adler1, adler2, len2);
+}
diff --git a/src/Common/zlib/compress.c b/src/Common/zlib/compress.c
new file mode 100644
index 0000000..6e97626
--- /dev/null
+++ b/src/Common/zlib/compress.c
@@ -0,0 +1,80 @@
+/* compress.c -- compress a memory buffer
+ * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+ Compresses the source buffer into the destination buffer. The level
+ parameter has the same meaning as in deflateInit. sourceLen is the byte
+ length of the source buffer. Upon entry, destLen is the total size of the
+ destination buffer, which must be at least 0.1% larger than sourceLen plus
+ 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
+
+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+ Z_STREAM_ERROR if the level parameter is invalid.
+*/
+int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+ int level;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+#endif
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ err = deflateInit(&stream, level);
+ if (err != Z_OK) return err;
+
+ err = deflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ deflateEnd(&stream);
+ return err == Z_OK ? Z_BUF_ERROR : err;
+ }
+ *destLen = stream.total_out;
+
+ err = deflateEnd(&stream);
+ return err;
+}
+
+/* ===========================================================================
+ */
+int ZEXPORT compress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
+}
+
+/* ===========================================================================
+ If the default memLevel or windowBits for deflateInit() is changed, then
+ this function needs to be updated.
+ */
+uLong ZEXPORT compressBound (sourceLen)
+ uLong sourceLen;
+{
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13;
+}
diff --git a/src/Common/zlib/crc32.c b/src/Common/zlib/crc32.c
new file mode 100644
index 0000000..979a719
--- /dev/null
+++ b/src/Common/zlib/crc32.c
@@ -0,0 +1,425 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
+ * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
+ * tables for updating the shift register in one step with three exclusive-ors
+ * instead of four steps with four exclusive-ors. This results in about a
+ * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ */
+
+/* @(#) $Id$ */
+
+/*
+ Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
+ protection on the static variables used to control the first-use generation
+ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+ first call get_crc_table() to initialize the tables before allowing more than
+ one thread to use crc32().
+
+ DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ */
+
+#ifdef MAKECRCH
+# include <stdio.h>
+# ifndef DYNAMIC_CRC_TABLE
+# define DYNAMIC_CRC_TABLE
+# endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h" /* for STDC and FAR definitions */
+
+#define local static
+
+/* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+# define BYFOUR
+#endif
+#ifdef BYFOUR
+ local unsigned long crc32_little OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+ local unsigned long crc32_big OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+# define TBLS 8
+#else
+# define TBLS 1
+#endif /* BYFOUR */
+
+/* Local functions for crc concatenation */
+local unsigned long gf2_matrix_times OF((unsigned long *mat,
+ unsigned long vec));
+local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local volatile int crc_table_empty = 1;
+local z_crc_t FAR crc_table[TBLS][256];
+local void make_crc_table OF((void));
+#ifdef MAKECRCH
+ local void write_table OF((FILE *, const z_crc_t FAR *));
+#endif /* MAKECRCH */
+/*
+ Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
+ x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
+
+ Polynomials over GF(2) are represented in binary, one bit per coefficient,
+ with the lowest powers in the most significant bit. Then adding polynomials
+ is just exclusive-or, and multiplying a polynomial by x is a right shift by
+ one. If we call the above polynomial p, and represent a byte as the
+ polynomial q, also with the lowest power in the most significant bit (so the
+ byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+ where a mod b means the remainder after dividing a by b.
+
+ This calculation is done using the shift-register method of multiplying and
+ taking the remainder. The register is initialized to zero, and for each
+ incoming bit, x^32 is added mod p to the register if the bit is a one (where
+ x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
+ x (which is shifting right by one and adding x^32 mod p if the bit shifted
+ out is a one). We start with the highest power (least significant bit) of
+ q and repeat for all eight bits of q.
+
+ The first table is simply the CRC of all possible eight bit values. This is
+ all the information needed to generate CRCs on data a byte at a time for all
+ combinations of CRC register values and incoming bytes. The remaining tables
+ allow for word-at-a-time CRC calculation for both big-endian and little-
+ endian machines, where a word is four bytes.
+*/
+local void make_crc_table()
+{
+ z_crc_t c;
+ int n, k;
+ z_crc_t poly; /* polynomial exclusive-or pattern */
+ /* terms of polynomial defining this crc (except x^32): */
+ static volatile int first = 1; /* flag to limit concurrent making */
+ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+
+ /* See if another task is already doing this (not thread-safe, but better
+ than nothing -- significantly reduces duration of vulnerability in
+ case the advice about DYNAMIC_CRC_TABLE is ignored) */
+ if (first) {
+ first = 0;
+
+ /* make exclusive-or pattern from polynomial (0xedb88320UL) */
+ poly = 0;
+ for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+ poly |= (z_crc_t)1 << (31 - p[n]);
+
+ /* generate a crc for every 8-bit value */
+ for (n = 0; n < 256; n++) {
+ c = (z_crc_t)n;
+ for (k = 0; k < 8; k++)
+ c = c & 1 ? poly ^ (c >> 1) : c >> 1;
+ crc_table[0][n] = c;
+ }
+
+#ifdef BYFOUR
+ /* generate crc for each value followed by one, two, and three zeros,
+ and then the byte reversal of those as well as the first table */
+ for (n = 0; n < 256; n++) {
+ c = crc_table[0][n];
+ crc_table[4][n] = ZSWAP32(c);
+ for (k = 1; k < 4; k++) {
+ c = crc_table[0][c & 0xff] ^ (c >> 8);
+ crc_table[k][n] = c;
+ crc_table[k + 4][n] = ZSWAP32(c);
+ }
+ }
+#endif /* BYFOUR */
+
+ crc_table_empty = 0;
+ }
+ else { /* not first */
+ /* wait for the other guy to finish (not efficient, but rare) */
+ while (crc_table_empty)
+ ;
+ }
+
+#ifdef MAKECRCH
+ /* write out CRC tables to crc32.h */
+ {
+ FILE *out;
+
+ out = fopen("crc32.h", "w");
+ if (out == NULL) return;
+ fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+ fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+ fprintf(out, "local const z_crc_t FAR ");
+ fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
+ write_table(out, crc_table[0]);
+# ifdef BYFOUR
+ fprintf(out, "#ifdef BYFOUR\n");
+ for (k = 1; k < 8; k++) {
+ fprintf(out, " },\n {\n");
+ write_table(out, crc_table[k]);
+ }
+ fprintf(out, "#endif\n");
+# endif /* BYFOUR */
+ fprintf(out, " }\n};\n");
+ fclose(out);
+ }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+local void write_table(out, table)
+ FILE *out;
+ const z_crc_t FAR *table;
+{
+ int n;
+
+ for (n = 0; n < 256; n++)
+ fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
+ (unsigned long)(table[n]),
+ n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+}
+#endif /* MAKECRCH */
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+ return (const z_crc_t FAR *)crc_table;
+}
+
+/* ========================================================================= */
+#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
+#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ if (buf == Z_NULL) return 0UL;
+
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+
+#ifdef BYFOUR
+ if (sizeof(void *) == sizeof(ptrdiff_t)) {
+ z_crc_t endian;
+
+ endian = 1;
+ if (*((unsigned char *)(&endian)))
+ return crc32_little(crc, buf, len);
+ else
+ return crc32_big(crc, buf, len);
+ }
+#endif /* BYFOUR */
+ crc = crc ^ 0xffffffffUL;
+ while (len >= 8) {
+ DO8;
+ len -= 8;
+ }
+ if (len) do {
+ DO1;
+ } while (--len);
+ return crc ^ 0xffffffffUL;
+}
+
+#ifdef BYFOUR
+
+/* ========================================================================= */
+#define DOLIT4 c ^= *buf4++; \
+ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
+ crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
+#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+
+/* ========================================================================= */
+local unsigned long crc32_little(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = (z_crc_t)crc;
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ while (len >= 32) {
+ DOLIT32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOLIT4;
+ len -= 4;
+ }
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)c;
+}
+
+/* ========================================================================= */
+#define DOBIG4 c ^= *++buf4; \
+ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+
+/* ========================================================================= */
+local unsigned long crc32_big(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = ZSWAP32((z_crc_t)crc);
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ buf4--;
+ while (len >= 32) {
+ DOBIG32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOBIG4;
+ len -= 4;
+ }
+ buf4++;
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)(ZSWAP32(c));
+}
+
+#endif /* BYFOUR */
+
+#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
+
+/* ========================================================================= */
+local unsigned long gf2_matrix_times(mat, vec)
+ unsigned long *mat;
+ unsigned long vec;
+{
+ unsigned long sum;
+
+ sum = 0;
+ while (vec) {
+ if (vec & 1)
+ sum ^= *mat;
+ vec >>= 1;
+ mat++;
+ }
+ return sum;
+}
+
+/* ========================================================================= */
+local void gf2_matrix_square(square, mat)
+ unsigned long *square;
+ unsigned long *mat;
+{
+ int n;
+
+ for (n = 0; n < GF2_DIM; n++)
+ square[n] = gf2_matrix_times(mat, mat[n]);
+}
+
+/* ========================================================================= */
+local uLong crc32_combine_(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ int n;
+ unsigned long row;
+ unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
+ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
+
+ /* degenerate case (also disallow negative lengths) */
+ if (len2 <= 0)
+ return crc1;
+
+ /* put operator for one zero bit in odd */
+ odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
+ row = 1;
+ for (n = 1; n < GF2_DIM; n++) {
+ odd[n] = row;
+ row <<= 1;
+ }
+
+ /* put operator for two zero bits in even */
+ gf2_matrix_square(even, odd);
+
+ /* put operator for four zero bits in odd */
+ gf2_matrix_square(odd, even);
+
+ /* apply len2 zeros to crc1 (first square will put the operator for one
+ zero byte, eight zero bits, in even) */
+ do {
+ /* apply zeros operator for this bit of len2 */
+ gf2_matrix_square(even, odd);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(even, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ if (len2 == 0)
+ break;
+
+ /* another iteration of the loop with odd and even swapped */
+ gf2_matrix_square(odd, even);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(odd, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ } while (len2 != 0);
+
+ /* return combined crc */
+ crc1 ^= crc2;
+ return crc1;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
+
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
diff --git a/src/Common/zlib/crc32.h b/src/Common/zlib/crc32.h
new file mode 100644
index 0000000..9e0c778
--- /dev/null
+++ b/src/Common/zlib/crc32.h
@@ -0,0 +1,441 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[TBLS][256] =
+{
+ {
+ 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+ 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+ 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+ 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+ 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+ 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+ 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+ 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+ 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+ 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+ 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+ 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+ 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+ 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+ 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+ 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+ 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+ 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+ 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+ 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+ 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+ 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+ 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+ 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+ 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+ 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+ 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+ 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+ 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+ 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+ 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+ 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+ 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+ 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+ 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+ 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+ 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+ 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+ 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+ 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+ 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+ 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+ 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+ 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+ 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+ 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+ 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+ 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+ 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+ 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+ 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+ 0x2d02ef8dUL
+#ifdef BYFOUR
+ },
+ {
+ 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+ 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+ 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+ 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+ 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+ 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+ 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+ 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+ 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+ 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+ 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+ 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+ 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+ 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+ 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+ 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+ 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+ 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+ 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+ 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+ 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+ 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+ 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+ 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+ 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+ 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+ 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+ 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+ 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+ 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+ 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+ 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+ 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+ 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+ 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+ 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+ 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+ 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+ 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+ 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+ 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+ 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+ 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+ 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+ 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+ 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+ 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+ 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+ 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+ 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+ 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+ 0x9324fd72UL
+ },
+ {
+ 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+ 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+ 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+ 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+ 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+ 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+ 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+ 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+ 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+ 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+ 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+ 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+ 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+ 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+ 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+ 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+ 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+ 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+ 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+ 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+ 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+ 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+ 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+ 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+ 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+ 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+ 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+ 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+ 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+ 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+ 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+ 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+ 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+ 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+ 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+ 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+ 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+ 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+ 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+ 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+ 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+ 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+ 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+ 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+ 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+ 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+ 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+ 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+ 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+ 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+ 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+ 0xbe9834edUL
+ },
+ {
+ 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+ 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+ 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+ 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+ 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+ 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+ 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+ 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+ 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+ 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+ 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+ 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+ 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+ 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+ 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+ 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+ 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+ 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+ 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+ 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+ 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+ 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+ 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+ 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+ 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+ 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+ 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+ 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+ 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+ 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+ 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+ 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+ 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+ 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+ 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+ 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+ 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+ 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+ 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+ 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+ 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+ 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+ 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+ 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+ 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+ 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+ 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+ 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+ 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+ 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+ 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+ 0xde0506f1UL
+ },
+ {
+ 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+ 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+ 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+ 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+ 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+ 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+ 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+ 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+ 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+ 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+ 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+ 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+ 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+ 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+ 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+ 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+ 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+ 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+ 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+ 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+ 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+ 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+ 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+ 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+ 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+ 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+ 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+ 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+ 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+ 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+ 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+ 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+ 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+ 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+ 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+ 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+ 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+ 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+ 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+ 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+ 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+ 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+ 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+ 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+ 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+ 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+ 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+ 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+ 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+ 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+ 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+ 0x8def022dUL
+ },
+ {
+ 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+ 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+ 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+ 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+ 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+ 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+ 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+ 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+ 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+ 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+ 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+ 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+ 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+ 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+ 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+ 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+ 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+ 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+ 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+ 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+ 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+ 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+ 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+ 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+ 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+ 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+ 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+ 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+ 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+ 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+ 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+ 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+ 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+ 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+ 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+ 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+ 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+ 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+ 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+ 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+ 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+ 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+ 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+ 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+ 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+ 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+ 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+ 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+ 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+ 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+ 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+ 0x72fd2493UL
+ },
+ {
+ 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+ 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+ 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+ 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+ 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+ 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+ 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+ 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+ 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+ 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+ 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+ 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+ 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+ 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+ 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+ 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+ 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+ 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+ 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+ 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+ 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+ 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+ 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+ 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+ 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+ 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+ 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+ 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+ 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+ 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+ 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+ 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+ 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+ 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+ 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+ 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+ 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+ 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+ 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+ 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+ 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+ 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+ 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+ 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+ 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+ 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+ 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+ 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+ 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+ 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+ 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+ 0xed3498beUL
+ },
+ {
+ 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+ 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+ 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+ 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+ 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+ 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+ 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+ 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+ 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+ 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+ 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+ 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+ 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+ 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+ 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+ 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+ 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+ 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+ 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+ 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+ 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+ 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+ 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+ 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+ 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+ 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+ 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+ 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+ 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+ 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+ 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+ 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+ 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+ 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+ 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+ 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+ 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+ 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+ 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+ 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+ 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+ 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+ 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+ 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+ 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+ 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+ 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+ 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+ 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+ 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+ 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+ 0xf10605deUL
+#endif
+ }
+};
diff --git a/src/Common/zlib/deflate.c b/src/Common/zlib/deflate.c
new file mode 100644
index 0000000..6969577
--- /dev/null
+++ b/src/Common/zlib/deflate.c
@@ -0,0 +1,1967 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * ALGORITHM
+ *
+ * The "deflation" process depends on being able to identify portions
+ * of the input text which are identical to earlier input (within a
+ * sliding window trailing behind the input currently being processed).
+ *
+ * The most straightforward technique turns out to be the fastest for
+ * most input files: try all possible matches and select the longest.
+ * The key feature of this algorithm is that insertions into the string
+ * dictionary are very simple and thus fast, and deletions are avoided
+ * completely. Insertions are performed at each input character, whereas
+ * string matches are performed only when the previous match ends. So it
+ * is preferable to spend more time in matches to allow very fast string
+ * insertions and avoid deletions. The matching algorithm for small
+ * strings is inspired from that of Rabin & Karp. A brute force approach
+ * is used to find longer strings when a small match has been found.
+ * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+ * (by Leonid Broukhis).
+ * A previous version of this file used a more sophisticated algorithm
+ * (by Fiala and Greene) which is guaranteed to run in linear amortized
+ * time, but has a larger average cost, uses more memory and is patented.
+ * However the F&G algorithm may be faster for some highly redundant
+ * files if the parameter max_chain_length (described below) is too large.
+ *
+ * ACKNOWLEDGEMENTS
+ *
+ * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+ * I found it in 'freeze' written by Leonid Broukhis.
+ * Thanks to many people for bug reports and testing.
+ *
+ * REFERENCES
+ *
+ * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+ * Available in http://tools.ietf.org/html/rfc1951
+ *
+ * A description of the Rabin and Karp algorithm is given in the book
+ * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+ *
+ * Fiala,E.R., and Greene,D.H.
+ * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+ *
+ */
+
+/* @(#) $Id$ */
+
+#include "deflate.h"
+
+const char deflate_copyright[] =
+ " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and Mark Adler ";
+/*
+ If you use the zlib library in a product, an acknowledgment is welcome
+ in the documentation of your product. If for some reason you cannot
+ include such an acknowledgment, I would appreciate that you keep this
+ copyright string in the executable of your product.
+ */
+
+/* ===========================================================================
+ * Function prototypes.
+ */
+typedef enum {
+ need_more, /* block not completed, need more input or more output */
+ block_done, /* block flush performed */
+ finish_started, /* finish started, need only more output at next deflate */
+ finish_done /* finish done, accept no more input or output */
+} block_state;
+
+typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle OF((deflate_state *s, int flush));
+local block_state deflate_huff OF((deflate_state *s, int flush));
+local void lm_init OF((deflate_state *s));
+local void putShortMSB OF((deflate_state *s, uInt b));
+local void flush_pending OF((z_streamp strm));
+local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+ void match_init OF((void)); /* asm code initialization */
+ uInt longest_match OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local void check_match OF((deflate_state *s, IPos start, IPos match,
+ int length));
+#endif
+
+/* ===========================================================================
+ * Local data
+ */
+
+#define NIL 0
+/* Tail of hash chains */
+
+#ifndef TOO_FAR
+# define TOO_FAR 4096
+#endif
+/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+typedef struct config_s {
+ ush good_length; /* reduce lazy search above this match length */
+ ush max_lazy; /* do not perform lazy search above this match length */
+ ush nice_length; /* quit search above this match length */
+ ush max_chain;
+ compress_func func;
+} config;
+
+#ifdef FASTEST
+local const config configuration_table[2] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */
+#else
+local const config configuration_table[10] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */
+/* 2 */ {4, 5, 16, 8, deflate_fast},
+/* 3 */ {4, 6, 32, 32, deflate_fast},
+
+/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
+/* 5 */ {8, 16, 32, 32, deflate_slow},
+/* 6 */ {8, 16, 128, 128, deflate_slow},
+/* 7 */ {8, 32, 128, 256, deflate_slow},
+/* 8 */ {32, 128, 258, 1024, deflate_slow},
+/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
+#endif
+
+/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+ * meaning.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN assertion: all calls to to UPDATE_HASH are made with consecutive
+ * input characters, so that a running hash key can be computed from the
+ * previous key instead of complete recalculation each time.
+ */
+#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+
+
+/* ===========================================================================
+ * Insert string str in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * If this file is compiled with -DFASTEST, the compression level is forced
+ * to 1, and no hash chains are maintained.
+ * IN assertion: all calls to to INSERT_STRING are made with consecutive
+ * input characters and the first MIN_MATCH bytes of str are valid
+ * (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+#ifdef FASTEST
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#else
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#endif
+
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+ z_streamp strm;
+ int level;
+ const char *version;
+ int stream_size;
+{
+ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+ Z_DEFAULT_STRATEGY, version, stream_size);
+ /* To do: ignore strm->next_in if we use it as window */
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+ version, stream_size)
+ z_streamp strm;
+ int level;
+ int method;
+ int windowBits;
+ int memLevel;
+ int strategy;
+ const char *version;
+ int stream_size;
+{
+ deflate_state *s;
+ int wrap = 1;
+ static const char my_version[] = ZLIB_VERSION;
+
+ ushf *overlay;
+ /* We overlay pending_buf and d_buf+l_buf. This works since the average
+ * output size for (length,distance) codes is <= 24 bits.
+ */
+
+ if (version == Z_NULL || version[0] != my_version[0] ||
+ stream_size != sizeof(z_stream)) {
+ return Z_VERSION_ERROR;
+ }
+ if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+ strm->msg = Z_NULL;
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+
+ if (windowBits < 0) { /* suppress zlib wrapper */
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+#ifdef GZIP
+ else if (windowBits > 15) {
+ wrap = 2; /* write gzip wrapper instead */
+ windowBits -= 16;
+ }
+#endif
+ if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+ windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+ strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
+ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+ if (s == Z_NULL) return Z_MEM_ERROR;
+ strm->state = (struct internal_state FAR *)s;
+ s->strm = strm;
+
+ s->wrap = wrap;
+ s->gzhead = Z_NULL;
+ s->w_bits = windowBits;
+ s->w_size = 1 << s->w_bits;
+ s->w_mask = s->w_size - 1;
+
+ s->hash_bits = memLevel + 7;
+ s->hash_size = 1 << s->hash_bits;
+ s->hash_mask = s->hash_size - 1;
+ s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+ s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+ s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
+ s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+ s->high_water = 0; /* nothing written to s->window yet */
+
+ s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+ s->pending_buf = (uchf *) overlay;
+ s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+ if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+ s->pending_buf == Z_NULL) {
+ s->status = FINISH_STATE;
+ strm->msg = ERR_MSG(Z_MEM_ERROR);
+ deflateEnd (strm);
+ return Z_MEM_ERROR;
+ }
+ s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+ s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+ s->level = level;
+ s->strategy = strategy;
+ s->method = (Byte)method;
+
+ return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ const Bytef *dictionary;
+ uInt dictLength;
+{
+ deflate_state *s;
+ uInt str, n;
+ int wrap;
+ unsigned avail;
+ z_const unsigned char *next;
+
+ if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ wrap = s->wrap;
+ if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+ return Z_STREAM_ERROR;
+
+ /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+ if (wrap == 1)
+ strm->adler = adler32(strm->adler, dictionary, dictLength);
+ s->wrap = 0; /* avoid computing Adler-32 in read_buf */
+
+ /* if dictionary would fill window, just replace the history */
+ if (dictLength >= s->w_size) {
+ if (wrap == 0) { /* already empty otherwise */
+ CLEAR_HASH(s);
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ dictionary += dictLength - s->w_size; /* use the tail */
+ dictLength = s->w_size;
+ }
+
+ /* insert dictionary into window and hash */
+ avail = strm->avail_in;
+ next = strm->next_in;
+ strm->avail_in = dictLength;
+ strm->next_in = (z_const Bytef *)dictionary;
+ fill_window(s);
+ while (s->lookahead >= MIN_MATCH) {
+ str = s->strstart;
+ n = s->lookahead - (MIN_MATCH-1);
+ do {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ } while (--n);
+ s->strstart = str;
+ s->lookahead = MIN_MATCH-1;
+ fill_window(s);
+ }
+ s->strstart += s->lookahead;
+ s->block_start = (long)s->strstart;
+ s->insert = s->lookahead;
+ s->lookahead = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ strm->next_in = next;
+ strm->avail_in = avail;
+ s->wrap = wrap;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateResetKeep (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ return Z_STREAM_ERROR;
+ }
+
+ strm->total_in = strm->total_out = 0;
+ strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+ strm->data_type = Z_UNKNOWN;
+
+ s = (deflate_state *)strm->state;
+ s->pending = 0;
+ s->pending_out = s->pending_buf;
+
+ if (s->wrap < 0) {
+ s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+ }
+ s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ strm->adler =
+#ifdef GZIP
+ s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+ adler32(0L, Z_NULL, 0);
+ s->last_flush = Z_NO_FLUSH;
+
+ _tr_init(s);
+
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+ z_streamp strm;
+{
+ int ret;
+
+ ret = deflateResetKeep(strm);
+ if (ret == Z_OK)
+ lm_init(strm->state);
+ return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+ z_streamp strm;
+ gz_headerp head;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ strm->state->gzhead = head;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+ unsigned *pending;
+ int *bits;
+ z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (pending != Z_NULL)
+ *pending = strm->state->pending;
+ if (bits != Z_NULL)
+ *bits = strm->state->bi_valid;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePrime (strm, bits, value)
+ z_streamp strm;
+ int bits;
+ int value;
+{
+ deflate_state *s;
+ int put;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+ return Z_BUF_ERROR;
+ do {
+ put = Buf_size - s->bi_valid;
+ if (put > bits)
+ put = bits;
+ s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+ s->bi_valid += put;
+ _tr_flush_bits(s);
+ value >>= put;
+ bits -= put;
+ } while (bits);
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateParams(strm, level, strategy)
+ z_streamp strm;
+ int level;
+ int strategy;
+{
+ deflate_state *s;
+ compress_func func;
+ int err = Z_OK;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+ if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ func = configuration_table[s->level].func;
+
+ if ((strategy != s->strategy || func != configuration_table[level].func) &&
+ strm->total_in != 0) {
+ /* Flush the last buffer: */
+ err = deflate(strm, Z_BLOCK);
+ if (err == Z_BUF_ERROR && s->pending == 0)
+ err = Z_OK;
+ }
+ if (s->level != level) {
+ s->level = level;
+ s->max_lazy_match = configuration_table[level].max_lazy;
+ s->good_match = configuration_table[level].good_length;
+ s->nice_match = configuration_table[level].nice_length;
+ s->max_chain_length = configuration_table[level].max_chain;
+ }
+ s->strategy = strategy;
+ return err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+ z_streamp strm;
+ int good_length;
+ int max_lazy;
+ int nice_length;
+ int max_chain;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ s->good_match = good_length;
+ s->max_lazy_match = max_lazy;
+ s->nice_match = nice_length;
+ s->max_chain_length = max_chain;
+ return Z_OK;
+}
+
+/* =========================================================================
+ * For the default windowBits of 15 and memLevel of 8, this function returns
+ * a close to exact, as well as small, upper bound on the compressed size.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well. The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel. But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+ z_streamp strm;
+ uLong sourceLen;
+{
+ deflate_state *s;
+ uLong complen, wraplen;
+ Bytef *str;
+
+ /* conservative upper bound for compressed data */
+ complen = sourceLen +
+ ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+ /* if can't get parameters, return conservative bound plus zlib wrapper */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return complen + 6;
+
+ /* compute wrapper length */
+ s = strm->state;
+ switch (s->wrap) {
+ case 0: /* raw deflate */
+ wraplen = 0;
+ break;
+ case 1: /* zlib wrapper */
+ wraplen = 6 + (s->strstart ? 4 : 0);
+ break;
+ case 2: /* gzip wrapper */
+ wraplen = 18;
+ if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ if (s->gzhead->extra != Z_NULL)
+ wraplen += 2 + s->gzhead->extra_len;
+ str = s->gzhead->name;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ str = s->gzhead->comment;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ if (s->gzhead->hcrc)
+ wraplen += 2;
+ }
+ break;
+ default: /* for compiler happiness */
+ wraplen = 6;
+ }
+
+ /* if not default parameters, return conservative bound */
+ if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+ return complen + wraplen;
+
+ /* default settings: return tight bound for that case */
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13 - 6 + wraplen;
+}
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+local void putShortMSB (s, b)
+ deflate_state *s;
+ uInt b;
+{
+ put_byte(s, (Byte)(b >> 8));
+ put_byte(s, (Byte)(b & 0xff));
+}
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->next_out buffer and copying into it.
+ * (See also read_buf()).
+ */
+local void flush_pending(strm)
+ z_streamp strm;
+{
+ unsigned len;
+ deflate_state *s = strm->state;
+
+ _tr_flush_bits(s);
+ len = s->pending;
+ if (len > strm->avail_out) len = strm->avail_out;
+ if (len == 0) return;
+
+ zmemcpy(strm->next_out, s->pending_out, len);
+ strm->next_out += len;
+ s->pending_out += len;
+ strm->total_out += len;
+ strm->avail_out -= len;
+ s->pending -= len;
+ if (s->pending == 0) {
+ s->pending_out = s->pending_buf;
+ }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+ z_streamp strm;
+ int flush;
+{
+ int old_flush; /* value of flush param for previous deflate call */
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ flush > Z_BLOCK || flush < 0) {
+ return Z_STREAM_ERROR;
+ }
+ s = strm->state;
+
+ if (strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (s->status == FINISH_STATE && flush != Z_FINISH)) {
+ ERR_RETURN(strm, Z_STREAM_ERROR);
+ }
+ if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+ s->strm = strm; /* just in case */
+ old_flush = s->last_flush;
+ s->last_flush = flush;
+
+ /* Write the header */
+ if (s->status == INIT_STATE) {
+#ifdef GZIP
+ if (s->wrap == 2) {
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
+ s->status = BUSY_STATE;
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+ }
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
+ }
+ }
+ else
+#endif
+ {
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
+ else
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ s->status = BUSY_STATE;
+ putShortMSB(s, header);
+
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ }
+ }
+#ifdef GZIP
+ if (s->status == EXTRA_STATE) {
+ if (s->gzhead->extra != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+
+ while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size)
+ break;
+ }
+ put_byte(s, s->gzhead->extra[s->gzindex]);
+ s->gzindex++;
+ }
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (s->gzindex == s->gzhead->extra_len) {
+ s->gzindex = 0;
+ s->status = NAME_STATE;
+ }
+ }
+ else
+ s->status = NAME_STATE;
+ }
+ if (s->status == NAME_STATE) {
+ if (s->gzhead->name != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->name[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0) {
+ s->gzindex = 0;
+ s->status = COMMENT_STATE;
+ }
+ }
+ else
+ s->status = COMMENT_STATE;
+ }
+ if (s->status == COMMENT_STATE) {
+ if (s->gzhead->comment != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->comment[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0)
+ s->status = HCRC_STATE;
+ }
+ else
+ s->status = HCRC_STATE;
+ }
+ if (s->status == HCRC_STATE) {
+ if (s->gzhead->hcrc) {
+ if (s->pending + 2 > s->pending_buf_size)
+ flush_pending(strm);
+ if (s->pending + 2 <= s->pending_buf_size) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+ }
+ }
+ else
+ s->status = BUSY_STATE;
+ }
+#endif
+
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* Start a new block or continue the current one.
+ */
+ if (strm->avail_in != 0 || s->lookahead != 0 ||
+ (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+ block_state bstate;
+
+ bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush));
+
+ if (bstate == finish_started || bstate == finish_done) {
+ s->status = FINISH_STATE;
+ }
+ if (bstate == need_more || bstate == finish_started) {
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+ }
+ return Z_OK;
+ /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+ * of deflate should use the same flush parameter to make sure
+ * that the flush is complete. So we don't have to output an
+ * empty block here, this will be done at next call. This also
+ * ensures that for a very small output buffer, we emit at most
+ * one empty block.
+ */
+ }
+ if (bstate == block_done) {
+ if (flush == Z_PARTIAL_FLUSH) {
+ _tr_align(s);
+ } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+ _tr_stored_block(s, (char*)0, 0L, 0);
+ /* For a full flush, this empty block will be recognized
+ * as a special marker by inflate_sync().
+ */
+ if (flush == Z_FULL_FLUSH) {
+ CLEAR_HASH(s); /* forget history */
+ if (s->lookahead == 0) {
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ }
+ }
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+ return Z_OK;
+ }
+ }
+ }
+ Assert(strm->avail_out > 0, "bug2");
+
+ if (flush != Z_FINISH) return Z_OK;
+ if (s->wrap <= 0) return Z_STREAM_END;
+
+ /* Write the trailer */
+#ifdef GZIP
+ if (s->wrap == 2) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+ put_byte(s, (Byte)(strm->total_in & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+ }
+ else
+#endif
+ {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ flush_pending(strm);
+ /* If avail_out is zero, the application will call deflate again
+ * to flush the rest.
+ */
+ if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+ return s->pending != 0 ? Z_OK : Z_STREAM_END;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateEnd (strm)
+ z_streamp strm;
+{
+ int status;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ status = strm->state->status;
+ if (status != INIT_STATE &&
+ status != EXTRA_STATE &&
+ status != NAME_STATE &&
+ status != COMMENT_STATE &&
+ status != HCRC_STATE &&
+ status != BUSY_STATE &&
+ status != FINISH_STATE) {
+ return Z_STREAM_ERROR;
+ }
+
+ /* Deallocate in reverse order of allocations: */
+ TRY_FREE(strm, strm->state->pending_buf);
+ TRY_FREE(strm, strm->state->head);
+ TRY_FREE(strm, strm->state->prev);
+ TRY_FREE(strm, strm->state->window);
+
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+
+ return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state.
+ * To simplify the source, this is not supported for 16-bit MSDOS (which
+ * doesn't have enough memory anyway to duplicate compression states).
+ */
+int ZEXPORT deflateCopy (dest, source)
+ z_streamp dest;
+ z_streamp source;
+{
+#ifdef MAXSEG_64K
+ return Z_STREAM_ERROR;
+#else
+ deflate_state *ds;
+ deflate_state *ss;
+ ushf *overlay;
+
+
+ if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ return Z_STREAM_ERROR;
+ }
+
+ ss = source->state;
+
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+ ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+ if (ds == Z_NULL) return Z_MEM_ERROR;
+ dest->state = (struct internal_state FAR *) ds;
+ zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+ ds->strm = dest;
+
+ ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+ ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
+ ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
+ overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+ ds->pending_buf = (uchf *) overlay;
+
+ if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+ ds->pending_buf == Z_NULL) {
+ deflateEnd (dest);
+ return Z_MEM_ERROR;
+ }
+ /* following zmemcpy do not work for 16-bit MSDOS */
+ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+ zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+ zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+ zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+ ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+ ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+ ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+ ds->l_desc.dyn_tree = ds->dyn_ltree;
+ ds->d_desc.dyn_tree = ds->dyn_dtree;
+ ds->bl_desc.dyn_tree = ds->bl_tree;
+
+ return Z_OK;
+#endif /* MAXSEG_64K */
+}
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read. All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->next_in buffer and copying from it.
+ * (See also flush_pending()).
+ */
+local int read_buf(strm, buf, size)
+ z_streamp strm;
+ Bytef *buf;
+ unsigned size;
+{
+ unsigned len = strm->avail_in;
+
+ if (len > size) len = size;
+ if (len == 0) return 0;
+
+ strm->avail_in -= len;
+
+ zmemcpy(buf, strm->next_in, len);
+ if (strm->state->wrap == 1) {
+ strm->adler = adler32(strm->adler, buf, len);
+ }
+#ifdef GZIP
+ else if (strm->state->wrap == 2) {
+ strm->adler = crc32(strm->adler, buf, len);
+ }
+#endif
+ strm->next_in += len;
+ strm->total_in += len;
+
+ return (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+ deflate_state *s;
+{
+ s->window_size = (ulg)2L*s->w_size;
+
+ CLEAR_HASH(s);
+
+ /* Set the default configuration parameters:
+ */
+ s->max_lazy_match = configuration_table[s->level].max_lazy;
+ s->good_match = configuration_table[s->level].good_length;
+ s->nice_match = configuration_table[s->level].nice_length;
+ s->max_chain_length = configuration_table[s->level].max_chain;
+
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->lookahead = 0;
+ s->insert = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ s->ins_h = 0;
+#ifndef FASTEST
+#ifdef ASMV
+ match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ unsigned chain_length = s->max_chain_length;/* max hash chain length */
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ int best_len = s->prev_length; /* best match length so far */
+ int nice_match = s->nice_match; /* stop if match long enough */
+ IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+ s->strstart - (IPos)MAX_DIST(s) : NIL;
+ /* Stop when cur_match becomes <= limit. To simplify the code,
+ * we prevent matches with the string of window index 0.
+ */
+ Posf *prev = s->prev;
+ uInt wmask = s->w_mask;
+
+#ifdef UNALIGNED_OK
+ /* Compare two bytes at a time. Note: this is not always beneficial.
+ * Try with and without -DUNALIGNED_OK to check.
+ */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+ register ush scan_start = *(ushf*)scan;
+ register ush scan_end = *(ushf*)(scan+best_len-1);
+#else
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+ register Byte scan_end1 = scan[best_len-1];
+ register Byte scan_end = scan[best_len];
+#endif
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ /* Do not waste too much time if we already have a good match: */
+ if (s->prev_length >= s->good_match) {
+ chain_length >>= 2;
+ }
+ /* Do not look for matches beyond the end of the input. This is necessary
+ * to make deflate deterministic.
+ */
+ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ do {
+ Assert(cur_match < s->strstart, "no future");
+ match = s->window + cur_match;
+
+ /* Skip to next match if the match length cannot increase
+ * or if the match length is less than 2. Note that the checks below
+ * for insufficient lookahead only occur occasionally for performance
+ * reasons. Therefore uninitialized memory will be accessed, and
+ * conditional jumps will be made that depend on those values.
+ * However the length of the match is limited to the lookahead, so
+ * the output of deflate is not affected by the uninitialized values.
+ */
+#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+ /* This code assumes sizeof(unsigned short) == 2. Do not use
+ * UNALIGNED_OK if your compiler uses a different size.
+ */
+ if (*(ushf*)(match+best_len-1) != scan_end ||
+ *(ushf*)match != scan_start) continue;
+
+ /* It is not necessary to compare scan[2] and match[2] since they are
+ * always equal when the other bytes match, given that the hash keys
+ * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+ * strstart+3, +5, ... up to strstart+257. We check for insufficient
+ * lookahead only every 4th comparison; the 128th check will be made
+ * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+ * necessary to put more guard bytes at the end of the window, or
+ * to check more often for insufficient lookahead.
+ */
+ Assert(scan[2] == match[2], "scan[2]?");
+ scan++, match++;
+ do {
+ } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ scan < strend);
+ /* The funny "do {}" generates better code on most compilers */
+
+ /* Here, scan <= window+strstart+257 */
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+ if (*scan == *match) scan++;
+
+ len = (MAX_MATCH - 1) - (int)(strend-scan);
+ scan = strend - (MAX_MATCH-1);
+
+#else /* UNALIGNED_OK */
+
+ if (match[best_len] != scan_end ||
+ match[best_len-1] != scan_end1 ||
+ *match != *scan ||
+ *++match != scan[1]) continue;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match++;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+ scan = strend - MAX_MATCH;
+
+#endif /* UNALIGNED_OK */
+
+ if (len > best_len) {
+ s->match_start = cur_match;
+ best_len = len;
+ if (len >= nice_match) break;
+#ifdef UNALIGNED_OK
+ scan_end = *(ushf*)(scan+best_len-1);
+#else
+ scan_end1 = scan[best_len-1];
+ scan_end = scan[best_len];
+#endif
+ }
+ } while ((cur_match = prev[cur_match & wmask]) > limit
+ && --chain_length != 0);
+
+ if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+ return s->lookahead;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ Assert(cur_match < s->strstart, "no future");
+
+ match = s->window + cur_match;
+
+ /* Return failure if the match length is less than 2:
+ */
+ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match += 2;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+
+ if (len < MIN_MATCH) return MIN_MATCH - 1;
+
+ s->match_start = cur_match;
+ return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
+}
+
+#endif /* FASTEST */
+
+#ifdef DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+ deflate_state *s;
+ IPos start, match;
+ int length;
+{
+ /* check that the match is indeed a match */
+ if (zmemcmp(s->window + match,
+ s->window + start, length) != EQUAL) {
+ fprintf(stderr, " start %u, match %u, length %d\n",
+ start, match, length);
+ do {
+ fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+ } while (--length != 0);
+ z_error("invalid match");
+ }
+ if (z_verbose > 1) {
+ fprintf(stderr,"\\[%d,%d]", start-match, length);
+ do { putc(s->window[start++], stderr); } while (--length != 0);
+ }
+}
+#else
+# define check_match(s, start, match, length)
+#endif /* DEBUG */
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ * At least one byte has been read, or avail_in == 0; reads are
+ * performed for at least two bytes (required for the zip translate_eol
+ * option -- not supported here).
+ */
+local void fill_window(s)
+ deflate_state *s;
+{
+ register unsigned n, m;
+ register Posf *p;
+ unsigned more; /* Amount of free space at the end of the window. */
+ uInt wsize = s->w_size;
+
+ Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+ do {
+ more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+
+ /* Deal with !@#$% 64K limit: */
+ if (sizeof(int) <= 2) {
+ if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+ more = wsize;
+
+ } else if (more == (unsigned)(-1)) {
+ /* Very unlikely, but possible on 16 bit machine if
+ * strstart == 0 && lookahead == 1 (input done a byte at time)
+ */
+ more--;
+ }
+ }
+
+ /* If the window is almost full and there is insufficient lookahead,
+ * move the upper half to the lower one to make room in the upper half.
+ */
+ if (s->strstart >= wsize+MAX_DIST(s)) {
+
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ s->match_start -= wsize;
+ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+ s->block_start -= (long) wsize;
+
+ /* Slide the hash table (could be avoided with 32 bit values
+ at the expense of memory usage). We slide even when level == 0
+ to keep the hash table consistent if we switch back to level > 0
+ later. (Using level 0 permanently is not an optimal usage of
+ zlib, so we don't care about this pathological case.)
+ */
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ } while (--n);
+
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+ more += wsize;
+ }
+ if (s->strm->avail_in == 0) break;
+
+ /* If there was no sliding:
+ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+ * more == window_size - lookahead - strstart
+ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+ * => more >= window_size - 2*WSIZE + 2
+ * In the BIG_MEM or MMAP case (not yet supported),
+ * window_size == input_size + MIN_LOOKAHEAD &&
+ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+ * Otherwise, window_size == 2*WSIZE so more >= 2.
+ * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+ */
+ Assert(more >= 2, "more < 2");
+
+ n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+ s->lookahead += n;
+
+ /* Initialize the hash value now that we have some input: */
+ if (s->lookahead + s->insert >= MIN_MATCH) {
+ uInt str = s->strstart - s->insert;
+ s->ins_h = s->window[str];
+ UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ while (s->insert) {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ s->insert--;
+ if (s->lookahead + s->insert < MIN_MATCH)
+ break;
+ }
+ }
+ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+ * but this is not important since only literal bytes will be emitted.
+ */
+
+ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+ /* If the WIN_INIT bytes after the end of the current data have never been
+ * written, then zero those bytes in order to avoid memory check reports of
+ * the use of uninitialized (or uninitialised as Julian writes) bytes by
+ * the longest match routines. Update the high water mark for the next
+ * time through here. WIN_INIT is set to MAX_MATCH since the longest match
+ * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+ */
+ if (s->high_water < s->window_size) {
+ ulg curr = s->strstart + (ulg)(s->lookahead);
+ ulg init;
+
+ if (s->high_water < curr) {
+ /* Previous high water mark below current data -- zero WIN_INIT
+ * bytes or up to end of window, whichever is less.
+ */
+ init = s->window_size - curr;
+ if (init > WIN_INIT)
+ init = WIN_INIT;
+ zmemzero(s->window + curr, (unsigned)init);
+ s->high_water = curr + init;
+ }
+ else if (s->high_water < (ulg)curr + WIN_INIT) {
+ /* High water mark at or above current data, but below current data
+ * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+ * to end of window, whichever is less.
+ */
+ init = (ulg)curr + WIN_INIT - s->high_water;
+ if (init > s->window_size - s->high_water)
+ init = s->window_size - s->high_water;
+ zmemzero(s->window + s->high_water, (unsigned)init);
+ s->high_water += init;
+ }
+ }
+
+ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+ "not enough room for search");
+}
+
+/* ===========================================================================
+ * Flush the current block, with given end-of-file flag.
+ * IN assertion: strstart is set to the end of the current match.
+ */
+#define FLUSH_BLOCK_ONLY(s, last) { \
+ _tr_flush_block(s, (s->block_start >= 0L ? \
+ (charf *)&s->window[(unsigned)s->block_start] : \
+ (charf *)Z_NULL), \
+ (ulg)((long)s->strstart - s->block_start), \
+ (last)); \
+ s->block_start = s->strstart; \
+ flush_pending(s->strm); \
+ Tracev((stderr,"[FLUSH]")); \
+}
+
+/* Same but force premature exit if necessary. */
+#define FLUSH_BLOCK(s, last) { \
+ FLUSH_BLOCK_ONLY(s, last); \
+ if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+ * to pending_buf_size, and each stored block has a 5 byte header:
+ */
+ ulg max_block_size = 0xffff;
+ ulg max_start;
+
+ if (max_block_size > s->pending_buf_size - 5) {
+ max_block_size = s->pending_buf_size - 5;
+ }
+
+ /* Copy as much as possible from input to output: */
+ for (;;) {
+ /* Fill the window as much as possible: */
+ if (s->lookahead <= 1) {
+
+ Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+ s->block_start >= (long)s->w_size, "slide too late");
+
+ fill_window(s);
+ if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+ Assert(s->block_start >= 0L, "block gone");
+
+ s->strstart += s->lookahead;
+ s->lookahead = 0;
+
+ /* Emit a stored block if pending_buf will be full: */
+ max_start = s->block_start + max_block_size;
+ if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+ /* strstart == 0 is possible when wraparound on 16-bit machine */
+ s->lookahead = (uInt)(s->strstart - max_start);
+ s->strstart = (uInt)max_start;
+ FLUSH_BLOCK(s, 0);
+ }
+ /* Flush if we may have to slide, otherwise block_start may become
+ * negative and the data will be gone:
+ */
+ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+ FLUSH_BLOCK(s, 0);
+ }
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if ((long)s->strstart > s->block_start)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+local block_state deflate_fast(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of the hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ * At this point we have always match_length < MIN_MATCH
+ */
+ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+ }
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->match_start, s->match_length);
+
+ _tr_tally_dist(s, s->strstart - s->match_start,
+ s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+
+ /* Insert new strings in the hash table only if the match length
+ * is not too large. This saves time but degrades compression.
+ */
+#ifndef FASTEST
+ if (s->match_length <= s->max_insert_length &&
+ s->lookahead >= MIN_MATCH) {
+ s->match_length--; /* string at strstart already in table */
+ do {
+ s->strstart++;
+ INSERT_STRING(s, s->strstart, hash_head);
+ /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+ * always MIN_MATCH bytes ahead.
+ */
+ } while (--s->match_length != 0);
+ s->strstart++;
+ } else
+#endif
+ {
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ s->ins_h = s->window[s->strstart];
+ UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+ * matter since it will be recomputed at next deflate call.
+ */
+ }
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+local block_state deflate_slow(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ /* Process the input block. */
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ */
+ s->prev_length = s->match_length, s->prev_match = s->match_start;
+ s->match_length = MIN_MATCH-1;
+
+ if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+ s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+
+ if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if TOO_FAR <= 32767
+ || (s->match_length == MIN_MATCH &&
+ s->strstart - s->match_start > TOO_FAR)
+#endif
+ )) {
+
+ /* If prev_match is also MIN_MATCH, match_start is garbage
+ * but we will ignore the current match anyway.
+ */
+ s->match_length = MIN_MATCH-1;
+ }
+ }
+ /* If there was a match at the previous step and the current
+ * match is not better, output the previous match:
+ */
+ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+ uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+ /* Do not insert strings in hash table beyond this. */
+
+ check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+
+ _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+ s->prev_length - MIN_MATCH, bflush);
+
+ /* Insert in hash table all strings up to the end of the match.
+ * strstart-1 and strstart are already inserted. If there is not
+ * enough lookahead, the last two strings are not inserted in
+ * the hash table.
+ */
+ s->lookahead -= s->prev_length-1;
+ s->prev_length -= 2;
+ do {
+ if (++s->strstart <= max_insert) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+ } while (--s->prev_length != 0);
+ s->match_available = 0;
+ s->match_length = MIN_MATCH-1;
+ s->strstart++;
+
+ if (bflush) FLUSH_BLOCK(s, 0);
+
+ } else if (s->match_available) {
+ /* If there was no match at the previous position, output a
+ * single literal. If there was a match but the current match
+ * is longer, truncate the previous match to a single literal.
+ */
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ if (bflush) {
+ FLUSH_BLOCK_ONLY(s, 0);
+ }
+ s->strstart++;
+ s->lookahead--;
+ if (s->strm->avail_out == 0) return need_more;
+ } else {
+ /* There is no previous match to compare with, wait for
+ * the next step to decide.
+ */
+ s->match_available = 1;
+ s->strstart++;
+ s->lookahead--;
+ }
+ }
+ Assert (flush != Z_NO_FLUSH, "no flush?");
+ if (s->match_available) {
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ s->match_available = 0;
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+#endif /* FASTEST */
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one. Do not maintain a hash table. (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+local block_state deflate_rle(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+ uInt prev; /* byte at distance one to match */
+ Bytef *scan, *strend; /* scan goes up to strend for length of run */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the longest run, plus one for the unrolled loop.
+ */
+ if (s->lookahead <= MAX_MATCH) {
+ fill_window(s);
+ if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* See how many times the previous byte repeats */
+ s->match_length = 0;
+ if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+ scan = s->window + s->strstart - 1;
+ prev = *scan;
+ if (prev == *++scan && prev == *++scan && prev == *++scan) {
+ strend = s->window + s->strstart + MAX_MATCH;
+ do {
+ } while (prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ scan < strend);
+ s->match_length = MAX_MATCH - (int)(strend - scan);
+ if (s->match_length > s->lookahead)
+ s->match_length = s->lookahead;
+ }
+ Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+ }
+
+ /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->strstart - 1, s->match_length);
+
+ _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+local block_state deflate_huff(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we have a literal to write. */
+ if (s->lookahead == 0) {
+ fill_window(s);
+ if (s->lookahead == 0) {
+ if (flush == Z_NO_FLUSH)
+ return need_more;
+ break; /* flush the current block */
+ }
+ }
+
+ /* Output a literal byte */
+ s->match_length = 0;
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
diff --git a/src/Common/zlib/deflate.h b/src/Common/zlib/deflate.h
new file mode 100644
index 0000000..ce0299e
--- /dev/null
+++ b/src/Common/zlib/deflate.h
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef DEFLATE_H
+#define DEFLATE_H
+
+#include "zutil.h"
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer creation by deflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip encoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GZIP
+#endif
+
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+#define LENGTH_CODES 29
+/* number of length codes, not counting the special END_BLOCK code */
+
+#define LITERALS 256
+/* number of literal bytes 0..255 */
+
+#define L_CODES (LITERALS+1+LENGTH_CODES)
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+#define D_CODES 30
+/* number of distance codes */
+
+#define BL_CODES 19
+/* number of codes used to transfer the bit lengths */
+
+#define HEAP_SIZE (2*L_CODES+1)
+/* maximum heap size */
+
+#define MAX_BITS 15
+/* All codes must not exceed MAX_BITS bits */
+
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
+#define INIT_STATE 42
+#define EXTRA_STATE 69
+#define NAME_STATE 73
+#define COMMENT_STATE 91
+#define HCRC_STATE 103
+#define BUSY_STATE 113
+#define FINISH_STATE 666
+/* Stream status */
+
+
+/* Data structure describing a single value and its code string. */
+typedef struct ct_data_s {
+ union {
+ ush freq; /* frequency count */
+ ush code; /* bit string */
+ } fc;
+ union {
+ ush dad; /* father node in Huffman tree */
+ ush len; /* length of bit string */
+ } dl;
+} FAR ct_data;
+
+#define Freq fc.freq
+#define Code fc.code
+#define Dad dl.dad
+#define Len dl.len
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+typedef struct tree_desc_s {
+ ct_data *dyn_tree; /* the dynamic tree */
+ int max_code; /* largest code with non zero frequency */
+ static_tree_desc *stat_desc; /* the corresponding static tree */
+} FAR tree_desc;
+
+typedef ush Pos;
+typedef Pos FAR Posf;
+typedef unsigned IPos;
+
+/* A Pos is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ */
+
+typedef struct internal_state {
+ z_streamp strm; /* pointer back to this zlib stream */
+ int status; /* as the name implies */
+ Bytef *pending_buf; /* output still pending */
+ ulg pending_buf_size; /* size of pending_buf */
+ Bytef *pending_out; /* next pending byte to output to the stream */
+ uInt pending; /* nb of bytes in the pending buffer */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ gz_headerp gzhead; /* gzip header information to write */
+ uInt gzindex; /* where in extra, name, or comment */
+ Byte method; /* can only be DEFLATED */
+ int last_flush; /* value of flush param for previous deflate call */
+
+ /* used by deflate.c: */
+
+ uInt w_size; /* LZ77 window size (32K by default) */
+ uInt w_bits; /* log2(w_size) (8..16) */
+ uInt w_mask; /* w_size - 1 */
+
+ Bytef *window;
+ /* Sliding window. Input bytes are read into the second half of the window,
+ * and move to the first half later to keep a dictionary of at least wSize
+ * bytes. With this organization, matches are limited to a distance of
+ * wSize-MAX_MATCH bytes, but this ensures that IO is always
+ * performed with a length multiple of the block size. Also, it limits
+ * the window size to 64K, which is quite useful on MSDOS.
+ * To do: use the user input buffer as sliding window.
+ */
+
+ ulg window_size;
+ /* Actual size of window: 2*wSize, except when the user input buffer
+ * is directly used as sliding window.
+ */
+
+ Posf *prev;
+ /* Link to older string with same hash index. To limit the size of this
+ * array to 64K, this link is maintained only for the last 32K strings.
+ * An index in this array is thus a window index modulo 32K.
+ */
+
+ Posf *head; /* Heads of the hash chains or NIL. */
+
+ uInt ins_h; /* hash index of string to be inserted */
+ uInt hash_size; /* number of elements in hash table */
+ uInt hash_bits; /* log2(hash_size) */
+ uInt hash_mask; /* hash_size-1 */
+
+ uInt hash_shift;
+ /* Number of bits by which ins_h must be shifted at each input
+ * step. It must be such that after MIN_MATCH steps, the oldest
+ * byte no longer takes part in the hash key, that is:
+ * hash_shift * MIN_MATCH >= hash_bits
+ */
+
+ long block_start;
+ /* Window position at the beginning of the current output block. Gets
+ * negative when the window is moved backwards.
+ */
+
+ uInt match_length; /* length of best match */
+ IPos prev_match; /* previous match */
+ int match_available; /* set if previous match exists */
+ uInt strstart; /* start of string to insert */
+ uInt match_start; /* start of matching string */
+ uInt lookahead; /* number of valid bytes ahead in window */
+
+ uInt prev_length;
+ /* Length of the best match at previous step. Matches not greater than this
+ * are discarded. This is used in the lazy match evaluation.
+ */
+
+ uInt max_chain_length;
+ /* To speed up deflation, hash chains are never searched beyond this
+ * length. A higher limit improves compression ratio but degrades the
+ * speed.
+ */
+
+ uInt max_lazy_match;
+ /* Attempt to find a better match only when the current match is strictly
+ * smaller than this value. This mechanism is used only for compression
+ * levels >= 4.
+ */
+# define max_insert_length max_lazy_match
+ /* Insert new strings in the hash table only if the match length is not
+ * greater than this length. This saves time but degrades compression.
+ * max_insert_length is used only for compression levels <= 3.
+ */
+
+ int level; /* compression level (1..9) */
+ int strategy; /* favor or force Huffman coding*/
+
+ uInt good_match;
+ /* Use a faster search when the previous match is longer than this */
+
+ int nice_match; /* Stop searching when current match exceeds this */
+
+ /* used by trees.c: */
+ /* Didn't use ct_data typedef below to suppress compiler warning */
+ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
+ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
+
+ struct tree_desc_s l_desc; /* desc. for literal tree */
+ struct tree_desc_s d_desc; /* desc. for distance tree */
+ struct tree_desc_s bl_desc; /* desc. for bit length tree */
+
+ ush bl_count[MAX_BITS+1];
+ /* number of codes at each bit length for an optimal tree */
+
+ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
+ int heap_len; /* number of elements in the heap */
+ int heap_max; /* element of largest frequency */
+ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+ * The same heap array is used to build all trees.
+ */
+
+ uch depth[2*L_CODES+1];
+ /* Depth of each subtree used as tie breaker for trees of equal frequency
+ */
+
+ uchf *l_buf; /* buffer for literals or lengths */
+
+ uInt lit_bufsize;
+ /* Size of match buffer for literals/lengths. There are 4 reasons for
+ * limiting lit_bufsize to 64K:
+ * - frequencies can be kept in 16 bit counters
+ * - if compression is not successful for the first block, all input
+ * data is still in the window so we can still emit a stored block even
+ * when input comes from standard input. (This can also be done for
+ * all blocks if lit_bufsize is not greater than 32K.)
+ * - if compression is not successful for a file smaller than 64K, we can
+ * even emit a stored file instead of a stored block (saving 5 bytes).
+ * This is applicable only for zip (not gzip or zlib).
+ * - creating new Huffman trees less frequently may not provide fast
+ * adaptation to changes in the input data statistics. (Take for
+ * example a binary file with poorly compressible code followed by
+ * a highly compressible string table.) Smaller buffer sizes give
+ * fast adaptation but have of course the overhead of transmitting
+ * trees more frequently.
+ * - I can't count above 4
+ */
+
+ uInt last_lit; /* running index in l_buf */
+
+ ushf *d_buf;
+ /* Buffer for distances. To simplify the code, d_buf and l_buf have
+ * the same number of elements. To use different lengths, an extra flag
+ * array would be necessary.
+ */
+
+ ulg opt_len; /* bit length of current block with optimal trees */
+ ulg static_len; /* bit length of current block with static trees */
+ uInt matches; /* number of string matches in current block */
+ uInt insert; /* bytes at end of window left to insert */
+
+#ifdef DEBUG
+ ulg compressed_len; /* total bit length of compressed file mod 2^32 */
+ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
+#endif
+
+ ush bi_buf;
+ /* Output buffer. bits are inserted starting at the bottom (least
+ * significant bits).
+ */
+ int bi_valid;
+ /* Number of valid bits in bi_buf. All bits above the last valid bit
+ * are always zero.
+ */
+
+ ulg high_water;
+ /* High water mark offset in window for initialized bytes -- bytes above
+ * this are set to zero in order to avoid memory check warnings when
+ * longest match routines access bytes past the input. This is then
+ * updated to the new high water mark.
+ */
+
+} FAR deflate_state;
+
+/* Output a byte on the stream.
+ * IN assertion: there is enough room in pending_buf.
+ */
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+
+
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+/* Minimum amount of lookahead, except at the end of the input file.
+ * See deflate.c for comments about the MIN_MATCH+1.
+ */
+
+#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
+/* In order to simplify the code, particularly on 16 bit machines, match
+ * distances are limited to MAX_DIST instead of WSIZE.
+ */
+
+#define WIN_INIT MAX_MATCH
+/* Number of bytes after end of data in window to initialize in order to avoid
+ memory checker errors from longest match routines */
+
+ /* in trees.c */
+void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+
+#define d_code(dist) \
+ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. _dist_code[256] and _dist_code[257] are never
+ * used.
+ */
+
+#ifndef DEBUG
+/* Inline versions of _tr_tally for speed: */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+ extern uch ZLIB_INTERNAL _length_code[];
+ extern uch ZLIB_INTERNAL _dist_code[];
+#else
+ extern const uch ZLIB_INTERNAL _length_code[];
+ extern const uch ZLIB_INTERNAL _dist_code[];
+#endif
+
+# define _tr_tally_lit(s, c, flush) \
+ { uch cc = (c); \
+ s->d_buf[s->last_lit] = 0; \
+ s->l_buf[s->last_lit++] = cc; \
+ s->dyn_ltree[cc].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+# define _tr_tally_dist(s, distance, length, flush) \
+ { uch len = (length); \
+ ush dist = (distance); \
+ s->d_buf[s->last_lit] = dist; \
+ s->l_buf[s->last_lit++] = len; \
+ dist--; \
+ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+ s->dyn_dtree[d_code(dist)].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+#else
+# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
+# define _tr_tally_dist(s, distance, length, flush) \
+ flush = _tr_tally(s, distance, length)
+#endif
+
+#endif /* DEFLATE_H */
diff --git a/src/Common/zlib/gzclose.c b/src/Common/zlib/gzclose.c
new file mode 100644
index 0000000..caeb99a
--- /dev/null
+++ b/src/Common/zlib/gzclose.c
@@ -0,0 +1,25 @@
+/* gzclose.c -- zlib gzclose() function
+ * Copyright (C) 2004, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* gzclose() is in a separate file so that it is linked in only if it is used.
+ That way the other gzclose functions can be used instead to avoid linking in
+ unneeded compression or decompression routines. */
+int ZEXPORT gzclose(file)
+ gzFile file;
+{
+#ifndef NO_GZCOMPRESS
+ gz_statep state;
+
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+#else
+ return gzclose_r(file);
+#endif
+}
diff --git a/src/Common/zlib/gzguts.h b/src/Common/zlib/gzguts.h
new file mode 100644
index 0000000..d87659d
--- /dev/null
+++ b/src/Common/zlib/gzguts.h
@@ -0,0 +1,209 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifdef _LARGEFILE64_SOURCE
+# ifndef _LARGEFILE_SOURCE
+# define _LARGEFILE_SOURCE 1
+# endif
+# ifdef _FILE_OFFSET_BITS
+# undef _FILE_OFFSET_BITS
+# endif
+#endif
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+# include <limits.h>
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+# include <io.h>
+#endif
+
+#ifdef WINAPI_FAMILY
+# define open _open
+# define read _read
+# define write _write
+# define close _close
+#endif
+
+#ifdef NO_DEFLATE /* for compatibility with old definition */
+# define NO_GZCOMPRESS
+#endif
+
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(__CYGWIN__)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+# ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+ but for now we just assume it doesn't. */
+# define NO_vsnprintf
+# endif
+# ifdef __TURBOC__
+# define NO_vsnprintf
+# endif
+# ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+# if !defined(vsnprintf) && !defined(NO_vsnprintf)
+# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+# define vsnprintf _vsnprintf
+# endif
+# endif
+# endif
+# ifdef __SASC
+# define NO_vsnprintf
+# endif
+# ifdef VMS
+# define NO_vsnprintf
+# endif
+# ifdef __OS400__
+# define NO_vsnprintf
+# endif
+# ifdef __MVS__
+# define NO_vsnprintf
+# endif
+#endif
+
+/* unlike snprintf (which is required in C99, yet still not supported by
+ Microsoft more than a decade later!), _snprintf does not guarantee null
+ termination of the result -- however this is only used in gzlib.c where
+ the result is assured to fit in the space provided */
+#ifdef _MSC_VER
+# define snprintf _snprintf
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+ extern voidp malloc OF((uInt size));
+ extern void free OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+# include <windows.h>
+# define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+# ifndef NO_STRERROR
+# include <errno.h>
+# define zstrerror() strerror(errno)
+# else
+# define zstrerror() "stdio error (consult errno)"
+# endif
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+#endif
+
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading (this and
+ twice this must be able to fit in an unsigned type) */
+#define GZBUFSIZE 8192
+
+/* gzip modes, also provide a little integrity check on the passed structure */
+#define GZ_NONE 0
+#define GZ_READ 7247
+#define GZ_WRITE 31153
+#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
+
+/* values for gz_state how */
+#define LOOK 0 /* look for a gzip header */
+#define COPY 1 /* copy input directly */
+#define GZIP 2 /* decompress a gzip stream */
+
+/* internal gzip file state data structure */
+typedef struct {
+ /* exposed contents for gzgetc() macro */
+ struct gzFile_s x; /* "x" for exposed */
+ /* x.have: number of bytes available at x.next */
+ /* x.next: next output data to deliver or write */
+ /* x.pos: current position in uncompressed data */
+ /* used for both reading and writing */
+ int mode; /* see gzip modes above */
+ int fd; /* file descriptor */
+ char *path; /* path or fd for error messages */
+ unsigned size; /* buffer size, zero if not allocated yet */
+ unsigned want; /* requested buffer size, default is GZBUFSIZE */
+ unsigned char *in; /* input buffer */
+ unsigned char *out; /* output buffer (double-sized when reading) */
+ int direct; /* 0 if processing gzip, 1 if transparent */
+ /* just for reading */
+ int how; /* 0: get header, 1: copy, 2: decompress */
+ z_off64_t start; /* where the gzip data started, for rewinding */
+ int eof; /* true if end of input file reached */
+ int past; /* true if read requested past end */
+ /* just for writing */
+ int level; /* compression level */
+ int strategy; /* compression strategy */
+ /* seek request */
+ z_off64_t skip; /* amount to skip (already rewound if backwards) */
+ int seek; /* true if seek request pending */
+ /* error information */
+ int err; /* error code */
+ char *msg; /* error message */
+ /* zlib inflate or deflate stream */
+ z_stream strm; /* stream structure in-place (not a pointer) */
+} gz_state;
+typedef gz_state FAR *gz_statep;
+
+/* shared functions */
+void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
+#endif
+
+/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
+ value -- needed when comparing unsigned to z_off64_t, which is signed
+ (possible z_off64_t types off_t, off64_t, and long are all signed) */
+#ifdef INT_MAX
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/src/Common/zlib/gzlib.c b/src/Common/zlib/gzlib.c
new file mode 100644
index 0000000..fae202e
--- /dev/null
+++ b/src/Common/zlib/gzlib.c
@@ -0,0 +1,634 @@
+/* gzlib.c -- zlib functions common to reading and writing gzip files
+ * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+#if defined(_WIN32) && !defined(__BORLANDC__)
+# define LSEEK _lseeki64
+#else
+#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+# define LSEEK lseek64
+#else
+# define LSEEK lseek
+#endif
+#endif
+
+/* Local functions */
+local void gz_reset OF((gz_statep));
+local gzFile gz_open OF((const void *, int, const char *));
+
+#if defined UNDER_CE
+
+/* Map the Windows error number in ERROR to a locale-dependent error message
+ string and return a pointer to it. Typically, the values for ERROR come
+ from GetLastError.
+
+ The string pointed to shall not be modified by the application, but may be
+ overwritten by a subsequent call to gz_strwinerror
+
+ The gz_strwinerror function does not change the current setting of
+ GetLastError. */
+char ZLIB_INTERNAL *gz_strwinerror (error)
+ DWORD error;
+{
+ static char buf[1024];
+
+ wchar_t *msgbuf;
+ DWORD lasterr = GetLastError();
+ DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL,
+ error,
+ 0, /* Default language */
+ (LPVOID)&msgbuf,
+ 0,
+ NULL);
+ if (chars != 0) {
+ /* If there is an \r\n appended, zap it. */
+ if (chars >= 2
+ && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
+ chars -= 2;
+ msgbuf[chars] = 0;
+ }
+
+ if (chars > sizeof (buf) - 1) {
+ chars = sizeof (buf) - 1;
+ msgbuf[chars] = 0;
+ }
+
+ wcstombs(buf, msgbuf, chars + 1);
+ LocalFree(msgbuf);
+ }
+ else {
+ sprintf(buf, "unknown win32 error (%ld)", error);
+ }
+
+ SetLastError(lasterr);
+ return buf;
+}
+
+#endif /* UNDER_CE */
+
+/* Reset gzip file state */
+local void gz_reset(state)
+ gz_statep state;
+{
+ state->x.have = 0; /* no output data available */
+ if (state->mode == GZ_READ) { /* for reading ... */
+ state->eof = 0; /* not at end of file */
+ state->past = 0; /* have not read past end yet */
+ state->how = LOOK; /* look for gzip header */
+ }
+ state->seek = 0; /* no seek request pending */
+ gz_error(state, Z_OK, NULL); /* clear error */
+ state->x.pos = 0; /* no uncompressed data yet */
+ state->strm.avail_in = 0; /* no input data yet */
+}
+
+/* Open a gzip file either by name or file descriptor. */
+local gzFile gz_open(path, fd, mode)
+ const void *path;
+ int fd;
+ const char *mode;
+{
+ gz_statep state;
+ size_t len;
+ int oflag;
+#ifdef O_CLOEXEC
+ int cloexec = 0;
+#endif
+#ifdef O_EXCL
+ int exclusive = 0;
+#endif
+
+ /* check input */
+ if (path == NULL)
+ return NULL;
+
+ /* allocate gzFile structure to return */
+ state = (gz_statep)malloc(sizeof(gz_state));
+ if (state == NULL)
+ return NULL;
+ state->size = 0; /* no buffers allocated yet */
+ state->want = GZBUFSIZE; /* requested buffer size */
+ state->msg = NULL; /* no error message yet */
+
+ /* interpret mode */
+ state->mode = GZ_NONE;
+ state->level = Z_DEFAULT_COMPRESSION;
+ state->strategy = Z_DEFAULT_STRATEGY;
+ state->direct = 0;
+ while (*mode) {
+ if (*mode >= '0' && *mode <= '9')
+ state->level = *mode - '0';
+ else
+ switch (*mode) {
+ case 'r':
+ state->mode = GZ_READ;
+ break;
+#ifndef NO_GZCOMPRESS
+ case 'w':
+ state->mode = GZ_WRITE;
+ break;
+ case 'a':
+ state->mode = GZ_APPEND;
+ break;
+#endif
+ case '+': /* can't read and write at the same time */
+ free(state);
+ return NULL;
+ case 'b': /* ignore -- will request binary anyway */
+ break;
+#ifdef O_CLOEXEC
+ case 'e':
+ cloexec = 1;
+ break;
+#endif
+#ifdef O_EXCL
+ case 'x':
+ exclusive = 1;
+ break;
+#endif
+ case 'f':
+ state->strategy = Z_FILTERED;
+ break;
+ case 'h':
+ state->strategy = Z_HUFFMAN_ONLY;
+ break;
+ case 'R':
+ state->strategy = Z_RLE;
+ break;
+ case 'F':
+ state->strategy = Z_FIXED;
+ break;
+ case 'T':
+ state->direct = 1;
+ break;
+ default: /* could consider as an error, but just ignore */
+ ;
+ }
+ mode++;
+ }
+
+ /* must provide an "r", "w", or "a" */
+ if (state->mode == GZ_NONE) {
+ free(state);
+ return NULL;
+ }
+
+ /* can't force transparent read */
+ if (state->mode == GZ_READ) {
+ if (state->direct) {
+ free(state);
+ return NULL;
+ }
+ state->direct = 1; /* for empty file */
+ }
+
+ /* save the path name for error messages */
+#ifdef _WIN32
+ if (fd == -2) {
+ len = wcstombs(NULL, path, 0);
+ if (len == (size_t)-1)
+ len = 0;
+ }
+ else
+#endif
+ len = strlen((const char *)path);
+ state->path = (char *)malloc(len + 1);
+ if (state->path == NULL) {
+ free(state);
+ return NULL;
+ }
+#ifdef _WIN32
+ if (fd == -2)
+ if (len)
+ wcstombs(state->path, path, len + 1);
+ else
+ *(state->path) = 0;
+ else
+#endif
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(state->path, len + 1, "%s", (const char *)path);
+#else
+ strcpy(state->path, path);
+#endif
+
+ /* compute the flags for open() */
+ oflag =
+#ifdef O_LARGEFILE
+ O_LARGEFILE |
+#endif
+#ifdef O_BINARY
+ O_BINARY |
+#endif
+#ifdef O_CLOEXEC
+ (cloexec ? O_CLOEXEC : 0) |
+#endif
+ (state->mode == GZ_READ ?
+ O_RDONLY :
+ (O_WRONLY | O_CREAT |
+#ifdef O_EXCL
+ (exclusive ? O_EXCL : 0) |
+#endif
+ (state->mode == GZ_WRITE ?
+ O_TRUNC :
+ O_APPEND)));
+
+ /* open the file with the appropriate flags (or just use fd) */
+ state->fd = fd > -1 ? fd : (
+#ifdef _WIN32
+ fd == -2 ? _wopen(path, oflag, 0666) :
+#endif
+ open((const char *)path, oflag, 0666));
+ if (state->fd == -1) {
+ free(state->path);
+ free(state);
+ return NULL;
+ }
+ if (state->mode == GZ_APPEND)
+ state->mode = GZ_WRITE; /* simplify later checks */
+
+ /* save the current position for rewinding (only if reading) */
+ if (state->mode == GZ_READ) {
+ state->start = LSEEK(state->fd, 0, SEEK_CUR);
+ if (state->start == -1) state->start = 0;
+ }
+
+ /* initialize stream */
+ gz_reset(state);
+
+ /* return stream */
+ return (gzFile)state;
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen64(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzdopen(fd, mode)
+ int fd;
+ const char *mode;
+{
+ char *path; /* identifier for error messages */
+ gzFile gz;
+
+ if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
+ return NULL;
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+#else
+ sprintf(path, "<fd:%d>", fd); /* for debugging */
+#endif
+ gz = gz_open(path, fd, mode);
+ free(path);
+ return gz;
+}
+
+/* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+ const wchar_t *path;
+ const char *mode;
+{
+ return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzbuffer(file, size)
+ gzFile file;
+ unsigned size;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* make sure we haven't already allocated memory */
+ if (state->size != 0)
+ return -1;
+
+ /* check and set requested size */
+ if (size < 2)
+ size = 2; /* need two bytes to check magic header */
+ state->want = size;
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzrewind(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* back up and start over */
+ if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
+ return -1;
+ gz_reset(state);
+ return 0;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzseek64(file, offset, whence)
+ gzFile file;
+ z_off64_t offset;
+ int whence;
+{
+ unsigned n;
+ z_off64_t ret;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* check that there's no error */
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* can only seek from start or relative to current position */
+ if (whence != SEEK_SET && whence != SEEK_CUR)
+ return -1;
+
+ /* normalize offset to a SEEK_CUR specification */
+ if (whence == SEEK_SET)
+ offset -= state->x.pos;
+ else if (state->seek)
+ offset += state->skip;
+ state->seek = 0;
+
+ /* if within raw area while reading, just go there */
+ if (state->mode == GZ_READ && state->how == COPY &&
+ state->x.pos + offset >= 0) {
+ ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+ if (ret == -1)
+ return -1;
+ state->x.have = 0;
+ state->eof = 0;
+ state->past = 0;
+ state->seek = 0;
+ gz_error(state, Z_OK, NULL);
+ state->strm.avail_in = 0;
+ state->x.pos += offset;
+ return state->x.pos;
+ }
+
+ /* calculate skip amount, rewinding if needed for back seek when reading */
+ if (offset < 0) {
+ if (state->mode != GZ_READ) /* writing -- can't go backwards */
+ return -1;
+ offset += state->x.pos;
+ if (offset < 0) /* before start of file! */
+ return -1;
+ if (gzrewind(file) == -1) /* rewind, then skip to offset */
+ return -1;
+ }
+
+ /* if reading, skip what's in output buffer (one less gzgetc() check) */
+ if (state->mode == GZ_READ) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+ (unsigned)offset : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ offset -= n;
+ }
+
+ /* request skip (if not zero) */
+ if (offset) {
+ state->seek = 1;
+ state->skip = offset;
+ }
+ return state->x.pos + offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzseek(file, offset, whence)
+ gzFile file;
+ z_off_t offset;
+ int whence;
+{
+ z_off64_t ret;
+
+ ret = gzseek64(file, (z_off64_t)offset, whence);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gztell64(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* return position */
+ return state->x.pos + (state->seek ? state->skip : 0);
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gztell(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gztell64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzoffset64(file)
+ gzFile file;
+{
+ z_off64_t offset;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* compute and return effective offset in file */
+ offset = LSEEK(state->fd, 0, SEEK_CUR);
+ if (offset == -1)
+ return -1;
+ if (state->mode == GZ_READ) /* reading */
+ offset -= state->strm.avail_in; /* don't count buffered input */
+ return offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzoffset(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gzoffset64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzeof(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return 0;
+
+ /* return end-of-file state */
+ return state->mode == GZ_READ ? state->past : 0;
+}
+
+/* -- see zlib.h -- */
+const char * ZEXPORT gzerror(file, errnum)
+ gzFile file;
+ int *errnum;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return NULL;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return NULL;
+
+ /* return error information */
+ if (errnum != NULL)
+ *errnum = state->err;
+ return state->err == Z_MEM_ERROR ? "out of memory" :
+ (state->msg == NULL ? "" : state->msg);
+}
+
+/* -- see zlib.h -- */
+void ZEXPORT gzclearerr(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return;
+
+ /* clear error and end-of-file */
+ if (state->mode == GZ_READ) {
+ state->eof = 0;
+ state->past = 0;
+ }
+ gz_error(state, Z_OK, NULL);
+}
+
+/* Create an error message in allocated memory and set state->err and
+ state->msg accordingly. Free any previous error message already there. Do
+ not try to free or allocate space if the error is Z_MEM_ERROR (out of
+ memory). Simply save the error message as a static string. If there is an
+ allocation failure constructing the error message, then convert the error to
+ out of memory. */
+void ZLIB_INTERNAL gz_error(state, err, msg)
+ gz_statep state;
+ int err;
+ const char *msg;
+{
+ /* free previously allocated message and clear */
+ if (state->msg != NULL) {
+ if (state->err != Z_MEM_ERROR)
+ free(state->msg);
+ state->msg = NULL;
+ }
+
+ /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+ if (err != Z_OK && err != Z_BUF_ERROR)
+ state->x.have = 0;
+
+ /* set error code, and if no message, then done */
+ state->err = err;
+ if (msg == NULL)
+ return;
+
+ /* for an out of memory error, return literal string when requested */
+ if (err == Z_MEM_ERROR)
+ return;
+
+ /* construct error message with path */
+ if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
+ NULL) {
+ state->err = Z_MEM_ERROR;
+ return;
+ }
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+ "%s%s%s", state->path, ": ", msg);
+#else
+ strcpy(state->msg, state->path);
+ strcat(state->msg, ": ");
+ strcat(state->msg, msg);
+#endif
+ return;
+}
+
+#ifndef INT_MAX
+/* portably return maximum value for an int (when limits.h presumed not
+ available) -- we need to do this to cover cases where 2's complement not
+ used, since C standard permits 1's complement and sign-bit representations,
+ otherwise we could just use ((unsigned)-1) >> 1 */
+unsigned ZLIB_INTERNAL gz_intmax()
+{
+ unsigned p, q;
+
+ p = 1;
+ do {
+ q = p;
+ p <<= 1;
+ p++;
+ } while (p > q);
+ return q >> 1;
+}
+#endif
diff --git a/src/Common/zlib/gzread.c b/src/Common/zlib/gzread.c
new file mode 100644
index 0000000..bf4538e
--- /dev/null
+++ b/src/Common/zlib/gzread.c
@@ -0,0 +1,594 @@
+/* gzread.c -- zlib functions for reading gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
+local int gz_avail OF((gz_statep));
+local int gz_look OF((gz_statep));
+local int gz_decomp OF((gz_statep));
+local int gz_fetch OF((gz_statep));
+local int gz_skip OF((gz_statep, z_off64_t));
+
+/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
+ state->fd, and update state->eof, state->err, and state->msg as appropriate.
+ This function needs to loop on read(), since read() is not guaranteed to
+ read the number of bytes requested, depending on the type of descriptor. */
+local int gz_load(state, buf, len, have)
+ gz_statep state;
+ unsigned char *buf;
+ unsigned len;
+ unsigned *have;
+{
+ int ret;
+
+ *have = 0;
+ do {
+ ret = read(state->fd, buf + *have, len - *have);
+ if (ret <= 0)
+ break;
+ *have += ret;
+ } while (*have < len);
+ if (ret < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (ret == 0)
+ state->eof = 1;
+ return 0;
+}
+
+/* Load up input buffer and set eof flag if last data loaded -- return -1 on
+ error, 0 otherwise. Note that the eof flag is set when the end of the input
+ file is reached, even though there may be unused data in the buffer. Once
+ that data has been used, no more attempts will be made to read the file.
+ If strm->avail_in != 0, then the current data is moved to the beginning of
+ the input buffer, and then the remainder of the buffer is loaded with the
+ available data from the input file. */
+local int gz_avail(state)
+ gz_statep state;
+{
+ unsigned got;
+ z_streamp strm = &(state->strm);
+
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+ if (state->eof == 0) {
+ if (strm->avail_in) { /* copy what's there to the start */
+ unsigned char *p = state->in;
+ unsigned const char *q = strm->next_in;
+ unsigned n = strm->avail_in;
+ do {
+ *p++ = *q++;
+ } while (--n);
+ }
+ if (gz_load(state, state->in + strm->avail_in,
+ state->size - strm->avail_in, &got) == -1)
+ return -1;
+ strm->avail_in += got;
+ strm->next_in = state->in;
+ }
+ return 0;
+}
+
+/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
+ If this is the first time in, allocate required memory. state->how will be
+ left unchanged if there is no more input data available, will be set to COPY
+ if there is no gzip header and direct copying will be performed, or it will
+ be set to GZIP for decompression. If direct copying, then leftover input
+ data from the input buffer will be copied to the output buffer. In that
+ case, all further file reads will be directly to either the output buffer or
+ a user buffer. If decompressing, the inflate state will be initialized.
+ gz_look() will return 0 on success or -1 on failure. */
+local int gz_look(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ /* allocate read buffers and inflate memory */
+ if (state->size == 0) {
+ /* allocate buffers */
+ state->in = (unsigned char *)malloc(state->want);
+ state->out = (unsigned char *)malloc(state->want << 1);
+ if (state->in == NULL || state->out == NULL) {
+ if (state->out != NULL)
+ free(state->out);
+ if (state->in != NULL)
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ state->size = state->want;
+
+ /* allocate inflate memory */
+ state->strm.zalloc = Z_NULL;
+ state->strm.zfree = Z_NULL;
+ state->strm.opaque = Z_NULL;
+ state->strm.avail_in = 0;
+ state->strm.next_in = Z_NULL;
+ if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
+ free(state->out);
+ free(state->in);
+ state->size = 0;
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* get at least the magic bytes in the input buffer */
+ if (strm->avail_in < 2) {
+ if (gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0)
+ return 0;
+ }
+
+ /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+ a logical dilemma here when considering the case of a partially written
+ gzip file, to wit, if a single 31 byte is written, then we cannot tell
+ whether this is a single-byte file, or just a partially written gzip
+ file -- for here we assume that if a gzip file is being written, then
+ the header will be written in a single operation, so that reading a
+ single byte is sufficient indication that it is not a gzip file) */
+ if (strm->avail_in > 1 &&
+ strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+ inflateReset(strm);
+ state->how = GZIP;
+ state->direct = 0;
+ return 0;
+ }
+
+ /* no gzip header -- if we were decoding gzip before, then this is trailing
+ garbage. Ignore the trailing garbage and finish. */
+ if (state->direct == 0) {
+ strm->avail_in = 0;
+ state->eof = 1;
+ state->x.have = 0;
+ return 0;
+ }
+
+ /* doing raw i/o, copy any leftover input to output -- this assumes that
+ the output buffer is larger than the input buffer, which also assures
+ space for gzungetc() */
+ state->x.next = state->out;
+ if (strm->avail_in) {
+ memcpy(state->x.next, strm->next_in, strm->avail_in);
+ state->x.have = strm->avail_in;
+ strm->avail_in = 0;
+ }
+ state->how = COPY;
+ state->direct = 1;
+ return 0;
+}
+
+/* Decompress from input to the provided next_out and avail_out in the state.
+ On return, state->x.have and state->x.next point to the just decompressed
+ data. If the gzip stream completes, state->how is reset to LOOK to look for
+ the next gzip stream or raw data, once state->x.have is depleted. Returns 0
+ on success, -1 on failure. */
+local int gz_decomp(state)
+ gz_statep state;
+{
+ int ret = Z_OK;
+ unsigned had;
+ z_streamp strm = &(state->strm);
+
+ /* fill output buffer up to end of deflate stream */
+ had = strm->avail_out;
+ do {
+ /* get more input for inflate() */
+ if (strm->avail_in == 0 && gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0) {
+ gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+ break;
+ }
+
+ /* decompress and handle errors */
+ ret = inflate(strm, Z_NO_FLUSH);
+ if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: inflate stream corrupt");
+ return -1;
+ }
+ if (ret == Z_MEM_ERROR) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
+ gz_error(state, Z_DATA_ERROR,
+ strm->msg == NULL ? "compressed data error" : strm->msg);
+ return -1;
+ }
+ } while (strm->avail_out && ret != Z_STREAM_END);
+
+ /* update available output */
+ state->x.have = had - strm->avail_out;
+ state->x.next = strm->next_out - state->x.have;
+
+ /* if the gzip stream completed successfully, look for another */
+ if (ret == Z_STREAM_END)
+ state->how = LOOK;
+
+ /* good decompression */
+ return 0;
+}
+
+/* Fetch data and put it in the output buffer. Assumes state->x.have is 0.
+ Data is either copied from the input file or decompressed from the input
+ file depending on state->how. If state->how is LOOK, then a gzip header is
+ looked for to determine whether to copy or decompress. Returns -1 on error,
+ otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
+ end of the input file has been reached and all data has been processed. */
+local int gz_fetch(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ do {
+ switch(state->how) {
+ case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
+ if (gz_look(state) == -1)
+ return -1;
+ if (state->how == LOOK)
+ return 0;
+ break;
+ case COPY: /* -> COPY */
+ if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+ == -1)
+ return -1;
+ state->x.next = state->out;
+ return 0;
+ case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
+ strm->avail_out = state->size << 1;
+ strm->next_out = state->out;
+ if (gz_decomp(state) == -1)
+ return -1;
+ }
+ } while (state->x.have == 0 && (!state->eof || strm->avail_in));
+ return 0;
+}
+
+/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
+local int gz_skip(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ unsigned n;
+
+ /* skip over len bytes or reach end-of-file, whichever comes first */
+ while (len)
+ /* skip over whatever is in output buffer */
+ if (state->x.have) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+ (unsigned)len : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ len -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && state->strm.avail_in == 0)
+ break;
+
+ /* need more data to skip -- load up output buffer */
+ else {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ unsigned got, n;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return -1;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* get len bytes to buf, or less than len if at the end */
+ got = 0;
+ do {
+ /* first just try copying data from the output buffer */
+ if (state->x.have) {
+ n = state->x.have > len ? len : state->x.have;
+ memcpy(buf, state->x.next, n);
+ state->x.next += n;
+ state->x.have -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && strm->avail_in == 0) {
+ state->past = 1; /* tried to read past end */
+ break;
+ }
+
+ /* need output data -- for small len or new stream load up our output
+ buffer */
+ else if (state->how == LOOK || len < (state->size << 1)) {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ continue; /* no progress yet -- go back to copy above */
+ /* the copy above assures that we will leave with space in the
+ output buffer, allowing at least one gzungetc() to succeed */
+ }
+
+ /* large len -- read directly into user buffer */
+ else if (state->how == COPY) { /* read directly */
+ if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
+ return -1;
+ }
+
+ /* large len -- decompress directly into user buffer */
+ else { /* state->how == GZIP */
+ strm->avail_out = len;
+ strm->next_out = (unsigned char *)buf;
+ if (gz_decomp(state) == -1)
+ return -1;
+ n = state->x.have;
+ state->x.have = 0;
+ }
+
+ /* update progress */
+ len -= n;
+ buf = (char *)buf + n;
+ got += n;
+ state->x.pos += n;
+ } while (len);
+
+ /* return number of bytes read into user buffer (will fit in int) */
+ return (int)got;
+}
+
+/* -- see zlib.h -- */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+#else
+# undef gzgetc
+#endif
+int ZEXPORT gzgetc(file)
+ gzFile file;
+{
+ int ret;
+ unsigned char buf[1];
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* try output buffer (no need to check for skip request) */
+ if (state->x.have) {
+ state->x.have--;
+ state->x.pos++;
+ return *(state->x.next)++;
+ }
+
+ /* nothing there -- try gzread() */
+ ret = gzread(file, buf, 1);
+ return ret < 1 ? -1 : buf[0];
+}
+
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+ return gzgetc(file);
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzungetc(c, file)
+ int c;
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* can't push EOF */
+ if (c < 0)
+ return -1;
+
+ /* if output buffer empty, put byte at end (allows more pushing) */
+ if (state->x.have == 0) {
+ state->x.have = 1;
+ state->x.next = state->out + (state->size << 1) - 1;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+ }
+
+ /* if no room, give up (must have already done a gzungetc()) */
+ if (state->x.have == (state->size << 1)) {
+ gz_error(state, Z_DATA_ERROR, "out of room to push characters");
+ return -1;
+ }
+
+ /* slide output data if needed and insert byte before existing data */
+ if (state->x.next == state->out) {
+ unsigned char *src = state->out + state->x.have;
+ unsigned char *dest = state->out + (state->size << 1);
+ while (src > state->out)
+ *--dest = *--src;
+ state->x.next = dest;
+ }
+ state->x.have++;
+ state->x.next--;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+}
+
+/* -- see zlib.h -- */
+char * ZEXPORT gzgets(file, buf, len)
+ gzFile file;
+ char *buf;
+ int len;
+{
+ unsigned left, n;
+ char *str;
+ unsigned char *eol;
+ gz_statep state;
+
+ /* check parameters and get internal structure */
+ if (file == NULL || buf == NULL || len < 1)
+ return NULL;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return NULL;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return NULL;
+ }
+
+ /* copy output bytes up to new line or len - 1, whichever comes first --
+ append a terminating zero to the string (we don't check for a zero in
+ the contents, let the user worry about that) */
+ str = buf;
+ left = (unsigned)len - 1;
+ if (left) do {
+ /* assure that something is in the output buffer */
+ if (state->x.have == 0 && gz_fetch(state) == -1)
+ return NULL; /* error */
+ if (state->x.have == 0) { /* end of file */
+ state->past = 1; /* read past end */
+ break; /* return what we have */
+ }
+
+ /* look for end-of-line in current output buffer */
+ n = state->x.have > left ? left : state->x.have;
+ eol = (unsigned char *)memchr(state->x.next, '\n', n);
+ if (eol != NULL)
+ n = (unsigned)(eol - state->x.next) + 1;
+
+ /* copy through end-of-line, or remainder if not found */
+ memcpy(buf, state->x.next, n);
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ left -= n;
+ buf += n;
+ } while (left && eol == NULL);
+
+ /* return terminated string, or if nothing, end of file */
+ if (buf == str)
+ return NULL;
+ buf[0] = 0;
+ return str;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzdirect(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* if the state is not known, but we can find out, then do so (this is
+ mainly for right after a gzopen() or gzdopen()) */
+ if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+ (void)gz_look(state);
+
+ /* return 1 if transparent, 0 if processing a gzip stream */
+ return state->direct;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_r(file)
+ gzFile file;
+{
+ int ret, err;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're reading */
+ if (state->mode != GZ_READ)
+ return Z_STREAM_ERROR;
+
+ /* free memory and close file */
+ if (state->size) {
+ inflateEnd(&(state->strm));
+ free(state->out);
+ free(state->in);
+ }
+ err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ ret = close(state->fd);
+ free(state);
+ return ret ? Z_ERRNO : err;
+}
diff --git a/src/Common/zlib/gzwrite.c b/src/Common/zlib/gzwrite.c
new file mode 100644
index 0000000..aa767fb
--- /dev/null
+++ b/src/Common/zlib/gzwrite.c
@@ -0,0 +1,577 @@
+/* gzwrite.c -- zlib functions for writing gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_init OF((gz_statep));
+local int gz_comp OF((gz_statep, int));
+local int gz_zero OF((gz_statep, z_off64_t));
+
+/* Initialize state for writing a gzip file. Mark initialization by setting
+ state->size to non-zero. Return -1 on failure or 0 on success. */
+local int gz_init(state)
+ gz_statep state;
+{
+ int ret;
+ z_streamp strm = &(state->strm);
+
+ /* allocate input buffer */
+ state->in = (unsigned char *)malloc(state->want);
+ if (state->in == NULL) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* only need output buffer and deflate state if compressing */
+ if (!state->direct) {
+ /* allocate output buffer */
+ state->out = (unsigned char *)malloc(state->want);
+ if (state->out == NULL) {
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* allocate deflate memory, set up for gzip compression */
+ strm->zalloc = Z_NULL;
+ strm->zfree = Z_NULL;
+ strm->opaque = Z_NULL;
+ ret = deflateInit2(strm, state->level, Z_DEFLATED,
+ MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+ if (ret != Z_OK) {
+ free(state->out);
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* mark state as initialized */
+ state->size = state->want;
+
+ /* initialize write buffer if compressing */
+ if (!state->direct) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ state->x.next = strm->next_out;
+ }
+ return 0;
+}
+
+/* Compress whatever is at avail_in and next_in and write to the output file.
+ Return -1 if there is an error writing to the output file, otherwise 0.
+ flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
+ then the deflate() state is reset to start a new gzip stream. If gz->direct
+ is true, then simply write to the output file without compressing, and
+ ignore flush. */
+local int gz_comp(state, flush)
+ gz_statep state;
+ int flush;
+{
+ int ret, got;
+ unsigned have;
+ z_streamp strm = &(state->strm);
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return -1;
+
+ /* write directly if requested */
+ if (state->direct) {
+ got = write(state->fd, strm->next_in, strm->avail_in);
+ if (got < 0 || (unsigned)got != strm->avail_in) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in = 0;
+ return 0;
+ }
+
+ /* run deflate() on provided input until it produces no more output */
+ ret = Z_OK;
+ do {
+ /* write out current buffer contents if full, or if flushing, but if
+ doing Z_FINISH then don't write until we get to Z_STREAM_END */
+ if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
+ (flush != Z_FINISH || ret == Z_STREAM_END))) {
+ have = (unsigned)(strm->next_out - state->x.next);
+ if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+ (unsigned)got != have)) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (strm->avail_out == 0) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ }
+ state->x.next = strm->next_out;
+ }
+
+ /* compress */
+ have = strm->avail_out;
+ ret = deflate(strm, flush);
+ if (ret == Z_STREAM_ERROR) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: deflate stream corrupt");
+ return -1;
+ }
+ have -= strm->avail_out;
+ } while (have);
+
+ /* if that completed a deflate stream, allow another to start */
+ if (flush == Z_FINISH)
+ deflateReset(strm);
+
+ /* all done, no errors */
+ return 0;
+}
+
+/* Compress len zeros to output. Return -1 on error, 0 on success. */
+local int gz_zero(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ int first;
+ unsigned n;
+ z_streamp strm = &(state->strm);
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+
+ /* compress len zeros (len guaranteed > 0) */
+ first = 1;
+ while (len) {
+ n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
+ (unsigned)len : state->size;
+ if (first) {
+ memset(state->in, 0, n);
+ first = 0;
+ }
+ strm->avail_in = n;
+ strm->next_in = state->in;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+ len -= n;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ unsigned put = len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* for small len, copy to input buffer, otherwise compress directly */
+ if (len < state->size) {
+ /* copy to input buffer, compress when full */
+ do {
+ unsigned have, copy;
+
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ copy = state->size - have;
+ if (copy > len)
+ copy = len;
+ memcpy(state->in + have, buf, copy);
+ strm->avail_in += copy;
+ state->x.pos += copy;
+ buf = (const char *)buf + copy;
+ len -= copy;
+ if (len && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ } while (len);
+ }
+ else {
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* directly compress user buffer to file */
+ strm->avail_in = len;
+ strm->next_in = (z_const Bytef *)buf;
+ state->x.pos += len;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ }
+
+ /* input was all buffered or compressed (put will fit in int) */
+ return (int)put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputc(file, c)
+ gzFile file;
+ int c;
+{
+ unsigned have;
+ unsigned char buf[1];
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* try writing to input buffer for speed (state->size == 0 if buffer not
+ initialized) */
+ if (state->size) {
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ if (have < state->size) {
+ state->in[have] = c;
+ strm->avail_in++;
+ state->x.pos++;
+ return c & 0xff;
+ }
+ }
+
+ /* no room in buffer or not initialized, use gz_write() */
+ buf[0] = c;
+ if (gzwrite(file, buf, 1) != 1)
+ return -1;
+ return c & 0xff;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputs(file, str)
+ gzFile file;
+ const char *str;
+{
+ int ret;
+ unsigned len;
+
+ /* write string */
+ len = (unsigned)strlen(str);
+ ret = gzwrite(file, str, len);
+ return ret == 0 && len != 0 ? -1 : ret;
+}
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#include <stdarg.h>
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_vsnprintf
+# ifdef HAS_vsprintf_void
+ (void)vsprintf((char *)(state->in), format, va);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = vsprintf((char *)(state->in), format, va);
+# endif
+#else
+# ifdef HAS_vsnprintf_void
+ (void)vsnprintf((char *)(state->in), size, format, va);
+ len = strlen((char *)(state->in));
+# else
+ len = vsnprintf((char *)(state->in), size, format, va);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
+{
+ va_list va;
+ int ret;
+
+ va_start(va, format);
+ ret = gzvprintf(file, format, va);
+ va_end(va);
+ return ret;
+}
+
+#else /* !STDC && !Z_HAVE_STDARG_H */
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ gzFile file;
+ const char *format;
+ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that can really pass pointer in ints */
+ if (sizeof(int) != sizeof(void *))
+ return 0;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_snprintf
+# ifdef HAS_sprintf_void
+ sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+# endif
+#else
+# ifdef HAS_snprintf_void
+ snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen((char *)(state->in));
+# else
+ len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
+ a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
+ a19, a20);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzflush(file, flush)
+ gzFile file;
+ int flush;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* check flush parameter */
+ if (flush < 0 || flush > Z_FINISH)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* compress remaining data with requested flush */
+ gz_comp(state, flush);
+ return state->err;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzsetparams(file, level, strategy)
+ gzFile file;
+ int level;
+ int strategy;
+{
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* if no change is requested, then do nothing */
+ if (level == state->level && strategy == state->strategy)
+ return Z_OK;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* change compression parameters for subsequent input */
+ if (state->size) {
+ /* flush previous input with previous parameters before changing */
+ if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ return state->err;
+ deflateParams(strm, level, strategy);
+ }
+ state->level = level;
+ state->strategy = strategy;
+ return Z_OK;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_w(file)
+ gzFile file;
+{
+ int ret = Z_OK;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're writing */
+ if (state->mode != GZ_WRITE)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ ret = state->err;
+ }
+
+ /* flush, free memory, and close file */
+ if (gz_comp(state, Z_FINISH) == -1)
+ ret = state->err;
+ if (state->size) {
+ if (!state->direct) {
+ (void)deflateEnd(&(state->strm));
+ free(state->out);
+ }
+ free(state->in);
+ }
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ if (close(state->fd) == -1)
+ ret = Z_ERRNO;
+ free(state);
+ return ret;
+}
diff --git a/src/Common/zlib/infback.c b/src/Common/zlib/infback.c
new file mode 100644
index 0000000..f3833c2
--- /dev/null
+++ b/src/Common/zlib/infback.c
@@ -0,0 +1,640 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ This code is largely copied from inflate.c. Normally either infback.o or
+ inflate.o would be linked into an application--not both. The interface
+ with inffast.c is retained so that optimized assembler-coded versions of
+ inflate_fast() can be used with either inflate.c or infback.c.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+ strm provides memory allocation functions in zalloc and zfree, or
+ Z_NULL to use the library memory allocation functions.
+
+ windowBits is in the range 8..15, and window is a user-supplied
+ window and output buffer that is 2**windowBits bytes.
+ */
+int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
+z_streamp strm;
+int windowBits;
+unsigned char FAR *window;
+const char *version;
+int stream_size;
+{
+ struct inflate_state FAR *state;
+
+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+ stream_size != (int)(sizeof(z_stream)))
+ return Z_VERSION_ERROR;
+ if (strm == Z_NULL || window == Z_NULL ||
+ windowBits < 8 || windowBits > 15)
+ return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ state = (struct inflate_state FAR *)ZALLOC(strm, 1,
+ sizeof(struct inflate_state));
+ if (state == Z_NULL) return Z_MEM_ERROR;
+ Tracev((stderr, "inflate: allocated\n"));
+ strm->state = (struct internal_state FAR *)state;
+ state->dmax = 32768U;
+ state->wbits = windowBits;
+ state->wsize = 1U << windowBits;
+ state->window = window;
+ state->wnext = 0;
+ state->whave = 0;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* literal/length table */
+ sym = 0;
+ while (sym < 144) state->lens[sym++] = 8;
+ while (sym < 256) state->lens[sym++] = 9;
+ while (sym < 280) state->lens[sym++] = 7;
+ while (sym < 288) state->lens[sym++] = 8;
+ next = fixed;
+ lenfix = next;
+ bits = 9;
+ inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+/* Macros for inflateBack(): */
+
+/* Load returned state from inflate_fast() */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Set state from registers for inflate_fast() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+ do { \
+ hold = 0; \
+ bits = 0; \
+ } while (0)
+
+/* Assure that some input is available. If input is requested, but denied,
+ then return a Z_BUF_ERROR from inflateBack(). */
+#define PULL() \
+ do { \
+ if (have == 0) { \
+ have = in(in_desc, &next); \
+ if (have == 0) { \
+ next = Z_NULL; \
+ ret = Z_BUF_ERROR; \
+ goto inf_leave; \
+ } \
+ } \
+ } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflateBack()
+ with an error if there is no input available. */
+#define PULLBYTE() \
+ do { \
+ PULL(); \
+ have--; \
+ hold += (unsigned long)(*next++) << bits; \
+ bits += 8; \
+ } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator. If there is
+ not enough available input to do that, then return from inflateBack() with
+ an error. */
+#define NEEDBITS(n) \
+ do { \
+ while (bits < (unsigned)(n)) \
+ PULLBYTE(); \
+ } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+ ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+ do { \
+ hold >>= (n); \
+ bits -= (unsigned)(n); \
+ } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+ do { \
+ hold >>= bits & 7; \
+ bits -= bits & 7; \
+ } while (0)
+
+/* Assure that some output space is available, by writing out the window
+ if it's full. If the write fails, return from inflateBack() with a
+ Z_BUF_ERROR. */
+#define ROOM() \
+ do { \
+ if (left == 0) { \
+ put = state->window; \
+ left = state->wsize; \
+ state->whave = left; \
+ if (out(out_desc, put, left)) { \
+ ret = Z_BUF_ERROR; \
+ goto inf_leave; \
+ } \
+ } \
+ } while (0)
+
+/*
+ strm provides the memory allocation functions and window buffer on input,
+ and provides information on the unused input on return. For Z_DATA_ERROR
+ returns, strm will also provide an error message.
+
+ in() and out() are the call-back input and output functions. When
+ inflateBack() needs more input, it calls in(). When inflateBack() has
+ filled the window with output, or when it completes with data in the
+ window, it calls out() to write out the data. The application must not
+ change the provided input until in() is called again or inflateBack()
+ returns. The application must not change the window/output buffer until
+ inflateBack() returns.
+
+ in() and out() are called with a descriptor parameter provided in the
+ inflateBack() call. This parameter can be a structure that provides the
+ information required to do the read or write, as well as accumulated
+ information on the input and output such as totals and check values.
+
+ in() should return zero on failure. out() should return non-zero on
+ failure. If either in() or out() fails, than inflateBack() returns a
+ Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
+ was in() or out() that caused in the error. Otherwise, inflateBack()
+ returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
+ error, or Z_MEM_ERROR if it could not allocate memory for the state.
+ inflateBack() can also return Z_STREAM_ERROR if the input parameters
+ are not correct, i.e. strm is Z_NULL or the state was not initialized.
+ */
+int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc)
+z_streamp strm;
+in_func in;
+void FAR *in_desc;
+out_func out;
+void FAR *out_desc;
+{
+ struct inflate_state FAR *state;
+ z_const unsigned char FAR *next; /* next input */
+ unsigned char FAR *put; /* next output */
+ unsigned have, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ code here; /* current decoding table entry */
+ code last; /* parent table entry */
+ unsigned len; /* length to copy for repeats, bits to drop */
+ int ret; /* return code */
+ static const unsigned short order[19] = /* permutation of code lengths */
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+ /* Check that the strm exists and that the state was initialized */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* Reset the state */
+ strm->msg = Z_NULL;
+ state->mode = TYPE;
+ state->last = 0;
+ state->whave = 0;
+ next = strm->next_in;
+ have = next != Z_NULL ? strm->avail_in : 0;
+ hold = 0;
+ bits = 0;
+ put = state->window;
+ left = state->wsize;
+
+ /* Inflate until end of block marked as last */
+ for (;;)
+ switch (state->mode) {
+ case TYPE:
+ /* determine and dispatch block type */
+ if (state->last) {
+ BYTEBITS();
+ state->mode = DONE;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN; /* decode codes */
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->mode = BAD;
+ }
+ DROPBITS(2);
+ break;
+
+ case STORED:
+ /* get and verify stored block length */
+ BYTEBITS(); /* go to byte boundary */
+ NEEDBITS(32);
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+ strm->msg = (char *)"invalid stored block lengths";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+
+ /* copy stored block from input to output */
+ while (state->length != 0) {
+ copy = state->length;
+ PULL();
+ ROOM();
+ if (copy > have) copy = have;
+ if (copy > left) copy = left;
+ zmemcpy(put, next, copy);
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state->length -= copy;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->mode = TYPE;
+ break;
+
+ case TABLE:
+ /* get dynamic table entries descriptor */
+ NEEDBITS(14);
+ state->nlen = BITS(5) + 257;
+ DROPBITS(5);
+ state->ndist = BITS(5) + 1;
+ DROPBITS(5);
+ state->ncode = BITS(4) + 4;
+ DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracev((stderr, "inflate: table sizes ok\n"));
+
+ /* get code length code lengths (not a typo) */
+ state->have = 0;
+ while (state->have < state->ncode) {
+ NEEDBITS(3);
+ state->lens[order[state->have++]] = (unsigned short)BITS(3);
+ DROPBITS(3);
+ }
+ while (state->have < 19)
+ state->lens[order[state->have++]] = 0;
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: code lengths ok\n"));
+
+ /* get length and distance code code lengths */
+ state->have = 0;
+ while (state->have < state->nlen + state->ndist) {
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ DROPBITS(here.bits);
+ state->lens[state->have++] = here.val;
+ }
+ else {
+ if (here.val == 16) {
+ NEEDBITS(here.bits + 2);
+ DROPBITS(here.bits);
+ if (state->have == 0) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ len = (unsigned)(state->lens[state->have - 1]);
+ copy = 3 + BITS(2);
+ DROPBITS(2);
+ }
+ else if (here.val == 17) {
+ NEEDBITS(here.bits + 3);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 3 + BITS(3);
+ DROPBITS(3);
+ }
+ else {
+ NEEDBITS(here.bits + 7);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 11 + BITS(7);
+ DROPBITS(7);
+ }
+ if (state->have + copy > state->nlen + state->ndist) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->mode == BAD) break;
+
+ /* check for end-of-block code (better have one) */
+ if (state->lens[256] == 0) {
+ strm->msg = (char *)"invalid code -- missing end-of-block";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (code const FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN;
+
+ case LEN:
+ /* use inflate_fast() if we have enough input and output */
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ if (state->whave < state->wsize)
+ state->whave = state->wsize - left;
+ inflate_fast(strm, state->wsize);
+ LOAD();
+ break;
+ }
+
+ /* get a literal, length, or end-of-block code */
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->lencode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ }
+ DROPBITS(here.bits);
+ state->length = (unsigned)here.val;
+
+ /* process literal */
+ if (here.op == 0) {
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ ROOM();
+ *put++ = (unsigned char)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ }
+
+ /* process end of block */
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+
+ /* invalid code */
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+
+ /* length code -- get extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+
+ /* get distance code */
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->distcode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ }
+ DROPBITS(here.bits);
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+
+ /* get distance extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ if (state->offset > state->wsize - (state->whave < state->wsize ?
+ left : 0)) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+
+ /* copy match from window to output */
+ do {
+ ROOM();
+ copy = state->wsize - state->offset;
+ if (copy < left) {
+ from = put + copy;
+ copy = left - copy;
+ }
+ else {
+ from = put - state->offset;
+ copy = left;
+ }
+ if (copy > state->length) copy = state->length;
+ state->length -= copy;
+ left -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ } while (state->length != 0);
+ break;
+
+ case DONE:
+ /* inflate stream terminated properly -- write leftover output */
+ ret = Z_STREAM_END;
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->wsize - left))
+ ret = Z_BUF_ERROR;
+ }
+ goto inf_leave;
+
+ case BAD:
+ ret = Z_DATA_ERROR;
+ goto inf_leave;
+
+ default: /* can't happen, but makes compilers happy */
+ ret = Z_STREAM_ERROR;
+ goto inf_leave;
+ }
+
+ /* Return unused input */
+ inf_leave:
+ strm->next_in = next;
+ strm->avail_in = have;
+ return ret;
+}
+
+int ZEXPORT inflateBackEnd(strm)
+z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+ Tracev((stderr, "inflate: end\n"));
+ return Z_OK;
+}
diff --git a/src/Common/zlib/inffast.c b/src/Common/zlib/inffast.c
new file mode 100644
index 0000000..bda59ce
--- /dev/null
+++ b/src/Common/zlib/inffast.c
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+ Based on testing to date,
+ Pre-increment preferred for:
+ - PowerPC G3 (Adler)
+ - MIPS R5000 (Randers-Pehrson)
+ Post-increment preferred for:
+ - none
+ No measurable difference:
+ - Pentium III (Anderson)
+ - M68060 (Nikl)
+ */
+#ifdef POSTINC
+# define OFF 0
+# define PUP(a) *(a)++
+#else
+# define OFF 1
+# define PUP(a) *++(a)
+#endif
+
+/*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state->mode == LEN
+ strm->avail_in >= 6
+ strm->avail_out >= 258
+ start >= strm->avail_out
+ state->bits < 8
+
+ On return, state->mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm->avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+void ZLIB_INTERNAL inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ z_const unsigned char FAR *in; /* local strm->next_in */
+ z_const unsigned char FAR *last; /* have enough input while in < last */
+ unsigned char FAR *out; /* local strm->next_out */
+ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
+ unsigned char FAR *end; /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+ unsigned dmax; /* maximum distance from zlib header */
+#endif
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
+ unsigned long hold; /* local strm->hold */
+ unsigned bits; /* local strm->bits */
+ code const FAR *lcode; /* local strm->lencode */
+ code const FAR *dcode; /* local strm->distcode */
+ unsigned lmask; /* mask for first level of length codes */
+ unsigned dmask; /* mask for first level of distance codes */
+ code here; /* retrieved table entry */
+ unsigned op; /* code bits, operation, extra bits, or */
+ /* window position, window bytes to copy */
+ unsigned len; /* match length, unused bytes */
+ unsigned dist; /* match distance */
+ unsigned char FAR *from; /* where to copy match from */
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+ in = strm->next_in - OFF;
+ last = in + (strm->avail_in - 5);
+ out = strm->next_out - OFF;
+ beg = out - (start - strm->avail_out);
+ end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+ dmax = state->dmax;
+#endif
+ wsize = state->wsize;
+ whave = state->whave;
+ wnext = state->wnext;
+ window = state->window;
+ hold = state->hold;
+ bits = state->bits;
+ lcode = state->lencode;
+ dcode = state->distcode;
+ lmask = (1U << state->lenbits) - 1;
+ dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+ do {
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = lcode[hold & lmask];
+ dolen:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op == 0) { /* literal */
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ PUP(out) = (unsigned char)(here.val);
+ }
+ else if (op & 16) { /* length base */
+ len = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (op) {
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ len += (unsigned)hold & ((1U << op) - 1);
+ hold >>= op;
+ bits -= op;
+ }
+ Tracevv((stderr, "inflate: length %u\n", len));
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = dcode[hold & dmask];
+ dodist:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op & 16) { /* distance base */
+ dist = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ }
+ dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+ if (dist > dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ hold >>= op;
+ bits -= op;
+ Tracevv((stderr, "inflate: distance %u\n", dist));
+ op = (unsigned)(out - beg); /* max distance in output */
+ if (dist > op) { /* see if copy from window */
+ op = dist - op; /* distance back in window */
+ if (op > whave) {
+ if (state->sane) {
+ strm->msg =
+ (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ if (len <= op - whave) {
+ do {
+ PUP(out) = 0;
+ } while (--len);
+ continue;
+ }
+ len -= op - whave;
+ do {
+ PUP(out) = 0;
+ } while (--op > whave);
+ if (op == 0) {
+ from = out - dist;
+ do {
+ PUP(out) = PUP(from);
+ } while (--len);
+ continue;
+ }
+#endif
+ }
+ from = window - OFF;
+ if (wnext == 0) { /* very common case */
+ from += wsize - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ else if (wnext < op) { /* wrap around window */
+ from += wsize + wnext - op;
+ op -= wnext;
+ if (op < len) { /* some from end of window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = window - OFF;
+ if (wnext < len) { /* some from start of window */
+ op = wnext;
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ }
+ else { /* contiguous in window */
+ from += wnext - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ while (len > 2) {
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ }
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ else {
+ from = out - dist; /* copy direct from output */
+ do { /* minimum length is three */
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ } while (len > 2);
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level distance code */
+ here = dcode[here.val + (hold & ((1U << op) - 1))];
+ goto dodist;
+ }
+ else {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level length code */
+ here = lcode[here.val + (hold & ((1U << op) - 1))];
+ goto dolen;
+ }
+ else if (op & 32) { /* end-of-block */
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+ else {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ } while (in < last && out < end);
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ len = bits >> 3;
+ in -= len;
+ bits -= len << 3;
+ hold &= (1U << bits) - 1;
+
+ /* update state and return */
+ strm->next_in = in + OFF;
+ strm->next_out = out + OFF;
+ strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+ strm->avail_out = (unsigned)(out < end ?
+ 257 + (end - out) : 257 - (out - end));
+ state->hold = hold;
+ state->bits = bits;
+ return;
+}
+
+/*
+ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+ - Using bit fields for code structure
+ - Different op definition to avoid & for extra bits (do & for table bits)
+ - Three separate decoding do-loops for direct, window, and wnext == 0
+ - Special case for distance > 1 copies to do overlapped load and store copy
+ - Explicit branch predictions (based on measured branch probabilities)
+ - Deferring match copy and interspersed it with decoding subsequent codes
+ - Swapping literal/length else
+ - Swapping window/direct else
+ - Larger unrolled copy loops (three is about right)
+ - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/src/Common/zlib/inffast.h b/src/Common/zlib/inffast.h
new file mode 100644
index 0000000..e5c1aa4
--- /dev/null
+++ b/src/Common/zlib/inffast.h
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/src/Common/zlib/inffixed.h b/src/Common/zlib/inffixed.h
new file mode 100644
index 0000000..d628327
--- /dev/null
+++ b/src/Common/zlib/inffixed.h
@@ -0,0 +1,94 @@
+ /* inffixed.h -- table for decoding fixed codes
+ * Generated automatically by makefixed().
+ */
+
+ /* WARNING: this file should *not* be used by applications.
+ It is part of the implementation of this library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+ static const code lenfix[512] = {
+ {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+ {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+ {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+ {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+ {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+ {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+ {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+ {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+ {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+ {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+ {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+ {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+ {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+ {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+ {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+ {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+ {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+ {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+ {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+ {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+ {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+ {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+ {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+ {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+ {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+ {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+ {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+ {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+ {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+ {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+ {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+ {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+ {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+ {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+ {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+ {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+ {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+ {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+ {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+ {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+ {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+ {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+ {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+ {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+ {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+ {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+ {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+ {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+ {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+ {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+ {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+ {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+ {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+ {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+ {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+ {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+ {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+ {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+ {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+ {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+ {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+ {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+ {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+ {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+ {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+ {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+ {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+ {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+ {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+ {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+ {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+ {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+ {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+ {0,9,255}
+ };
+
+ static const code distfix[32] = {
+ {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+ {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+ {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+ {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+ {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+ {22,5,193},{64,5,0}
+ };
diff --git a/src/Common/zlib/inflate.c b/src/Common/zlib/inflate.c
new file mode 100644
index 0000000..870f89b
--- /dev/null
+++ b/src/Common/zlib/inflate.c
@@ -0,0 +1,1512 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * Change history:
+ *
+ * 1.2.beta0 24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ * creation of window when not needed, minimize use of window when it is
+ * needed, make inffast.c even faster, implement gzip decoding, and to
+ * improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1 25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2 4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ * to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3 22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ * buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4 1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ * source file infback.c to provide a call-back interface to inflate for
+ * programs like gzip and unzip -- uses window as output buffer to avoid
+ * window copying
+ *
+ * 1.2.beta5 1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ * input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6 4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ * make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7 27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0 9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ * for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ * and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+# ifndef BUILDFIXED
+# define BUILDFIXED
+# endif
+#endif
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+ unsigned copy));
+#ifdef BUILDFIXED
+ void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+ unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ strm->total_in = strm->total_out = state->total = 0;
+ strm->msg = Z_NULL;
+ if (state->wrap) /* to support ill-conceived Java test suite */
+ strm->adler = state->wrap & 1;
+ state->mode = HEAD;
+ state->last = 0;
+ state->havedict = 0;
+ state->dmax = 32768U;
+ state->head = Z_NULL;
+ state->hold = 0;
+ state->bits = 0;
+ state->lencode = state->distcode = state->next = state->codes;
+ state->sane = 1;
+ state->back = -1;
+ Tracev((stderr, "inflate: reset\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->wsize = 0;
+ state->whave = 0;
+ state->wnext = 0;
+ return inflateResetKeep(strm);
+}
+
+int ZEXPORT inflateReset2(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+ int wrap;
+ struct inflate_state FAR *state;
+
+ /* get the state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* extract wrap request from windowBits parameter */
+ if (windowBits < 0) {
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+ else {
+ wrap = (windowBits >> 4) + 1;
+#ifdef GUNZIP
+ if (windowBits < 48)
+ windowBits &= 15;
+#endif
+ }
+
+ /* set number of window bits, free window if different */
+ if (windowBits && (windowBits < 8 || windowBits > 15))
+ return Z_STREAM_ERROR;
+ if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+ ZFREE(strm, state->window);
+ state->window = Z_NULL;
+ }
+
+ /* update state and reset the rest of it */
+ state->wrap = wrap;
+ state->wbits = (unsigned)windowBits;
+ return inflateReset(strm);
+}
+
+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
+z_streamp strm;
+int windowBits;
+const char *version;
+int stream_size;
+{
+ int ret;
+ struct inflate_state FAR *state;
+
+ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+ stream_size != (int)(sizeof(z_stream)))
+ return Z_VERSION_ERROR;
+ if (strm == Z_NULL) return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ state = (struct inflate_state FAR *)
+ ZALLOC(strm, 1, sizeof(struct inflate_state));
+ if (state == Z_NULL) return Z_MEM_ERROR;
+ Tracev((stderr, "inflate: allocated\n"));
+ strm->state = (struct internal_state FAR *)state;
+ state->window = Z_NULL;
+ ret = inflateReset2(strm, windowBits);
+ if (ret != Z_OK) {
+ ZFREE(strm, state);
+ strm->state = Z_NULL;
+ }
+ return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+ return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (bits < 0) {
+ state->hold = 0;
+ state->bits = 0;
+ return Z_OK;
+ }
+ if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ value &= (1L << bits) - 1;
+ state->hold += value << state->bits;
+ state->bits += bits;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* literal/length table */
+ sym = 0;
+ while (sym < 144) state->lens[sym++] = 8;
+ while (sym < 256) state->lens[sym++] = 9;
+ while (sym < 280) state->lens[sym++] = 7;
+ while (sym < 288) state->lens[sym++] = 8;
+ next = fixed;
+ lenfix = next;
+ bits = 9;
+ inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+ Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also
+ defines BUILDFIXED, so the tables are built on the fly. makefixed() writes
+ those tables to stdout, which would be piped to inffixed.h. A small program
+ can simply call makefixed to do this:
+
+ void makefixed(void);
+
+ int main(void)
+ {
+ makefixed();
+ return 0;
+ }
+
+ Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+ a.out > inffixed.h
+ */
+void makefixed()
+{
+ unsigned low, size;
+ struct inflate_state state;
+
+ fixedtables(&state);
+ puts(" /* inffixed.h -- table for decoding fixed codes");
+ puts(" * Generated automatically by makefixed().");
+ puts(" */");
+ puts("");
+ puts(" /* WARNING: this file should *not* be used by applications.");
+ puts(" It is part of the implementation of this library and is");
+ puts(" subject to change. Applications should only use zlib.h.");
+ puts(" */");
+ puts("");
+ size = 1U << 9;
+ printf(" static const code lenfix[%u] = {", size);
+ low = 0;
+ for (;;) {
+ if ((low % 7) == 0) printf("\n ");
+ printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+ state.lencode[low].bits, state.lencode[low].val);
+ if (++low == size) break;
+ putchar(',');
+ }
+ puts("\n };");
+ size = 1U << 5;
+ printf("\n static const code distfix[%u] = {", size);
+ low = 0;
+ for (;;) {
+ if ((low % 6) == 0) printf("\n ");
+ printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+ state.distcode[low].val);
+ if (++low == size) break;
+ putchar(',');
+ }
+ puts("\n };");
+}
+#endif /* MAKEFIXED */
+
+/*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning. If window does not exist yet, create it. This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(strm, end, copy)
+z_streamp strm;
+const Bytef *end;
+unsigned copy;
+{
+ struct inflate_state FAR *state;
+ unsigned dist;
+
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* if it hasn't been done already, allocate space for the window */
+ if (state->window == Z_NULL) {
+ state->window = (unsigned char FAR *)
+ ZALLOC(strm, 1U << state->wbits,
+ sizeof(unsigned char));
+ if (state->window == Z_NULL) return 1;
+ }
+
+ /* if window not in use yet, initialize */
+ if (state->wsize == 0) {
+ state->wsize = 1U << state->wbits;
+ state->wnext = 0;
+ state->whave = 0;
+ }
+
+ /* copy state->wsize or less output bytes into the circular window */
+ if (copy >= state->wsize) {
+ zmemcpy(state->window, end - state->wsize, state->wsize);
+ state->wnext = 0;
+ state->whave = state->wsize;
+ }
+ else {
+ dist = state->wsize - state->wnext;
+ if (dist > copy) dist = copy;
+ zmemcpy(state->window + state->wnext, end - copy, dist);
+ copy -= dist;
+ if (copy) {
+ zmemcpy(state->window, end - copy, copy);
+ state->wnext = copy;
+ state->whave = state->wsize;
+ }
+ else {
+ state->wnext += dist;
+ if (state->wnext == state->wsize) state->wnext = 0;
+ if (state->whave < state->wsize) state->whave += dist;
+ }
+ }
+ return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+# define UPDATE(check, buf, len) \
+ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+# define UPDATE(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+# define CRC2(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ check = crc32(check, hbuf, 2); \
+ } while (0)
+
+# define CRC4(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ hbuf[2] = (unsigned char)((word) >> 16); \
+ hbuf[3] = (unsigned char)((word) >> 24); \
+ check = crc32(check, hbuf, 4); \
+ } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+ do { \
+ hold = 0; \
+ bits = 0; \
+ } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+ if there is no input available. */
+#define PULLBYTE() \
+ do { \
+ if (have == 0) goto inf_leave; \
+ have--; \
+ hold += (unsigned long)(*next++) << bits; \
+ bits += 8; \
+ } while (0)
+
+/* Assure that there are at least n bits in the bit accumulator. If there is
+ not enough available input to do that, then return from inflate(). */
+#define NEEDBITS(n) \
+ do { \
+ while (bits < (unsigned)(n)) \
+ PULLBYTE(); \
+ } while (0)
+
+/* Return the low n bits of the bit accumulator (n < 16) */
+#define BITS(n) \
+ ((unsigned)hold & ((1U << (n)) - 1))
+
+/* Remove n bits from the bit accumulator */
+#define DROPBITS(n) \
+ do { \
+ hold >>= (n); \
+ bits -= (unsigned)(n); \
+ } while (0)
+
+/* Remove zero to seven bits as needed to go to a byte boundary */
+#define BYTEBITS() \
+ do { \
+ hold >>= bits & 7; \
+ bits -= bits & 7; \
+ } while (0)
+
+/*
+ inflate() uses a state machine to process as much input data and generate as
+ much output data as possible before returning. The state machine is
+ structured roughly as follows:
+
+ for (;;) switch (state) {
+ ...
+ case STATEn:
+ if (not enough input data or output space to make progress)
+ return;
+ ... make progress ...
+ state = STATEm;
+ break;
+ ...
+ }
+
+ so when inflate() is called again, the same case is attempted again, and
+ if the appropriate resources are provided, the machine proceeds to the
+ next state. The NEEDBITS() macro is usually the way the state evaluates
+ whether it can proceed or should return. NEEDBITS() does the return if
+ the requested bits are not available. The typical use of the BITS macros
+ is:
+
+ NEEDBITS(n);
+ ... do something with BITS(n) ...
+ DROPBITS(n);
+
+ where NEEDBITS(n) either returns from inflate() if there isn't enough
+ input left to load n bits into the accumulator, or it continues. BITS(n)
+ gives the low n bits in the accumulator. When done, DROPBITS(n) drops
+ the low n bits off the accumulator. INITBITS() clears the accumulator
+ and sets the number of available bits to zero. BYTEBITS() discards just
+ enough bits to put the accumulator on a byte boundary. After BYTEBITS()
+ and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+ NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+ if there is no input available. The decoding of variable length codes uses
+ PULLBYTE() directly in order to pull just enough bytes to decode the next
+ code, and no more.
+
+ Some states loop until they get enough input, making sure that enough
+ state information is maintained to continue the loop where it left off
+ if NEEDBITS() returns in the loop. For example, want, need, and keep
+ would all have to actually be part of the saved state in case NEEDBITS()
+ returns:
+
+ case STATEw:
+ while (want < need) {
+ NEEDBITS(n);
+ keep[want++] = BITS(n);
+ DROPBITS(n);
+ }
+ state = STATEx;
+ case STATEx:
+
+ As shown above, if the next state is also the next case, then the break
+ is omitted.
+
+ A state may also return if there is not enough output space available to
+ complete that state. Those states are copying stored data, writing a
+ literal byte, and copying a matching string.
+
+ When returning, a "goto inf_leave" is used to update the total counters,
+ update the check value, and determine whether any progress has been made
+ during that inflate() call in order to return the proper return code.
+ Progress is defined as a change in either strm->avail_in or strm->avail_out.
+ When there is a window, goto inf_leave will update the window with the last
+ output written. If a goto inf_leave occurs in the middle of decompression
+ and there is no window currently, goto inf_leave will create one and copy
+ output to the window for the next call of inflate().
+
+ In this implementation, the flush parameter of inflate() only affects the
+ return code (per zlib.h). inflate() always writes as much as possible to
+ strm->next_out, given the space available and the provided input--the effect
+ documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
+ the allocation of and copying into a sliding window until necessary, which
+ provides the effect documented in zlib.h for Z_FINISH when the entire input
+ stream available. So the only thing the flush parameter actually does is:
+ when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
+ will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(strm, flush)
+z_streamp strm;
+int flush;
+{
+ struct inflate_state FAR *state;
+ z_const unsigned char FAR *next; /* next input */
+ unsigned char FAR *put; /* next output */
+ unsigned have, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned in, out; /* save starting available input and output */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ code here; /* current decoding table entry */
+ code last; /* parent table entry */
+ unsigned len; /* length to copy for repeats, bits to drop */
+ int ret; /* return code */
+#ifdef GUNZIP
+ unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
+#endif
+ static const unsigned short order[19] = /* permutation of code lengths */
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0))
+ return Z_STREAM_ERROR;
+
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
+ LOAD();
+ in = have;
+ out = left;
+ ret = Z_OK;
+ for (;;)
+ switch (state->mode) {
+ case HEAD:
+ if (state->wrap == 0) {
+ state->mode = TYPEDO;
+ break;
+ }
+ NEEDBITS(16);
+#ifdef GUNZIP
+ if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ state->check = crc32(0L, Z_NULL, 0);
+ CRC2(state->check, hold);
+ INITBITS();
+ state->mode = FLAGS;
+ break;
+ }
+ state->flags = 0; /* expect zlib header */
+ if (state->head != Z_NULL)
+ state->head->done = -1;
+ if (!(state->wrap & 1) || /* check if zlib header allowed */
+#else
+ if (
+#endif
+ ((BITS(8) << 8) + (hold >> 8)) % 31) {
+ strm->msg = (char *)"incorrect header check";
+ state->mode = BAD;
+ break;
+ }
+ if (BITS(4) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ DROPBITS(4);
+ len = BITS(4) + 8;
+ if (state->wbits == 0)
+ state->wbits = len;
+ else if (len > state->wbits) {
+ strm->msg = (char *)"invalid window size";
+ state->mode = BAD;
+ break;
+ }
+ state->dmax = 1U << len;
+ Tracev((stderr, "inflate: zlib header ok\n"));
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = hold & 0x200 ? DICTID : TYPE;
+ INITBITS();
+ break;
+#ifdef GUNZIP
+ case FLAGS:
+ NEEDBITS(16);
+ state->flags = (int)(hold);
+ if ((state->flags & 0xff) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ if (state->flags & 0xe000) {
+ strm->msg = (char *)"unknown header flags set";
+ state->mode = BAD;
+ break;
+ }
+ if (state->head != Z_NULL)
+ state->head->text = (int)((hold >> 8) & 1);
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = TIME;
+ case TIME:
+ NEEDBITS(32);
+ if (state->head != Z_NULL)
+ state->head->time = hold;
+ if (state->flags & 0x0200) CRC4(state->check, hold);
+ INITBITS();
+ state->mode = OS;
+ case OS:
+ NEEDBITS(16);
+ if (state->head != Z_NULL) {
+ state->head->xflags = (int)(hold & 0xff);
+ state->head->os = (int)(hold >> 8);
+ }
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = EXLEN;
+ case EXLEN:
+ if (state->flags & 0x0400) {
+ NEEDBITS(16);
+ state->length = (unsigned)(hold);
+ if (state->head != Z_NULL)
+ state->head->extra_len = (unsigned)hold;
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ }
+ else if (state->head != Z_NULL)
+ state->head->extra = Z_NULL;
+ state->mode = EXTRA;
+ case EXTRA:
+ if (state->flags & 0x0400) {
+ copy = state->length;
+ if (copy > have) copy = have;
+ if (copy) {
+ if (state->head != Z_NULL &&
+ state->head->extra != Z_NULL) {
+ len = state->head->extra_len - state->length;
+ zmemcpy(state->head->extra + len, next,
+ len + copy > state->head->extra_max ?
+ state->head->extra_max - len : copy);
+ }
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ state->length -= copy;
+ }
+ if (state->length) goto inf_leave;
+ }
+ state->length = 0;
+ state->mode = NAME;
+ case NAME:
+ if (state->flags & 0x0800) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->name != Z_NULL &&
+ state->length < state->head->name_max)
+ state->head->name[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->name = Z_NULL;
+ state->length = 0;
+ state->mode = COMMENT;
+ case COMMENT:
+ if (state->flags & 0x1000) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->comment != Z_NULL &&
+ state->length < state->head->comm_max)
+ state->head->comment[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->comment = Z_NULL;
+ state->mode = HCRC;
+ case HCRC:
+ if (state->flags & 0x0200) {
+ NEEDBITS(16);
+ if (hold != (state->check & 0xffff)) {
+ strm->msg = (char *)"header crc mismatch";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ }
+ if (state->head != Z_NULL) {
+ state->head->hcrc = (int)((state->flags >> 9) & 1);
+ state->head->done = 1;
+ }
+ strm->adler = state->check = crc32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ break;
+#endif
+ case DICTID:
+ NEEDBITS(32);
+ strm->adler = state->check = ZSWAP32(hold);
+ INITBITS();
+ state->mode = DICT;
+ case DICT:
+ if (state->havedict == 0) {
+ RESTORE();
+ return Z_NEED_DICT;
+ }
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ case TYPE:
+ if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ case TYPEDO:
+ if (state->last) {
+ BYTEBITS();
+ state->mode = CHECK;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN_; /* decode codes */
+ if (flush == Z_TREES) {
+ DROPBITS(2);
+ goto inf_leave;
+ }
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->mode = BAD;
+ }
+ DROPBITS(2);
+ break;
+ case STORED:
+ BYTEBITS(); /* go to byte boundary */
+ NEEDBITS(32);
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+ strm->msg = (char *)"invalid stored block lengths";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+ state->mode = COPY_;
+ if (flush == Z_TREES) goto inf_leave;
+ case COPY_:
+ state->mode = COPY;
+ case COPY:
+ copy = state->length;
+ if (copy) {
+ if (copy > have) copy = have;
+ if (copy > left) copy = left;
+ if (copy == 0) goto inf_leave;
+ zmemcpy(put, next, copy);
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state->length -= copy;
+ break;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->mode = TYPE;
+ break;
+ case TABLE:
+ NEEDBITS(14);
+ state->nlen = BITS(5) + 257;
+ DROPBITS(5);
+ state->ndist = BITS(5) + 1;
+ DROPBITS(5);
+ state->ncode = BITS(4) + 4;
+ DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracev((stderr, "inflate: table sizes ok\n"));
+ state->have = 0;
+ state->mode = LENLENS;
+ case LENLENS:
+ while (state->have < state->ncode) {
+ NEEDBITS(3);
+ state->lens[order[state->have++]] = (unsigned short)BITS(3);
+ DROPBITS(3);
+ }
+ while (state->have < 19)
+ state->lens[order[state->have++]] = 0;
+ state->next = state->codes;
+ state->lencode = (const code FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: code lengths ok\n"));
+ state->have = 0;
+ state->mode = CODELENS;
+ case CODELENS:
+ while (state->have < state->nlen + state->ndist) {
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ DROPBITS(here.bits);
+ state->lens[state->have++] = here.val;
+ }
+ else {
+ if (here.val == 16) {
+ NEEDBITS(here.bits + 2);
+ DROPBITS(here.bits);
+ if (state->have == 0) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ len = state->lens[state->have - 1];
+ copy = 3 + BITS(2);
+ DROPBITS(2);
+ }
+ else if (here.val == 17) {
+ NEEDBITS(here.bits + 3);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 3 + BITS(3);
+ DROPBITS(3);
+ }
+ else {
+ NEEDBITS(here.bits + 7);
+ DROPBITS(here.bits);
+ len = 0;
+ copy = 11 + BITS(7);
+ DROPBITS(7);
+ }
+ if (state->have + copy > state->nlen + state->ndist) {
+ strm->msg = (char *)"invalid bit length repeat";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->mode == BAD) break;
+
+ /* check for end-of-block code (better have one) */
+ if (state->lens[256] == 0) {
+ strm->msg = (char *)"invalid code -- missing end-of-block";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (const code FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (const code FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN_;
+ if (flush == Z_TREES) goto inf_leave;
+ case LEN_:
+ state->mode = LEN;
+ case LEN:
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ inflate_fast(strm, out);
+ LOAD();
+ if (state->mode == TYPE)
+ state->back = -1;
+ break;
+ }
+ state->back = 0;
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->lencode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ state->length = (unsigned)here.val;
+ if ((int)(here.op) == 0) {
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ state->mode = LIT;
+ break;
+ }
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->back = -1;
+ state->mode = TYPE;
+ break;
+ }
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = LENEXT;
+ case LENEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+ state->was = state->length;
+ state->mode = DIST;
+ case DIST:
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->distcode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = DISTEXT;
+ case DISTEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+#ifdef INFLATE_STRICT
+ if (state->offset > state->dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+ state->mode = MATCH;
+ case MATCH:
+ if (left == 0) goto inf_leave;
+ copy = out - left;
+ if (state->offset > copy) { /* copy from window */
+ copy = state->offset - copy;
+ if (copy > state->whave) {
+ if (state->sane) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ Trace((stderr, "inflate.c too far\n"));
+ copy -= state->whave;
+ if (copy > state->length) copy = state->length;
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = 0;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+#endif
+ }
+ if (copy > state->wnext) {
+ copy -= state->wnext;
+ from = state->window + (state->wsize - copy);
+ }
+ else
+ from = state->window + (state->wnext - copy);
+ if (copy > state->length) copy = state->length;
+ }
+ else { /* copy from output */
+ from = put - state->offset;
+ copy = state->length;
+ }
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+ case LIT:
+ if (left == 0) goto inf_leave;
+ *put++ = (unsigned char)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ case CHECK:
+ if (state->wrap) {
+ NEEDBITS(32);
+ out -= left;
+ strm->total_out += out;
+ state->total += out;
+ if (out)
+ strm->adler = state->check =
+ UPDATE(state->check, put - out, out);
+ out = left;
+ if ((
+#ifdef GUNZIP
+ state->flags ? hold :
+#endif
+ ZSWAP32(hold)) != state->check) {
+ strm->msg = (char *)"incorrect data check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: check matches trailer\n"));
+ }
+#ifdef GUNZIP
+ state->mode = LENGTH;
+ case LENGTH:
+ if (state->wrap && state->flags) {
+ NEEDBITS(32);
+ if (hold != (state->total & 0xffffffffUL)) {
+ strm->msg = (char *)"incorrect length check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: length matches trailer\n"));
+ }
+#endif
+ state->mode = DONE;
+ case DONE:
+ ret = Z_STREAM_END;
+ goto inf_leave;
+ case BAD:
+ ret = Z_DATA_ERROR;
+ goto inf_leave;
+ case MEM:
+ return Z_MEM_ERROR;
+ case SYNC:
+ default:
+ return Z_STREAM_ERROR;
+ }
+
+ /*
+ Return from inflate(), updating the total counts and the check value.
+ If there was no progress during the inflate() call, return a buffer
+ error. Call updatewindow() to create and/or update the window state.
+ Note: a memory error from inflate() is non-recoverable.
+ */
+ inf_leave:
+ RESTORE();
+ if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+ (state->mode < CHECK || flush != Z_FINISH)))
+ if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ in -= strm->avail_in;
+ out -= strm->avail_out;
+ strm->total_in += in;
+ strm->total_out += out;
+ state->total += out;
+ if (state->wrap && out)
+ strm->adler = state->check =
+ UPDATE(state->check, strm->next_out - out, out);
+ strm->data_type = state->bits + (state->last ? 64 : 0) +
+ (state->mode == TYPE ? 128 : 0) +
+ (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+ if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+ ret = Z_BUF_ERROR;
+ return ret;
+}
+
+int ZEXPORT inflateEnd(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->window != Z_NULL) ZFREE(strm, state->window);
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+ Tracev((stderr, "inflate: end\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* copy dictionary */
+ if (state->whave && dictionary != Z_NULL) {
+ zmemcpy(dictionary, state->window + state->wnext,
+ state->whave - state->wnext);
+ zmemcpy(dictionary + state->whave - state->wnext,
+ state->window, state->wnext);
+ }
+ if (dictLength != Z_NULL)
+ *dictLength = state->whave;
+ return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+ struct inflate_state FAR *state;
+ unsigned long dictid;
+ int ret;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->wrap != 0 && state->mode != DICT)
+ return Z_STREAM_ERROR;
+
+ /* check for correct dictionary identifier */
+ if (state->mode == DICT) {
+ dictid = adler32(0L, Z_NULL, 0);
+ dictid = adler32(dictid, dictionary, dictLength);
+ if (dictid != state->check)
+ return Z_DATA_ERROR;
+ }
+
+ /* copy dictionary to window using updatewindow(), which will amend the
+ existing dictionary if appropriate */
+ ret = updatewindow(strm, dictionary + dictLength, dictLength);
+ if (ret) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ state->havedict = 1;
+ Tracev((stderr, "inflate: dictionary set\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+ /* save header structure */
+ state->head = head;
+ head->done = 0;
+ return Z_OK;
+}
+
+/*
+ Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found
+ or when out of input. When called, *have is the number of pattern bytes
+ found in order so far, in 0..3. On return *have is updated to the new
+ state. If on return *have equals four, then the pattern was found and the
+ return value is how many bytes were read including the last byte of the
+ pattern. If *have is less than four, then the pattern has not been found
+ yet and the return value is len. In the latter case, syncsearch() can be
+ called again with more data and the *have state. *have is initialized to
+ zero for the first call.
+ */
+local unsigned syncsearch(have, buf, len)
+unsigned FAR *have;
+const unsigned char FAR *buf;
+unsigned len;
+{
+ unsigned got;
+ unsigned next;
+
+ got = *have;
+ next = 0;
+ while (next < len && got < 4) {
+ if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+ got++;
+ else if (buf[next])
+ got = 0;
+ else
+ got = 4 - got;
+ next++;
+ }
+ *have = got;
+ return next;
+}
+
+int ZEXPORT inflateSync(strm)
+z_streamp strm;
+{
+ unsigned len; /* number of bytes to look at or looked at */
+ unsigned long in, out; /* temporary to save total_in and total_out */
+ unsigned char buf[4]; /* to restore bit buffer to byte string */
+ struct inflate_state FAR *state;
+
+ /* check parameters */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+ /* if first time, start search in bit buffer */
+ if (state->mode != SYNC) {
+ state->mode = SYNC;
+ state->hold <<= state->bits & 7;
+ state->bits -= state->bits & 7;
+ len = 0;
+ while (state->bits >= 8) {
+ buf[len++] = (unsigned char)(state->hold);
+ state->hold >>= 8;
+ state->bits -= 8;
+ }
+ state->have = 0;
+ syncsearch(&(state->have), buf, len);
+ }
+
+ /* search available input */
+ len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+ strm->avail_in -= len;
+ strm->next_in += len;
+ strm->total_in += len;
+
+ /* return no joy or set up to restart inflate() on a new block */
+ if (state->have != 4) return Z_DATA_ERROR;
+ in = strm->total_in; out = strm->total_out;
+ inflateReset(strm);
+ strm->total_in = in; strm->total_out = out;
+ state->mode = TYPE;
+ return Z_OK;
+}
+
+/*
+ Returns true if inflate is currently at the end of a block generated by
+ Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+ implementation to provide an additional safety check. PPP uses
+ Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+ block. When decompressing, PPP checks that at the end of input packet,
+ inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+z_streamp dest;
+z_streamp source;
+{
+ struct inflate_state FAR *state;
+ struct inflate_state FAR *copy;
+ unsigned char FAR *window;
+ unsigned wsize;
+
+ /* check input */
+ if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+ source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)source->state;
+
+ /* allocate space */
+ copy = (struct inflate_state FAR *)
+ ZALLOC(source, 1, sizeof(struct inflate_state));
+ if (copy == Z_NULL) return Z_MEM_ERROR;
+ window = Z_NULL;
+ if (state->window != Z_NULL) {
+ window = (unsigned char FAR *)
+ ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+ if (window == Z_NULL) {
+ ZFREE(source, copy);
+ return Z_MEM_ERROR;
+ }
+ }
+
+ /* copy state */
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+ zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ if (state->lencode >= state->codes &&
+ state->lencode <= state->codes + ENOUGH - 1) {
+ copy->lencode = copy->codes + (state->lencode - state->codes);
+ copy->distcode = copy->codes + (state->distcode - state->codes);
+ }
+ copy->next = copy->codes + (state->next - state->codes);
+ if (window != Z_NULL) {
+ wsize = 1U << state->wbits;
+ zmemcpy(window, state->window, wsize);
+ }
+ copy->window = window;
+ dest->state = (struct internal_state FAR *)copy;
+ return Z_OK;
+}
+
+int ZEXPORT inflateUndermine(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ return Z_OK;
+#else
+ state->sane = 1;
+ return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+ state = (struct inflate_state FAR *)strm->state;
+ return ((long)(state->back) << 16) +
+ (state->mode == COPY ? state->length :
+ (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/src/Common/zlib/inflate.h b/src/Common/zlib/inflate.h
new file mode 100644
index 0000000..95f4986
--- /dev/null
+++ b/src/Common/zlib/inflate.h
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip decoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+ HEAD, /* i: waiting for magic header */
+ FLAGS, /* i: waiting for method and flags (gzip) */
+ TIME, /* i: waiting for modification time (gzip) */
+ OS, /* i: waiting for extra flags and operating system (gzip) */
+ EXLEN, /* i: waiting for extra length (gzip) */
+ EXTRA, /* i: waiting for extra bytes (gzip) */
+ NAME, /* i: waiting for end of file name (gzip) */
+ COMMENT, /* i: waiting for end of comment (gzip) */
+ HCRC, /* i: waiting for header crc (gzip) */
+ DICTID, /* i: waiting for dictionary check value */
+ DICT, /* waiting for inflateSetDictionary() call */
+ TYPE, /* i: waiting for type bits, including last-flag bit */
+ TYPEDO, /* i: same, but skip check to exit inflate on new block */
+ STORED, /* i: waiting for stored size (length and complement) */
+ COPY_, /* i/o: same as COPY below, but only first time in */
+ COPY, /* i/o: waiting for input or output to copy stored block */
+ TABLE, /* i: waiting for dynamic block table lengths */
+ LENLENS, /* i: waiting for code length code lengths */
+ CODELENS, /* i: waiting for length/lit and distance code lengths */
+ LEN_, /* i: same as LEN below, but only first time in */
+ LEN, /* i: waiting for length/lit/eob code */
+ LENEXT, /* i: waiting for length extra bits */
+ DIST, /* i: waiting for distance code */
+ DISTEXT, /* i: waiting for distance extra bits */
+ MATCH, /* o: waiting for output space to copy string */
+ LIT, /* o: waiting for output space to write literal */
+ CHECK, /* i: waiting for 32-bit check value */
+ LENGTH, /* i: waiting for 32-bit length (gzip) */
+ DONE, /* finished check, done -- remain here until reset */
+ BAD, /* got a data error -- remain here until reset */
+ MEM, /* got an inflate() memory error -- remain here until reset */
+ SYNC /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+ State transitions between above modes -
+
+ (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+ Process header:
+ HEAD -> (gzip) or (zlib) or (raw)
+ (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+ HCRC -> TYPE
+ (zlib) -> DICTID or TYPE
+ DICTID -> DICT -> TYPE
+ (raw) -> TYPEDO
+ Read deflate blocks:
+ TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+ STORED -> COPY_ -> COPY -> TYPE
+ TABLE -> LENLENS -> CODELENS -> LEN_
+ LEN_ -> LEN
+ Read deflate codes in fixed or dynamic block:
+ LEN -> LENEXT or LIT or TYPE
+ LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+ LIT -> LEN
+ Process trailer:
+ CHECK -> LENGTH -> DONE
+ */
+
+/* state maintained between inflate() calls. Approximately 10K bytes. */
+struct inflate_state {
+ inflate_mode mode; /* current inflate mode */
+ int last; /* true if processing last block */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int havedict; /* true if dictionary provided */
+ int flags; /* gzip header method and flags (0 if zlib) */
+ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
+ unsigned long check; /* protected copy of check value */
+ unsigned long total; /* protected copy of output count */
+ gz_headerp head; /* where to save gzip header information */
+ /* sliding window */
+ unsigned wbits; /* log base 2 of requested window size */
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if needed */
+ /* bit accumulator */
+ unsigned long hold; /* input bit accumulator */
+ unsigned bits; /* number of bits in "in" */
+ /* for string and stored block copying */
+ unsigned length; /* literal or length of data to copy */
+ unsigned offset; /* distance back to copy string from */
+ /* for table and code decoding */
+ unsigned extra; /* extra bits needed */
+ /* fixed and dynamic code tables */
+ code const FAR *lencode; /* starting table for length/literal codes */
+ code const FAR *distcode; /* starting table for distance codes */
+ unsigned lenbits; /* index bits for lencode */
+ unsigned distbits; /* index bits for distcode */
+ /* dynamic table building */
+ unsigned ncode; /* number of code length code lengths */
+ unsigned nlen; /* number of length code lengths */
+ unsigned ndist; /* number of distance code lengths */
+ unsigned have; /* number of code lengths in lens[] */
+ code FAR *next; /* next available space in codes[] */
+ unsigned short lens[320]; /* temporary storage for code lengths */
+ unsigned short work[288]; /* work area for code table building */
+ code codes[ENOUGH]; /* space for code tables */
+ int sane; /* if false, allow invalid distance too far */
+ int back; /* bits back of last unprocessed length/lit */
+ unsigned was; /* initial length of match */
+};
diff --git a/src/Common/zlib/inftrees.c b/src/Common/zlib/inftrees.c
new file mode 100644
index 0000000..44d89cf
--- /dev/null
+++ b/src/Common/zlib/inftrees.c
@@ -0,0 +1,306 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+
+#define MAXBITS 15
+
+const char inflate_copyright[] =
+ " inflate 1.2.8 Copyright 1995-2013 Mark Adler ";
+/*
+ If you use the zlib library in a product, an acknowledgment is welcome
+ in the documentation of your product. If for some reason you cannot
+ include such an acknowledgment, I would appreciate that you keep this
+ copyright string in the executable of your product.
+ */
+
+/*
+ Build a set of tables to decode the provided canonical Huffman code.
+ The code lengths are lens[0..codes-1]. The result starts at *table,
+ whose indices are 0..2^bits-1. work is a writable array of at least
+ lens shorts, which is used as a work area. type is the type of code
+ to be generated, CODES, LENS, or DISTS. On return, zero is success,
+ -1 is an invalid code, and +1 means that ENOUGH isn't enough. table
+ on return points to the next available entry's address. bits is the
+ requested root table index bits, and on return it is the actual root
+ table index bits. It will differ if the request is greater than the
+ longest code or if it is less than the shortest code.
+ */
+int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
+codetype type;
+unsigned short FAR *lens;
+unsigned codes;
+code FAR * FAR *table;
+unsigned FAR *bits;
+unsigned short FAR *work;
+{
+ unsigned len; /* a code's length in bits */
+ unsigned sym; /* index of code symbols */
+ unsigned min, max; /* minimum and maximum code lengths */
+ unsigned root; /* number of index bits for root table */
+ unsigned curr; /* number of index bits for current table */
+ unsigned drop; /* code bits to drop for sub-table */
+ int left; /* number of prefix codes available */
+ unsigned used; /* code entries in table used */
+ unsigned huff; /* Huffman code */
+ unsigned incr; /* for incrementing code, index */
+ unsigned fill; /* index for replicating entries */
+ unsigned low; /* low bits for current root entry */
+ unsigned mask; /* mask for low root bits */
+ code here; /* table entry for duplication */
+ code FAR *next; /* next available space in table */
+ const unsigned short FAR *base; /* base value table to use */
+ const unsigned short FAR *extra; /* extra bits table to use */
+ int end; /* use base and extra for symbol > end */
+ unsigned short count[MAXBITS+1]; /* number of codes of each length */
+ unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
+ static const unsigned short lbase[31] = { /* Length codes 257..285 base */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+ static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+ static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+ 8193, 12289, 16385, 24577, 0, 0};
+ static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+ 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+ 28, 28, 29, 29, 64, 64};
+
+ /*
+ Process a set of code lengths to create a canonical Huffman code. The
+ code lengths are lens[0..codes-1]. Each length corresponds to the
+ symbols 0..codes-1. The Huffman code is generated by first sorting the
+ symbols by length from short to long, and retaining the symbol order
+ for codes with equal lengths. Then the code starts with all zero bits
+ for the first code of the shortest length, and the codes are integer
+ increments for the same length, and zeros are appended as the length
+ increases. For the deflate format, these bits are stored backwards
+ from their more natural integer increment ordering, and so when the
+ decoding tables are built in the large loop below, the integer codes
+ are incremented backwards.
+
+ This routine assumes, but does not check, that all of the entries in
+ lens[] are in the range 0..MAXBITS. The caller must assure this.
+ 1..MAXBITS is interpreted as that code length. zero means that that
+ symbol does not occur in this code.
+
+ The codes are sorted by computing a count of codes for each length,
+ creating from that a table of starting indices for each length in the
+ sorted table, and then entering the symbols in order in the sorted
+ table. The sorted table is work[], with that space being provided by
+ the caller.
+
+ The length counts are used for other purposes as well, i.e. finding
+ the minimum and maximum length codes, determining if there are any
+ codes at all, checking for a valid set of lengths, and looking ahead
+ at length counts to determine sub-table sizes when building the
+ decoding tables.
+ */
+
+ /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+ for (len = 0; len <= MAXBITS; len++)
+ count[len] = 0;
+ for (sym = 0; sym < codes; sym++)
+ count[lens[sym]]++;
+
+ /* bound code lengths, force root to be within code lengths */
+ root = *bits;
+ for (max = MAXBITS; max >= 1; max--)
+ if (count[max] != 0) break;
+ if (root > max) root = max;
+ if (max == 0) { /* no symbols to code at all */
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)1;
+ here.val = (unsigned short)0;
+ *(*table)++ = here; /* make a table to force an error */
+ *(*table)++ = here;
+ *bits = 1;
+ return 0; /* no symbols, but wait for decoding to report error */
+ }
+ for (min = 1; min < max; min++)
+ if (count[min] != 0) break;
+ if (root < min) root = min;
+
+ /* check for an over-subscribed or incomplete set of lengths */
+ left = 1;
+ for (len = 1; len <= MAXBITS; len++) {
+ left <<= 1;
+ left -= count[len];
+ if (left < 0) return -1; /* over-subscribed */
+ }
+ if (left > 0 && (type == CODES || max != 1))
+ return -1; /* incomplete set */
+
+ /* generate offsets into symbol table for each length for sorting */
+ offs[1] = 0;
+ for (len = 1; len < MAXBITS; len++)
+ offs[len + 1] = offs[len] + count[len];
+
+ /* sort symbols by length, by symbol order within each length */
+ for (sym = 0; sym < codes; sym++)
+ if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
+
+ /*
+ Create and fill in decoding tables. In this loop, the table being
+ filled is at next and has curr index bits. The code being used is huff
+ with length len. That code is converted to an index by dropping drop
+ bits off of the bottom. For codes where len is less than drop + curr,
+ those top drop + curr - len bits are incremented through all values to
+ fill the table with replicated entries.
+
+ root is the number of index bits for the root table. When len exceeds
+ root, sub-tables are created pointed to by the root entry with an index
+ of the low root bits of huff. This is saved in low to check for when a
+ new sub-table should be started. drop is zero when the root table is
+ being filled, and drop is root when sub-tables are being filled.
+
+ When a new sub-table is needed, it is necessary to look ahead in the
+ code lengths to determine what size sub-table is needed. The length
+ counts are used for this, and so count[] is decremented as codes are
+ entered in the tables.
+
+ used keeps track of how many table entries have been allocated from the
+ provided *table space. It is checked for LENS and DIST tables against
+ the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+ the initial root table size constants. See the comments in inftrees.h
+ for more information.
+
+ sym increments through all symbols, and the loop terminates when
+ all codes of length max, i.e. all codes, have been processed. This
+ routine permits incomplete codes, so another loop after this one fills
+ in the rest of the decoding tables with invalid code markers.
+ */
+
+ /* set up for code type */
+ switch (type) {
+ case CODES:
+ base = extra = work; /* dummy value--not used */
+ end = 19;
+ break;
+ case LENS:
+ base = lbase;
+ base -= 257;
+ extra = lext;
+ extra -= 257;
+ end = 256;
+ break;
+ default: /* DISTS */
+ base = dbase;
+ extra = dext;
+ end = -1;
+ }
+
+ /* initialize state for loop */
+ huff = 0; /* starting code */
+ sym = 0; /* starting code symbol */
+ len = min; /* starting code length */
+ next = *table; /* current table to fill in */
+ curr = root; /* current table index bits */
+ drop = 0; /* current bits to drop from code for index */
+ low = (unsigned)(-1); /* trigger new sub-table when len > root */
+ used = 1U << root; /* use root table entries */
+ mask = used - 1; /* mask for comparing low */
+
+ /* check available table space */
+ if ((type == LENS && used > ENOUGH_LENS) ||
+ (type == DISTS && used > ENOUGH_DISTS))
+ return 1;
+
+ /* process all codes and make table entries */
+ for (;;) {
+ /* create table entry */
+ here.bits = (unsigned char)(len - drop);
+ if ((int)(work[sym]) < end) {
+ here.op = (unsigned char)0;
+ here.val = work[sym];
+ }
+ else if ((int)(work[sym]) > end) {
+ here.op = (unsigned char)(extra[work[sym]]);
+ here.val = base[work[sym]];
+ }
+ else {
+ here.op = (unsigned char)(32 + 64); /* end of block */
+ here.val = 0;
+ }
+
+ /* replicate for those indices with low len bits equal to huff */
+ incr = 1U << (len - drop);
+ fill = 1U << curr;
+ min = fill; /* save offset to next table */
+ do {
+ fill -= incr;
+ next[(huff >> drop) + fill] = here;
+ } while (fill != 0);
+
+ /* backwards increment the len-bit code huff */
+ incr = 1U << (len - 1);
+ while (huff & incr)
+ incr >>= 1;
+ if (incr != 0) {
+ huff &= incr - 1;
+ huff += incr;
+ }
+ else
+ huff = 0;
+
+ /* go to next symbol, update count, len */
+ sym++;
+ if (--(count[len]) == 0) {
+ if (len == max) break;
+ len = lens[work[sym]];
+ }
+
+ /* create new sub-table if needed */
+ if (len > root && (huff & mask) != low) {
+ /* if first time, transition to sub-tables */
+ if (drop == 0)
+ drop = root;
+
+ /* increment past last table */
+ next += min; /* here min is 1 << curr */
+
+ /* determine length of next table */
+ curr = len - drop;
+ left = (int)(1 << curr);
+ while (curr + drop < max) {
+ left -= count[curr + drop];
+ if (left <= 0) break;
+ curr++;
+ left <<= 1;
+ }
+
+ /* check for enough space */
+ used += 1U << curr;
+ if ((type == LENS && used > ENOUGH_LENS) ||
+ (type == DISTS && used > ENOUGH_DISTS))
+ return 1;
+
+ /* point entry in root table to sub-table */
+ low = huff & mask;
+ (*table)[low].op = (unsigned char)curr;
+ (*table)[low].bits = (unsigned char)root;
+ (*table)[low].val = (unsigned short)(next - *table);
+ }
+ }
+
+ /* fill in remaining table entry if code is incomplete (guaranteed to have
+ at most one remaining entry, since if the code is incomplete, the
+ maximum code length that was allowed to get this far is one bit) */
+ if (huff != 0) {
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)(len - drop);
+ here.val = (unsigned short)0;
+ next[huff] = here;
+ }
+
+ /* set return parameters */
+ *table += used;
+ *bits = root;
+ return 0;
+}
diff --git a/src/Common/zlib/inftrees.h b/src/Common/zlib/inftrees.h
new file mode 100644
index 0000000..baa53a0
--- /dev/null
+++ b/src/Common/zlib/inftrees.h
@@ -0,0 +1,62 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-2005, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* Structure for decoding tables. Each entry provides either the
+ information needed to do the operation requested by the code that
+ indexed that table entry, or it provides a pointer to another
+ table that indexes more bits of the code. op indicates whether
+ the entry is a pointer to another table, a literal, a length or
+ distance, an end-of-block, or an invalid code. For a table
+ pointer, the low four bits of op is the number of index bits of
+ that table. For a length or distance, the low four bits of op
+ is the number of extra bits to get after the code. bits is
+ the number of bits in this code or part of the code to drop off
+ of the bit buffer. val is the actual byte to output in the case
+ of a literal, the base length or distance, or the offset from
+ the current table to the next table. Each entry is four bytes. */
+typedef struct {
+ unsigned char op; /* operation, extra bits, table bits */
+ unsigned char bits; /* bits in this part of the code */
+ unsigned short val; /* offset in table or code value */
+} code;
+
+/* op values as set by inflate_table():
+ 00000000 - literal
+ 0000tttt - table link, tttt != 0 is the number of table index bits
+ 0001eeee - length or distance, eeee is the number of extra bits
+ 01100000 - end of block
+ 01000000 - invalid code
+ */
+
+/* Maximum size of the dynamic table. The maximum number of code structures is
+ 1444, which is the sum of 852 for literal/length codes and 592 for distance
+ codes. These values were found by exhaustive searches using the program
+ examples/enough.c found in the zlib distribtution. The arguments to that
+ program are the number of symbols, the initial root table size, and the
+ maximum bit length of a code. "enough 286 9 15" for literal/length codes
+ returns returns 852, and "enough 30 6 15" for distance codes returns 592.
+ The initial root table size (9 or 6) is found in the fifth argument of the
+ inflate_table() calls in inflate.c and infback.c. If the root table size is
+ changed, then these maximum sizes would be need to be recalculated and
+ updated. */
+#define ENOUGH_LENS 852
+#define ENOUGH_DISTS 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+ CODES,
+ LENS,
+ DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+ unsigned codes, code FAR * FAR *table,
+ unsigned FAR *bits, unsigned short FAR *work));
diff --git a/src/Common/zlib/trees.c b/src/Common/zlib/trees.c
new file mode 100644
index 0000000..1fd7759
--- /dev/null
+++ b/src/Common/zlib/trees.c
@@ -0,0 +1,1226 @@
+/* trees.c -- output deflated data using Huffman coding
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * detect_data_type() function provided freely by Cosmin Truta, 2006
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * ALGORITHM
+ *
+ * The "deflation" process uses several Huffman trees. The more
+ * common source values are represented by shorter bit sequences.
+ *
+ * Each code tree is stored in a compressed form which is itself
+ * a Huffman encoding of the lengths of all the code strings (in
+ * ascending order by source values). The actual code strings are
+ * reconstructed from the lengths in the inflate process, as described
+ * in the deflate specification.
+ *
+ * REFERENCES
+ *
+ * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
+ * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
+ *
+ * Storer, James A.
+ * Data Compression: Methods and Theory, pp. 49-50.
+ * Computer Science Press, 1988. ISBN 0-7167-8156-5.
+ *
+ * Sedgewick, R.
+ * Algorithms, p290.
+ * Addison-Wesley, 1983. ISBN 0-201-06672-6.
+ */
+
+/* @(#) $Id$ */
+
+/* #define GEN_TREES_H */
+
+#include "deflate.h"
+
+#ifdef DEBUG
+# include <ctype.h>
+#endif
+
+/* ===========================================================================
+ * Constants
+ */
+
+#define MAX_BL_BITS 7
+/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+#define END_BLOCK 256
+/* end of block literal code */
+
+#define REP_3_6 16
+/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+#define REPZ_3_10 17
+/* repeat a zero length 3-10 times (3 bits of repeat count) */
+
+#define REPZ_11_138 18
+/* repeat a zero length 11-138 times (7 bits of repeat count) */
+
+local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
+ = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
+
+local const int extra_dbits[D_CODES] /* extra bits for each distance code */
+ = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+
+local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
+ = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
+
+local const uch bl_order[BL_CODES]
+ = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
+/* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+/* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+#define DIST_CODE_LEN 512 /* see definition of array dist_code below */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+/* non ANSI compilers may not accept trees.h */
+
+local ct_data static_ltree[L_CODES+2];
+/* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+local ct_data static_dtree[D_CODES];
+/* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+uch _dist_code[DIST_CODE_LEN];
+/* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+uch _length_code[MAX_MATCH-MIN_MATCH+1];
+/* length code for each normalized match length (0 == MIN_MATCH) */
+
+local int base_length[LENGTH_CODES];
+/* First normalized length for each code (0 = MIN_MATCH) */
+
+local int base_dist[D_CODES];
+/* First normalized distance for each code (0 = distance of 1) */
+
+#else
+# include "trees.h"
+#endif /* GEN_TREES_H */
+
+struct static_tree_desc_s {
+ const ct_data *static_tree; /* static tree or NULL */
+ const intf *extra_bits; /* extra bits for each code or NULL */
+ int extra_base; /* base index for extra_bits */
+ int elems; /* max number of elements in the tree */
+ int max_length; /* max bit length for the codes */
+};
+
+local static_tree_desc static_l_desc =
+{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+
+local static_tree_desc static_d_desc =
+{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
+
+local static_tree_desc static_bl_desc =
+{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
+
+/* ===========================================================================
+ * Local (static) routines in this file.
+ */
+
+local void tr_static_init OF((void));
+local void init_block OF((deflate_state *s));
+local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
+local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
+local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
+local void build_tree OF((deflate_state *s, tree_desc *desc));
+local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
+local int build_bl_tree OF((deflate_state *s));
+local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+ int blcodes));
+local void compress_block OF((deflate_state *s, const ct_data *ltree,
+ const ct_data *dtree));
+local int detect_data_type OF((deflate_state *s));
+local unsigned bi_reverse OF((unsigned value, int length));
+local void bi_windup OF((deflate_state *s));
+local void bi_flush OF((deflate_state *s));
+local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
+ int header));
+
+#ifdef GEN_TREES_H
+local void gen_trees_header OF((void));
+#endif
+
+#ifndef DEBUG
+# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
+ /* Send a code of the given tree. c and tree must not have side effects */
+
+#else /* DEBUG */
+# define send_code(s, c, tree) \
+ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
+ send_bits(s, tree[c].Code, tree[c].Len); }
+#endif
+
+/* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+#define put_short(s, w) { \
+ put_byte(s, (uch)((w) & 0xff)); \
+ put_byte(s, (uch)((ush)(w) >> 8)); \
+}
+
+/* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+#ifdef DEBUG
+local void send_bits OF((deflate_state *s, int value, int length));
+
+local void send_bits(s, value, length)
+ deflate_state *s;
+ int value; /* value to send */
+ int length; /* number of bits */
+{
+ Tracevv((stderr," l %2d v %4x ", length, value));
+ Assert(length > 0 && length <= 15, "invalid length");
+ s->bits_sent += (ulg)length;
+
+ /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+ * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+ * unused bits in value.
+ */
+ if (s->bi_valid > (int)Buf_size - length) {
+ s->bi_buf |= (ush)value << s->bi_valid;
+ put_short(s, s->bi_buf);
+ s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
+ s->bi_valid += length - Buf_size;
+ } else {
+ s->bi_buf |= (ush)value << s->bi_valid;
+ s->bi_valid += length;
+ }
+}
+#else /* !DEBUG */
+
+#define send_bits(s, value, length) \
+{ int len = length;\
+ if (s->bi_valid > (int)Buf_size - len) {\
+ int val = value;\
+ s->bi_buf |= (ush)val << s->bi_valid;\
+ put_short(s, s->bi_buf);\
+ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
+ s->bi_valid += len - Buf_size;\
+ } else {\
+ s->bi_buf |= (ush)(value) << s->bi_valid;\
+ s->bi_valid += len;\
+ }\
+}
+#endif /* DEBUG */
+
+
+/* the arguments must not have side effects */
+
+/* ===========================================================================
+ * Initialize the various 'constant' tables.
+ */
+local void tr_static_init()
+{
+#if defined(GEN_TREES_H) || !defined(STDC)
+ static int static_init_done = 0;
+ int n; /* iterates over tree elements */
+ int bits; /* bit counter */
+ int length; /* length value */
+ int code; /* code value */
+ int dist; /* distance index */
+ ush bl_count[MAX_BITS+1];
+ /* number of codes at each bit length for an optimal tree */
+
+ if (static_init_done) return;
+
+ /* For some embedded targets, global variables are not initialized: */
+#ifdef NO_INIT_GLOBAL_POINTERS
+ static_l_desc.static_tree = static_ltree;
+ static_l_desc.extra_bits = extra_lbits;
+ static_d_desc.static_tree = static_dtree;
+ static_d_desc.extra_bits = extra_dbits;
+ static_bl_desc.extra_bits = extra_blbits;
+#endif
+
+ /* Initialize the mapping length (0..255) -> length code (0..28) */
+ length = 0;
+ for (code = 0; code < LENGTH_CODES-1; code++) {
+ base_length[code] = length;
+ for (n = 0; n < (1<<extra_lbits[code]); n++) {
+ _length_code[length++] = (uch)code;
+ }
+ }
+ Assert (length == 256, "tr_static_init: length != 256");
+ /* Note that the length 255 (match length 258) can be represented
+ * in two different ways: code 284 + 5 bits or code 285, so we
+ * overwrite length_code[255] to use the best encoding:
+ */
+ _length_code[length-1] = (uch)code;
+
+ /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+ dist = 0;
+ for (code = 0 ; code < 16; code++) {
+ base_dist[code] = dist;
+ for (n = 0; n < (1<<extra_dbits[code]); n++) {
+ _dist_code[dist++] = (uch)code;
+ }
+ }
+ Assert (dist == 256, "tr_static_init: dist != 256");
+ dist >>= 7; /* from now on, all distances are divided by 128 */
+ for ( ; code < D_CODES; code++) {
+ base_dist[code] = dist << 7;
+ for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+ _dist_code[256 + dist++] = (uch)code;
+ }
+ }
+ Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+ /* Construct the codes of the static literal tree */
+ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+ n = 0;
+ while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+ while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+ while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+ while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+ /* Codes 286 and 287 do not exist, but we must include them in the
+ * tree construction to get a canonical Huffman tree (longest code
+ * all ones)
+ */
+ gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+
+ /* The static distance tree is trivial: */
+ for (n = 0; n < D_CODES; n++) {
+ static_dtree[n].Len = 5;
+ static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+ }
+ static_init_done = 1;
+
+# ifdef GEN_TREES_H
+ gen_trees_header();
+# endif
+#endif /* defined(GEN_TREES_H) || !defined(STDC) */
+}
+
+/* ===========================================================================
+ * Genererate the file trees.h describing the static trees.
+ */
+#ifdef GEN_TREES_H
+# ifndef DEBUG
+# include <stdio.h>
+# endif
+
+# define SEPARATOR(i, last, width) \
+ ((i) == (last)? "\n};\n\n" : \
+ ((i) % (width) == (width)-1 ? ",\n" : ", "))
+
+void gen_trees_header()
+{
+ FILE *header = fopen("trees.h", "w");
+ int i;
+
+ Assert (header != NULL, "Can't open trees.h");
+ fprintf(header,
+ "/* header created automatically with -DGEN_TREES_H */\n\n");
+
+ fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n");
+ for (i = 0; i < L_CODES+2; i++) {
+ fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code,
+ static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5));
+ }
+
+ fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n");
+ for (i = 0; i < D_CODES; i++) {
+ fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code,
+ static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5));
+ }
+
+ fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n");
+ for (i = 0; i < DIST_CODE_LEN; i++) {
+ fprintf(header, "%2u%s", _dist_code[i],
+ SEPARATOR(i, DIST_CODE_LEN-1, 20));
+ }
+
+ fprintf(header,
+ "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n");
+ for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) {
+ fprintf(header, "%2u%s", _length_code[i],
+ SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20));
+ }
+
+ fprintf(header, "local const int base_length[LENGTH_CODES] = {\n");
+ for (i = 0; i < LENGTH_CODES; i++) {
+ fprintf(header, "%1u%s", base_length[i],
+ SEPARATOR(i, LENGTH_CODES-1, 20));
+ }
+
+ fprintf(header, "local const int base_dist[D_CODES] = {\n");
+ for (i = 0; i < D_CODES; i++) {
+ fprintf(header, "%5u%s", base_dist[i],
+ SEPARATOR(i, D_CODES-1, 10));
+ }
+
+ fclose(header);
+}
+#endif /* GEN_TREES_H */
+
+/* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+void ZLIB_INTERNAL _tr_init(s)
+ deflate_state *s;
+{
+ tr_static_init();
+
+ s->l_desc.dyn_tree = s->dyn_ltree;
+ s->l_desc.stat_desc = &static_l_desc;
+
+ s->d_desc.dyn_tree = s->dyn_dtree;
+ s->d_desc.stat_desc = &static_d_desc;
+
+ s->bl_desc.dyn_tree = s->bl_tree;
+ s->bl_desc.stat_desc = &static_bl_desc;
+
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+#ifdef DEBUG
+ s->compressed_len = 0L;
+ s->bits_sent = 0L;
+#endif
+
+ /* Initialize the first block of the first file: */
+ init_block(s);
+}
+
+/* ===========================================================================
+ * Initialize a new block.
+ */
+local void init_block(s)
+ deflate_state *s;
+{
+ int n; /* iterates over tree elements */
+
+ /* Initialize the trees. */
+ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
+ for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
+ for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+
+ s->dyn_ltree[END_BLOCK].Freq = 1;
+ s->opt_len = s->static_len = 0L;
+ s->last_lit = s->matches = 0;
+}
+
+#define SMALLEST 1
+/* Index within the heap array of least frequent node in the Huffman tree */
+
+
+/* ===========================================================================
+ * Remove the smallest element from the heap and recreate the heap with
+ * one less element. Updates heap and heap_len.
+ */
+#define pqremove(s, tree, top) \
+{\
+ top = s->heap[SMALLEST]; \
+ s->heap[SMALLEST] = s->heap[s->heap_len--]; \
+ pqdownheap(s, tree, SMALLEST); \
+}
+
+/* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+#define smaller(tree, n, m, depth) \
+ (tree[n].Freq < tree[m].Freq || \
+ (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
+
+/* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+local void pqdownheap(s, tree, k)
+ deflate_state *s;
+ ct_data *tree; /* the tree to restore */
+ int k; /* node to move down */
+{
+ int v = s->heap[k];
+ int j = k << 1; /* left son of k */
+ while (j <= s->heap_len) {
+ /* Set j to the smallest of the two sons: */
+ if (j < s->heap_len &&
+ smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+ j++;
+ }
+ /* Exit if v is smaller than both sons */
+ if (smaller(tree, v, s->heap[j], s->depth)) break;
+
+ /* Exchange v with the smallest son */
+ s->heap[k] = s->heap[j]; k = j;
+
+ /* And continue down the tree, setting j to the left son of k */
+ j <<= 1;
+ }
+ s->heap[k] = v;
+}
+
+/* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ * above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ * array bl_count contains the frequencies for each bit length.
+ * The length opt_len is updated; static_len is also updated if stree is
+ * not null.
+ */
+local void gen_bitlen(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ ct_data *tree = desc->dyn_tree;
+ int max_code = desc->max_code;
+ const ct_data *stree = desc->stat_desc->static_tree;
+ const intf *extra = desc->stat_desc->extra_bits;
+ int base = desc->stat_desc->extra_base;
+ int max_length = desc->stat_desc->max_length;
+ int h; /* heap index */
+ int n, m; /* iterate over the tree elements */
+ int bits; /* bit length */
+ int xbits; /* extra bits */
+ ush f; /* frequency */
+ int overflow = 0; /* number of elements with bit length too large */
+
+ for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+
+ /* In a first pass, compute the optimal bit lengths (which may
+ * overflow in the case of the bit length tree).
+ */
+ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+
+ for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+ n = s->heap[h];
+ bits = tree[tree[n].Dad].Len + 1;
+ if (bits > max_length) bits = max_length, overflow++;
+ tree[n].Len = (ush)bits;
+ /* We overwrite tree[n].Dad which is no longer needed */
+
+ if (n > max_code) continue; /* not a leaf node */
+
+ s->bl_count[bits]++;
+ xbits = 0;
+ if (n >= base) xbits = extra[n-base];
+ f = tree[n].Freq;
+ s->opt_len += (ulg)f * (bits + xbits);
+ if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+ }
+ if (overflow == 0) return;
+
+ Trace((stderr,"\nbit length overflow\n"));
+ /* This happens for example on obj2 and pic of the Calgary corpus */
+
+ /* Find the first bit length which could increase: */
+ do {
+ bits = max_length-1;
+ while (s->bl_count[bits] == 0) bits--;
+ s->bl_count[bits]--; /* move one leaf down the tree */
+ s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+ s->bl_count[max_length]--;
+ /* The brother of the overflow item also moves one step up,
+ * but this does not affect bl_count[max_length]
+ */
+ overflow -= 2;
+ } while (overflow > 0);
+
+ /* Now recompute all bit lengths, scanning in increasing frequency.
+ * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+ * lengths instead of fixing only the wrong ones. This idea is taken
+ * from 'ar' written by Haruhiko Okumura.)
+ */
+ for (bits = max_length; bits != 0; bits--) {
+ n = s->bl_count[bits];
+ while (n != 0) {
+ m = s->heap[--h];
+ if (m > max_code) continue;
+ if ((unsigned) tree[m].Len != (unsigned) bits) {
+ Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s->opt_len += ((long)bits - (long)tree[m].Len)
+ *(long)tree[m].Freq;
+ tree[m].Len = (ush)bits;
+ }
+ n--;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ * zero code length.
+ */
+local void gen_codes (tree, max_code, bl_count)
+ ct_data *tree; /* the tree to decorate */
+ int max_code; /* largest code with non zero frequency */
+ ushf *bl_count; /* number of codes at each bit length */
+{
+ ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+ ush code = 0; /* running code value */
+ int bits; /* bit index */
+ int n; /* code index */
+
+ /* The distribution counts are first used to generate the code values
+ * without bit reversal.
+ */
+ for (bits = 1; bits <= MAX_BITS; bits++) {
+ next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+ }
+ /* Check that the bit counts in bl_count are consistent. The last code
+ * must be all ones.
+ */
+ Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+ "inconsistent bit counts");
+ Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+ for (n = 0; n <= max_code; n++) {
+ int len = tree[n].Len;
+ if (len == 0) continue;
+ /* Now reverse the bits */
+ tree[n].Code = bi_reverse(next_code[len]++, len);
+
+ Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+ n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+ }
+}
+
+/* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ * and corresponding code. The length opt_len is updated; static_len is
+ * also updated if stree is not null. The field max_code is set.
+ */
+local void build_tree(s, desc)
+ deflate_state *s;
+ tree_desc *desc; /* the tree descriptor */
+{
+ ct_data *tree = desc->dyn_tree;
+ const ct_data *stree = desc->stat_desc->static_tree;
+ int elems = desc->stat_desc->elems;
+ int n, m; /* iterate over heap elements */
+ int max_code = -1; /* largest code with non zero frequency */
+ int node; /* new node being created */
+
+ /* Construct the initial heap, with least frequent element in
+ * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+ * heap[0] is not used.
+ */
+ s->heap_len = 0, s->heap_max = HEAP_SIZE;
+
+ for (n = 0; n < elems; n++) {
+ if (tree[n].Freq != 0) {
+ s->heap[++(s->heap_len)] = max_code = n;
+ s->depth[n] = 0;
+ } else {
+ tree[n].Len = 0;
+ }
+ }
+
+ /* The pkzip format requires that at least one distance code exists,
+ * and that at least one bit should be sent even if there is only one
+ * possible code. So to avoid special checks later on we force at least
+ * two codes of non zero frequency.
+ */
+ while (s->heap_len < 2) {
+ node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+ tree[node].Freq = 1;
+ s->depth[node] = 0;
+ s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+ /* node is 0 or 1 so it does not have extra bits */
+ }
+ desc->max_code = max_code;
+
+ /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+ * establish sub-heaps of increasing lengths:
+ */
+ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+
+ /* Construct the Huffman tree by repeatedly combining the least two
+ * frequent nodes.
+ */
+ node = elems; /* next internal node of the tree */
+ do {
+ pqremove(s, tree, n); /* n = node of least frequency */
+ m = s->heap[SMALLEST]; /* m = node of next least frequency */
+
+ s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+ s->heap[--(s->heap_max)] = m;
+
+ /* Create a new node father of n and m */
+ tree[node].Freq = tree[n].Freq + tree[m].Freq;
+ s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ?
+ s->depth[n] : s->depth[m]) + 1);
+ tree[n].Dad = tree[m].Dad = (ush)node;
+#ifdef DUMP_BL_TREE
+ if (tree == s->bl_tree) {
+ fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+ node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+ }
+#endif
+ /* and insert the new node in the heap */
+ s->heap[SMALLEST] = node++;
+ pqdownheap(s, tree, SMALLEST);
+
+ } while (s->heap_len >= 2);
+
+ s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+
+ /* At this point, the fields freq and dad are set. We can now
+ * generate the bit lengths.
+ */
+ gen_bitlen(s, (tree_desc *)desc);
+
+ /* The field len is now set, we can generate the bit codes */
+ gen_codes ((ct_data *)tree, max_code, s->bl_count);
+}
+
+/* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+local void scan_tree (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ int n; /* iterates over all tree elements */
+ int prevlen = -1; /* last emitted length */
+ int curlen; /* length of current code */
+ int nextlen = tree[0].Len; /* length of next code */
+ int count = 0; /* repeat count of the current code */
+ int max_count = 7; /* max repeat count */
+ int min_count = 4; /* min repeat count */
+
+ if (nextlen == 0) max_count = 138, min_count = 3;
+ tree[max_code+1].Len = (ush)0xffff; /* guard */
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen; nextlen = tree[n+1].Len;
+ if (++count < max_count && curlen == nextlen) {
+ continue;
+ } else if (count < min_count) {
+ s->bl_tree[curlen].Freq += count;
+ } else if (curlen != 0) {
+ if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+ s->bl_tree[REP_3_6].Freq++;
+ } else if (count <= 10) {
+ s->bl_tree[REPZ_3_10].Freq++;
+ } else {
+ s->bl_tree[REPZ_11_138].Freq++;
+ }
+ count = 0; prevlen = curlen;
+ if (nextlen == 0) {
+ max_count = 138, min_count = 3;
+ } else if (curlen == nextlen) {
+ max_count = 6, min_count = 3;
+ } else {
+ max_count = 7, min_count = 4;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+local void send_tree (s, tree, max_code)
+ deflate_state *s;
+ ct_data *tree; /* the tree to be scanned */
+ int max_code; /* and its largest code of non zero frequency */
+{
+ int n; /* iterates over all tree elements */
+ int prevlen = -1; /* last emitted length */
+ int curlen; /* length of current code */
+ int nextlen = tree[0].Len; /* length of next code */
+ int count = 0; /* repeat count of the current code */
+ int max_count = 7; /* max repeat count */
+ int min_count = 4; /* min repeat count */
+
+ /* tree[max_code+1].Len = -1; */ /* guard already set */
+ if (nextlen == 0) max_count = 138, min_count = 3;
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen; nextlen = tree[n+1].Len;
+ if (++count < max_count && curlen == nextlen) {
+ continue;
+ } else if (count < min_count) {
+ do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+
+ } else if (curlen != 0) {
+ if (curlen != prevlen) {
+ send_code(s, curlen, s->bl_tree); count--;
+ }
+ Assert(count >= 3 && count <= 6, " 3_6?");
+ send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+
+ } else if (count <= 10) {
+ send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+
+ } else {
+ send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+ }
+ count = 0; prevlen = curlen;
+ if (nextlen == 0) {
+ max_count = 138, min_count = 3;
+ } else if (curlen == nextlen) {
+ max_count = 6, min_count = 3;
+ } else {
+ max_count = 7, min_count = 4;
+ }
+ }
+}
+
+/* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+local int build_bl_tree(s)
+ deflate_state *s;
+{
+ int max_blindex; /* index of last bit length code of non zero freq */
+
+ /* Determine the bit length frequencies for literal and distance trees */
+ scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+ scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+
+ /* Build the bit length tree: */
+ build_tree(s, (tree_desc *)(&(s->bl_desc)));
+ /* opt_len now includes the length of the tree representations, except
+ * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+ */
+
+ /* Determine the number of bit length codes to send. The pkzip format
+ * requires that at least 4 bit length codes be sent. (appnote.txt says
+ * 3 but the actual value used is 4.)
+ */
+ for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+ if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+ }
+ /* Update opt_len to include the bit length tree and counts */
+ s->opt_len += 3*(max_blindex+1) + 5+5+4;
+ Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+ s->opt_len, s->static_len));
+
+ return max_blindex;
+}
+
+/* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+local void send_all_trees(s, lcodes, dcodes, blcodes)
+ deflate_state *s;
+ int lcodes, dcodes, blcodes; /* number of codes for each tree */
+{
+ int rank; /* index in bl_order */
+
+ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+ Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+ "too many codes");
+ Tracev((stderr, "\nbl counts: "));
+ send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+ send_bits(s, dcodes-1, 5);
+ send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
+ for (rank = 0; rank < blcodes; rank++) {
+ Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+ send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+ }
+ Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+ send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+ send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+}
+
+/* ===========================================================================
+ * Send a stored block
+ */
+void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */
+#ifdef DEBUG
+ s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+ s->compressed_len += (stored_len + 4) << 3;
+#endif
+ copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+}
+
+/* ===========================================================================
+ * Flush the bits in the bit buffer to pending output (leaves at most 7 bits)
+ */
+void ZLIB_INTERNAL _tr_flush_bits(s)
+ deflate_state *s;
+{
+ bi_flush(s);
+}
+
+/* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+void ZLIB_INTERNAL _tr_align(s)
+ deflate_state *s;
+{
+ send_bits(s, STATIC_TREES<<1, 3);
+ send_code(s, END_BLOCK, static_ltree);
+#ifdef DEBUG
+ s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+#endif
+ bi_flush(s);
+}
+
+/* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last)
+ deflate_state *s;
+ charf *buf; /* input block, or NULL if too old */
+ ulg stored_len; /* length of input block */
+ int last; /* one if this is the last block for a file */
+{
+ ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+ int max_blindex = 0; /* index of last bit length code of non zero freq */
+
+ /* Build the Huffman trees unless a stored block is forced */
+ if (s->level > 0) {
+
+ /* Check if the file is binary or text */
+ if (s->strm->data_type == Z_UNKNOWN)
+ s->strm->data_type = detect_data_type(s);
+
+ /* Construct the literal and distance trees */
+ build_tree(s, (tree_desc *)(&(s->l_desc)));
+ Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+ s->static_len));
+
+ build_tree(s, (tree_desc *)(&(s->d_desc)));
+ Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+ s->static_len));
+ /* At this point, opt_len and static_len are the total bit lengths of
+ * the compressed block data, excluding the tree representations.
+ */
+
+ /* Build the bit length tree for the above two trees, and get the index
+ * in bl_order of the last bit length code to send.
+ */
+ max_blindex = build_bl_tree(s);
+
+ /* Determine the best encoding. Compute the block lengths in bytes. */
+ opt_lenb = (s->opt_len+3+7)>>3;
+ static_lenb = (s->static_len+3+7)>>3;
+
+ Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+ opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+ s->last_lit));
+
+ if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+
+ } else {
+ Assert(buf != (char*)0, "lost buf");
+ opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+ }
+
+#ifdef FORCE_STORED
+ if (buf != (char*)0) { /* force stored block */
+#else
+ if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+ /* 4: two words for the lengths */
+#endif
+ /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+ * Otherwise we can't have processed more than WSIZE input bytes since
+ * the last block flush, because compression would have been
+ * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+ * transform a block into a stored block.
+ */
+ _tr_stored_block(s, buf, stored_len, last);
+
+#ifdef FORCE_STATIC
+ } else if (static_lenb >= 0) { /* force static trees */
+#else
+ } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) {
+#endif
+ send_bits(s, (STATIC_TREES<<1)+last, 3);
+ compress_block(s, (const ct_data *)static_ltree,
+ (const ct_data *)static_dtree);
+#ifdef DEBUG
+ s->compressed_len += 3 + s->static_len;
+#endif
+ } else {
+ send_bits(s, (DYN_TREES<<1)+last, 3);
+ send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+ max_blindex+1);
+ compress_block(s, (const ct_data *)s->dyn_ltree,
+ (const ct_data *)s->dyn_dtree);
+#ifdef DEBUG
+ s->compressed_len += 3 + s->opt_len;
+#endif
+ }
+ Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+ /* The above check is made mod 2^32, for files larger than 512 MB
+ * and uLong implemented on 32 bits.
+ */
+ init_block(s);
+
+ if (last) {
+ bi_windup(s);
+#ifdef DEBUG
+ s->compressed_len += 7; /* align on byte boundary */
+#endif
+ }
+ Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+ s->compressed_len-7*last));
+}
+
+/* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+int ZLIB_INTERNAL _tr_tally (s, dist, lc)
+ deflate_state *s;
+ unsigned dist; /* distance of matched string */
+ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
+{
+ s->d_buf[s->last_lit] = (ush)dist;
+ s->l_buf[s->last_lit++] = (uch)lc;
+ if (dist == 0) {
+ /* lc is the unmatched char */
+ s->dyn_ltree[lc].Freq++;
+ } else {
+ s->matches++;
+ /* Here, lc is the match length - MIN_MATCH */
+ dist--; /* dist = match distance - 1 */
+ Assert((ush)dist < (ush)MAX_DIST(s) &&
+ (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+ (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
+
+ s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++;
+ s->dyn_dtree[d_code(dist)].Freq++;
+ }
+
+#ifdef TRUNCATE_BLOCK
+ /* Try to guess if it is profitable to stop the current block here */
+ if ((s->last_lit & 0x1fff) == 0 && s->level > 2) {
+ /* Compute an upper bound for the compressed length */
+ ulg out_length = (ulg)s->last_lit*8L;
+ ulg in_length = (ulg)((long)s->strstart - s->block_start);
+ int dcode;
+ for (dcode = 0; dcode < D_CODES; dcode++) {
+ out_length += (ulg)s->dyn_dtree[dcode].Freq *
+ (5L+extra_dbits[dcode]);
+ }
+ out_length >>= 3;
+ Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+ s->last_lit, in_length, out_length,
+ 100L - out_length*100L/in_length));
+ if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+ }
+#endif
+ return (s->last_lit == s->lit_bufsize-1);
+ /* We avoid equality with lit_bufsize because of wraparound at 64K
+ * on 16 bit machines and because stored blocks are restricted to
+ * 64K-1 bytes.
+ */
+}
+
+/* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+local void compress_block(s, ltree, dtree)
+ deflate_state *s;
+ const ct_data *ltree; /* literal tree */
+ const ct_data *dtree; /* distance tree */
+{
+ unsigned dist; /* distance of matched string */
+ int lc; /* match length or unmatched char (if dist == 0) */
+ unsigned lx = 0; /* running index in l_buf */
+ unsigned code; /* the code to send */
+ int extra; /* number of extra bits to send */
+
+ if (s->last_lit != 0) do {
+ dist = s->d_buf[lx];
+ lc = s->l_buf[lx++];
+ if (dist == 0) {
+ send_code(s, lc, ltree); /* send a literal byte */
+ Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+ } else {
+ /* Here, lc is the match length - MIN_MATCH */
+ code = _length_code[lc];
+ send_code(s, code+LITERALS+1, ltree); /* send the length code */
+ extra = extra_lbits[code];
+ if (extra != 0) {
+ lc -= base_length[code];
+ send_bits(s, lc, extra); /* send the extra length bits */
+ }
+ dist--; /* dist is now the match distance - 1 */
+ code = d_code(dist);
+ Assert (code < D_CODES, "bad d_code");
+
+ send_code(s, code, dtree); /* send the distance code */
+ extra = extra_dbits[code];
+ if (extra != 0) {
+ dist -= base_dist[code];
+ send_bits(s, dist, extra); /* send the extra distance bits */
+ }
+ } /* literal or match pair ? */
+
+ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+ Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+ "pendingBuf overflow");
+
+ } while (lx < s->last_lit);
+
+ send_code(s, END_BLOCK, ltree);
+}
+
+/* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ * a) There are no non-portable control characters belonging to the
+ * "black list" (0..6, 14..25, 28..31).
+ * b) There is at least one printable character belonging to the
+ * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ * "gray list" that is ignored in this detection algorithm:
+ * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+local int detect_data_type(s)
+ deflate_state *s;
+{
+ /* black_mask is the bit mask of black-listed bytes
+ * set bits 0..6, 14..25, and 28..31
+ * 0xf3ffc07f = binary 11110011111111111100000001111111
+ */
+ unsigned long black_mask = 0xf3ffc07fUL;
+ int n;
+
+ /* Check for non-textual ("black-listed") bytes. */
+ for (n = 0; n <= 31; n++, black_mask >>= 1)
+ if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0))
+ return Z_BINARY;
+
+ /* Check for textual ("white-listed") bytes. */
+ if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0
+ || s->dyn_ltree[13].Freq != 0)
+ return Z_TEXT;
+ for (n = 32; n < LITERALS; n++)
+ if (s->dyn_ltree[n].Freq != 0)
+ return Z_TEXT;
+
+ /* There are no "black-listed" or "white-listed" bytes:
+ * this stream either is empty or has tolerated ("gray-listed") bytes only.
+ */
+ return Z_BINARY;
+}
+
+/* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+local unsigned bi_reverse(code, len)
+ unsigned code; /* the value to invert */
+ int len; /* its bit length */
+{
+ register unsigned res = 0;
+ do {
+ res |= code & 1;
+ code >>= 1, res <<= 1;
+ } while (--len > 0);
+ return res >> 1;
+}
+
+/* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+local void bi_flush(s)
+ deflate_state *s;
+{
+ if (s->bi_valid == 16) {
+ put_short(s, s->bi_buf);
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+ } else if (s->bi_valid >= 8) {
+ put_byte(s, (Byte)s->bi_buf);
+ s->bi_buf >>= 8;
+ s->bi_valid -= 8;
+ }
+}
+
+/* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+local void bi_windup(s)
+ deflate_state *s;
+{
+ if (s->bi_valid > 8) {
+ put_short(s, s->bi_buf);
+ } else if (s->bi_valid > 0) {
+ put_byte(s, (Byte)s->bi_buf);
+ }
+ s->bi_buf = 0;
+ s->bi_valid = 0;
+#ifdef DEBUG
+ s->bits_sent = (s->bits_sent+7) & ~7;
+#endif
+}
+
+/* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+local void copy_block(s, buf, len, header)
+ deflate_state *s;
+ charf *buf; /* the input data */
+ unsigned len; /* its length */
+ int header; /* true if block header must be written */
+{
+ bi_windup(s); /* align on byte boundary */
+
+ if (header) {
+ put_short(s, (ush)len);
+ put_short(s, (ush)~len);
+#ifdef DEBUG
+ s->bits_sent += 2*16;
+#endif
+ }
+#ifdef DEBUG
+ s->bits_sent += (ulg)len<<3;
+#endif
+ while (len--) {
+ put_byte(s, *buf++);
+ }
+}
diff --git a/src/Common/zlib/trees.h b/src/Common/zlib/trees.h
new file mode 100644
index 0000000..d35639d
--- /dev/null
+++ b/src/Common/zlib/trees.h
@@ -0,0 +1,128 @@
+/* header created automatically with -DGEN_TREES_H */
+
+local const ct_data static_ltree[L_CODES+2] = {
+{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}},
+{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}},
+{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}},
+{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}},
+{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}},
+{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}},
+{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}},
+{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}},
+{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}},
+{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}},
+{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}},
+{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}},
+{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}},
+{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}},
+{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}},
+{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}},
+{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}},
+{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}},
+{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}},
+{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}},
+{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}},
+{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}},
+{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}},
+{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}},
+{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}},
+{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}},
+{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}},
+{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}},
+{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}},
+{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}},
+{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}},
+{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}},
+{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}},
+{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}},
+{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}},
+{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}},
+{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}},
+{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}},
+{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}},
+{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}},
+{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}},
+{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}},
+{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}},
+{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}},
+{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}},
+{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}},
+{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}},
+{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}},
+{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}},
+{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}},
+{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}},
+{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}},
+{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}},
+{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}},
+{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}},
+{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}},
+{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}},
+{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}}
+};
+
+local const ct_data static_dtree[D_CODES] = {
+{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}},
+{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}},
+{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}},
+{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}},
+{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}},
+{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}}
+};
+
+const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {
+ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
+ 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
+10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17,
+18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
+29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29
+};
+
+const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12,
+13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16,
+17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19,
+19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
+22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23,
+23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
+26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
+27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28
+};
+
+local const int base_length[LENGTH_CODES] = {
+0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56,
+64, 80, 96, 112, 128, 160, 192, 224, 0
+};
+
+local const int base_dist[D_CODES] = {
+ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24,
+ 32, 48, 64, 96, 128, 192, 256, 384, 512, 768,
+ 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576
+};
+
diff --git a/src/Common/zlib/uncompr.c b/src/Common/zlib/uncompr.c
new file mode 100644
index 0000000..242e949
--- /dev/null
+++ b/src/Common/zlib/uncompr.c
@@ -0,0 +1,59 @@
+/* uncompr.c -- decompress a memory buffer
+ * Copyright (C) 1995-2003, 2010 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#define ZLIB_INTERNAL
+#include "zlib.h"
+
+/* ===========================================================================
+ Decompresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total
+ size of the destination buffer, which must be large enough to hold the
+ entire uncompressed data. (The size of the uncompressed data must have
+ been saved previously by the compressor and transmitted to the decompressor
+ by some mechanism outside the scope of this compression library.)
+ Upon exit, destLen is the actual size of the compressed buffer.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer, or Z_DATA_ERROR if the input data was corrupted.
+*/
+int ZEXPORT uncompress (dest, destLen, source, sourceLen)
+ Bytef *dest;
+ uLongf *destLen;
+ const Bytef *source;
+ uLong sourceLen;
+{
+ z_stream stream;
+ int err;
+
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = (uInt)sourceLen;
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+
+ err = inflateInit(&stream);
+ if (err != Z_OK) return err;
+
+ err = inflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ inflateEnd(&stream);
+ if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
+ return Z_DATA_ERROR;
+ return err;
+ }
+ *destLen = stream.total_out;
+
+ err = inflateEnd(&stream);
+ return err;
+}
diff --git a/src/Common/zlib/zconf.h b/src/Common/zlib/zconf.h
new file mode 100644
index 0000000..9987a77
--- /dev/null
+++ b/src/Common/zlib/zconf.h
@@ -0,0 +1,511 @@
+/* zconf.h -- configuration of the zlib compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZCONF_H
+#define ZCONF_H
+
+/*
+ * If you *really* need a unique prefix for all types and library functions,
+ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
+ * Even better than compiling with -DZ_PREFIX would be to use configure to set
+ * this permanently in zconf.h using "./configure --zprefix".
+ */
+#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */
+# define Z_PREFIX_SET
+
+/* all linked symbols */
+# define _dist_code z__dist_code
+# define _length_code z__length_code
+# define _tr_align z__tr_align
+# define _tr_flush_bits z__tr_flush_bits
+# define _tr_flush_block z__tr_flush_block
+# define _tr_init z__tr_init
+# define _tr_stored_block z__tr_stored_block
+# define _tr_tally z__tr_tally
+# define adler32 z_adler32
+# define adler32_combine z_adler32_combine
+# define adler32_combine64 z_adler32_combine64
+# ifndef Z_SOLO
+# define compress z_compress
+# define compress2 z_compress2
+# define compressBound z_compressBound
+# endif
+# define crc32 z_crc32
+# define crc32_combine z_crc32_combine
+# define crc32_combine64 z_crc32_combine64
+# define deflate z_deflate
+# define deflateBound z_deflateBound
+# define deflateCopy z_deflateCopy
+# define deflateEnd z_deflateEnd
+# define deflateInit2_ z_deflateInit2_
+# define deflateInit_ z_deflateInit_
+# define deflateParams z_deflateParams
+# define deflatePending z_deflatePending
+# define deflatePrime z_deflatePrime
+# define deflateReset z_deflateReset
+# define deflateResetKeep z_deflateResetKeep
+# define deflateSetDictionary z_deflateSetDictionary
+# define deflateSetHeader z_deflateSetHeader
+# define deflateTune z_deflateTune
+# define deflate_copyright z_deflate_copyright
+# define get_crc_table z_get_crc_table
+# ifndef Z_SOLO
+# define gz_error z_gz_error
+# define gz_intmax z_gz_intmax
+# define gz_strwinerror z_gz_strwinerror
+# define gzbuffer z_gzbuffer
+# define gzclearerr z_gzclearerr
+# define gzclose z_gzclose
+# define gzclose_r z_gzclose_r
+# define gzclose_w z_gzclose_w
+# define gzdirect z_gzdirect
+# define gzdopen z_gzdopen
+# define gzeof z_gzeof
+# define gzerror z_gzerror
+# define gzflush z_gzflush
+# define gzgetc z_gzgetc
+# define gzgetc_ z_gzgetc_
+# define gzgets z_gzgets
+# define gzoffset z_gzoffset
+# define gzoffset64 z_gzoffset64
+# define gzopen z_gzopen
+# define gzopen64 z_gzopen64
+# ifdef _WIN32
+# define gzopen_w z_gzopen_w
+# endif
+# define gzprintf z_gzprintf
+# define gzvprintf z_gzvprintf
+# define gzputc z_gzputc
+# define gzputs z_gzputs
+# define gzread z_gzread
+# define gzrewind z_gzrewind
+# define gzseek z_gzseek
+# define gzseek64 z_gzseek64
+# define gzsetparams z_gzsetparams
+# define gztell z_gztell
+# define gztell64 z_gztell64
+# define gzungetc z_gzungetc
+# define gzwrite z_gzwrite
+# endif
+# define inflate z_inflate
+# define inflateBack z_inflateBack
+# define inflateBackEnd z_inflateBackEnd
+# define inflateBackInit_ z_inflateBackInit_
+# define inflateCopy z_inflateCopy
+# define inflateEnd z_inflateEnd
+# define inflateGetHeader z_inflateGetHeader
+# define inflateInit2_ z_inflateInit2_
+# define inflateInit_ z_inflateInit_
+# define inflateMark z_inflateMark
+# define inflatePrime z_inflatePrime
+# define inflateReset z_inflateReset
+# define inflateReset2 z_inflateReset2
+# define inflateSetDictionary z_inflateSetDictionary
+# define inflateGetDictionary z_inflateGetDictionary
+# define inflateSync z_inflateSync
+# define inflateSyncPoint z_inflateSyncPoint
+# define inflateUndermine z_inflateUndermine
+# define inflateResetKeep z_inflateResetKeep
+# define inflate_copyright z_inflate_copyright
+# define inflate_fast z_inflate_fast
+# define inflate_table z_inflate_table
+# ifndef Z_SOLO
+# define uncompress z_uncompress
+# endif
+# define zError z_zError
+# ifndef Z_SOLO
+# define zcalloc z_zcalloc
+# define zcfree z_zcfree
+# endif
+# define zlibCompileFlags z_zlibCompileFlags
+# define zlibVersion z_zlibVersion
+
+/* all zlib typedefs in zlib.h and zconf.h */
+# define Byte z_Byte
+# define Bytef z_Bytef
+# define alloc_func z_alloc_func
+# define charf z_charf
+# define free_func z_free_func
+# ifndef Z_SOLO
+# define gzFile z_gzFile
+# endif
+# define gz_header z_gz_header
+# define gz_headerp z_gz_headerp
+# define in_func z_in_func
+# define intf z_intf
+# define out_func z_out_func
+# define uInt z_uInt
+# define uIntf z_uIntf
+# define uLong z_uLong
+# define uLongf z_uLongf
+# define voidp z_voidp
+# define voidpc z_voidpc
+# define voidpf z_voidpf
+
+/* all zlib structs in zlib.h and zconf.h */
+# define gz_header_s z_gz_header_s
+# define internal_state z_internal_state
+
+#endif
+
+#if defined(__MSDOS__) && !defined(MSDOS)
+# define MSDOS
+#endif
+#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2)
+# define OS2
+#endif
+#if defined(_WINDOWS) && !defined(WINDOWS)
+# define WINDOWS
+#endif
+#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__)
+# ifndef WIN32
+# define WIN32
+# endif
+#endif
+#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32)
+# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__)
+# ifndef SYS16BIT
+# define SYS16BIT
+# endif
+# endif
+#endif
+
+/*
+ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
+ * than 64k bytes at a time (needed on systems with 16-bit int).
+ */
+#ifdef SYS16BIT
+# define MAXSEG_64K
+#endif
+#ifdef MSDOS
+# define UNALIGNED_OK
+#endif
+
+#ifdef __STDC_VERSION__
+# ifndef STDC
+# define STDC
+# endif
+# if __STDC_VERSION__ >= 199901L
+# ifndef STDC99
+# define STDC99
+# endif
+# endif
+#endif
+#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32))
+# define STDC
+#endif
+#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__))
+# define STDC
+#endif
+
+#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */
+# define STDC
+#endif
+
+#ifndef STDC
+# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
+# define const /* note: need a more gentle solution here */
+# endif
+#endif
+
+#if defined(ZLIB_CONST) && !defined(z_const)
+# define z_const const
+#else
+# define z_const
+#endif
+
+/* Some Mac compilers merge all .h files incorrectly: */
+#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__)
+# define NO_DUMMY_DECL
+#endif
+
+/* Maximum value for memLevel in deflateInit2 */
+#ifndef MAX_MEM_LEVEL
+# ifdef MAXSEG_64K
+# define MAX_MEM_LEVEL 8
+# else
+# define MAX_MEM_LEVEL 9
+# endif
+#endif
+
+/* Maximum value for windowBits in deflateInit2 and inflateInit2.
+ * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files
+ * created by gzip. (Files created by minigzip can still be extracted by
+ * gzip.)
+ */
+#ifndef MAX_WBITS
+# define MAX_WBITS 15 /* 32K LZ77 window */
+#endif
+
+/* The memory requirements for deflate are (in bytes):
+ (1 << (windowBits+2)) + (1 << (memLevel+9))
+ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
+ plus a few kilobytes for small objects. For example, if you want to reduce
+ the default memory requirements from 256K to 128K, compile with
+ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
+ Of course this will generally degrade compression (there's no free lunch).
+
+ The memory requirements for inflate are (in bytes) 1 << windowBits
+ that is, 32K for windowBits=15 (default value) plus a few kilobytes
+ for small objects.
+*/
+
+ /* Type declarations */
+
+#ifndef OF /* function prototypes */
+# ifdef STDC
+# define OF(args) args
+# else
+# define OF(args) ()
+# endif
+#endif
+
+#ifndef Z_ARG /* function prototypes for stdarg */
+# if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# define Z_ARG(args) args
+# else
+# define Z_ARG(args) ()
+# endif
+#endif
+
+/* The following definitions for FAR are needed only for MSDOS mixed
+ * model programming (small or medium model with some far allocations).
+ * This was tested only with MSC; for other MSDOS compilers you may have
+ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
+ * just define FAR to be empty.
+ */
+#ifdef SYS16BIT
+# if defined(M_I86SM) || defined(M_I86MM)
+ /* MSC small or medium model */
+# define SMALL_MEDIUM
+# ifdef _MSC_VER
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+# if (defined(__SMALL__) || defined(__MEDIUM__))
+ /* Turbo C small or medium model */
+# define SMALL_MEDIUM
+# ifdef __BORLANDC__
+# define FAR _far
+# else
+# define FAR far
+# endif
+# endif
+#endif
+
+#if defined(WINDOWS) || defined(WIN32)
+ /* If building or using zlib as a DLL, define ZLIB_DLL.
+ * This is not mandatory, but it offers a little performance increase.
+ */
+# ifdef ZLIB_DLL
+# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500))
+# ifdef ZLIB_INTERNAL
+# define ZEXTERN extern __declspec(dllexport)
+# else
+# define ZEXTERN extern __declspec(dllimport)
+# endif
+# endif
+# endif /* ZLIB_DLL */
+ /* If building or using zlib with the WINAPI/WINAPIV calling convention,
+ * define ZLIB_WINAPI.
+ * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI.
+ */
+# ifdef ZLIB_WINAPI
+# ifdef FAR
+# undef FAR
+# endif
+# include <windows.h>
+ /* No need for _export, use ZLIB.DEF instead. */
+ /* For complete Windows compatibility, use WINAPI, not __stdcall. */
+# define ZEXPORT WINAPI
+# ifdef WIN32
+# define ZEXPORTVA WINAPIV
+# else
+# define ZEXPORTVA FAR CDECL
+# endif
+# endif
+#endif
+
+#if defined (__BEOS__)
+# ifdef ZLIB_DLL
+# ifdef ZLIB_INTERNAL
+# define ZEXPORT __declspec(dllexport)
+# define ZEXPORTVA __declspec(dllexport)
+# else
+# define ZEXPORT __declspec(dllimport)
+# define ZEXPORTVA __declspec(dllimport)
+# endif
+# endif
+#endif
+
+#ifndef ZEXTERN
+# define ZEXTERN extern
+#endif
+#ifndef ZEXPORT
+# define ZEXPORT
+#endif
+#ifndef ZEXPORTVA
+# define ZEXPORTVA
+#endif
+
+#ifndef FAR
+# define FAR
+#endif
+
+#if !defined(__MACTYPES__)
+typedef unsigned char Byte; /* 8 bits */
+#endif
+typedef unsigned int uInt; /* 16 bits or more */
+typedef unsigned long uLong; /* 32 bits or more */
+
+#ifdef SMALL_MEDIUM
+ /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */
+# define Bytef Byte FAR
+#else
+ typedef Byte FAR Bytef;
+#endif
+typedef char FAR charf;
+typedef int FAR intf;
+typedef uInt FAR uIntf;
+typedef uLong FAR uLongf;
+
+#ifdef STDC
+ typedef void const *voidpc;
+ typedef void FAR *voidpf;
+ typedef void *voidp;
+#else
+ typedef Byte const *voidpc;
+ typedef Byte FAR *voidpf;
+ typedef Byte *voidp;
+#endif
+
+#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
+# include <limits.h>
+# if (UINT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned
+# elif (ULONG_MAX == 0xffffffffUL)
+# define Z_U4 unsigned long
+# elif (USHRT_MAX == 0xffffffffUL)
+# define Z_U4 unsigned short
+# endif
+#endif
+
+#ifdef Z_U4
+ typedef Z_U4 z_crc_t;
+#else
+ typedef unsigned long z_crc_t;
+#endif
+
+#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_UNISTD_H
+#endif
+
+#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */
+# define Z_HAVE_STDARG_H
+#endif
+
+#ifdef STDC
+# ifndef Z_SOLO
+# include <sys/types.h> /* for off_t */
+# endif
+#endif
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+# include <stdarg.h> /* for va_list */
+# endif
+#endif
+
+#ifdef _WIN32
+# ifndef Z_SOLO
+# include <stddef.h> /* for wchar_t */
+# endif
+#endif
+
+/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and
+ * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even
+ * though the former does not conform to the LFS document), but considering
+ * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as
+ * equivalently requesting no 64-bit operations
+ */
+#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1
+# undef _LARGEFILE64_SOURCE
+#endif
+
+#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H)
+# define Z_HAVE_UNISTD_H
+#endif
+#ifndef Z_SOLO
+# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE)
+# include <unistd.h> /* for SEEK_*, off_t, and _LFS64_LARGEFILE */
+# ifdef VMS
+# include <unixio.h> /* for off_t */
+# endif
+# ifndef z_off_t
+# define z_off_t off_t
+# endif
+# endif
+#endif
+
+#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0
+# define Z_LFS64
+#endif
+
+#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64)
+# define Z_LARGE64
+#endif
+
+#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64)
+# define Z_WANT64
+#endif
+
+#if !defined(SEEK_SET) && !defined(Z_SOLO)
+# define SEEK_SET 0 /* Seek from beginning of file. */
+# define SEEK_CUR 1 /* Seek from current position. */
+# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */
+#endif
+
+#ifndef z_off_t
+# define z_off_t long
+#endif
+
+#if !defined(_WIN32) && defined(Z_LARGE64)
+# define z_off64_t off64_t
+#else
+# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
+# define z_off64_t __int64
+# else
+# define z_off64_t z_off_t
+# endif
+#endif
+
+/* MVS linker does not support external names larger than 8 bytes */
+#if defined(__MVS__)
+ #pragma map(deflateInit_,"DEIN")
+ #pragma map(deflateInit2_,"DEIN2")
+ #pragma map(deflateEnd,"DEEND")
+ #pragma map(deflateBound,"DEBND")
+ #pragma map(inflateInit_,"ININ")
+ #pragma map(inflateInit2_,"ININ2")
+ #pragma map(inflateEnd,"INEND")
+ #pragma map(inflateSync,"INSY")
+ #pragma map(inflateSetDictionary,"INSEDI")
+ #pragma map(compressBound,"CMBND")
+ #pragma map(inflate_table,"INTABL")
+ #pragma map(inflate_fast,"INFA")
+ #pragma map(inflate_copyright,"INCOPY")
+#endif
+
+#endif /* ZCONF_H */
diff --git a/src/Common/zlib/zlib.h b/src/Common/zlib/zlib.h
new file mode 100644
index 0000000..3e0c767
--- /dev/null
+++ b/src/Common/zlib/zlib.h
@@ -0,0 +1,1768 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.8, April 28th, 2013
+
+ Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+
+ The data format used by the zlib library is described by RFCs (Request for
+ Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+ (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
+*/
+
+#ifndef ZLIB_H
+#define ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.2.8"
+#define ZLIB_VERNUM 0x1280
+#define ZLIB_VER_MAJOR 1
+#define ZLIB_VER_MINOR 2
+#define ZLIB_VER_REVISION 8
+#define ZLIB_VER_SUBREVISION 0
+
+/*
+ The 'zlib' compression library provides in-memory compression and
+ decompression functions, including integrity checks of the uncompressed data.
+ This version of the library supports only one compression method (deflation)
+ but other algorithms will be added later and will have the same stream
+ interface.
+
+ Compression can be done in a single step if the buffers are large enough,
+ or can be done by repeated calls of the compression function. In the latter
+ case, the application must provide more input and/or consume the output
+ (providing more output space) before each call.
+
+ The compressed data format used by default by the in-memory functions is
+ the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped
+ around a deflate stream, which is itself documented in RFC 1951.
+
+ The library also supports reading and writing files in gzip (.gz) format
+ with an interface similar to that of stdio using the functions that start
+ with "gz". The gzip format is different from the zlib format. gzip is a
+ gzip wrapper, documented in RFC 1952, wrapped around a deflate stream.
+
+ This library can optionally read and write gzip streams in memory as well.
+
+ The zlib format was designed to be compact and fast for use in memory
+ and on communications channels. The gzip format was designed for single-
+ file compression on file systems, has a larger header than zlib to maintain
+ directory information, and uses a different, slower check method than zlib.
+
+ The library does not install any signal handler. The decoder checks
+ the consistency of the compressed data, so the library should never crash
+ even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void (*free_func) OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+ z_const Bytef *next_in; /* next input byte */
+ uInt avail_in; /* number of bytes available at next_in */
+ uLong total_in; /* total number of input bytes read so far */
+
+ Bytef *next_out; /* next output byte should be put there */
+ uInt avail_out; /* remaining free space at next_out */
+ uLong total_out; /* total number of bytes output so far */
+
+ z_const char *msg; /* last error message, NULL if no error */
+ struct internal_state FAR *state; /* not visible by applications */
+
+ alloc_func zalloc; /* used to allocate the internal state */
+ free_func zfree; /* used to free the internal state */
+ voidpf opaque; /* private data object passed to zalloc and zfree */
+
+ int data_type; /* best guess about the data type: binary or text */
+ uLong adler; /* adler32 value of the uncompressed data */
+ uLong reserved; /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+ gzip header information passed to and from zlib routines. See RFC 1952
+ for more details on the meanings of these fields.
+*/
+typedef struct gz_header_s {
+ int text; /* true if compressed data believed to be text */
+ uLong time; /* modification time */
+ int xflags; /* extra flags (not used when writing a gzip file) */
+ int os; /* operating system */
+ Bytef *extra; /* pointer to extra field or Z_NULL if none */
+ uInt extra_len; /* extra field length (valid if extra != Z_NULL) */
+ uInt extra_max; /* space at extra (only when reading header) */
+ Bytef *name; /* pointer to zero-terminated file name or Z_NULL */
+ uInt name_max; /* space at name (only when reading header) */
+ Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */
+ uInt comm_max; /* space at comment (only when reading header) */
+ int hcrc; /* true if there was or will be a header crc */
+ int done; /* true when done reading gzip header (not used
+ when writing a gzip file) */
+} gz_header;
+
+typedef gz_header FAR *gz_headerp;
+
+/*
+ The application must update next_in and avail_in when avail_in has dropped
+ to zero. It must update next_out and avail_out when avail_out has dropped
+ to zero. The application must initialize zalloc, zfree and opaque before
+ calling the init function. All other fields are set by the compression
+ library and must not be updated by the application.
+
+ The opaque value provided by the application will be passed as the first
+ parameter for calls of zalloc and zfree. This can be useful for custom
+ memory management. The compression library attaches no meaning to the
+ opaque value.
+
+ zalloc must return Z_NULL if there is not enough memory for the object.
+ If zlib is used in a multi-threaded application, zalloc and zfree must be
+ thread safe.
+
+ On 16-bit systems, the functions zalloc and zfree must be able to allocate
+ exactly 65536 bytes, but will not be required to allocate more than this if
+ the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers
+ returned by zalloc for objects of exactly 65536 bytes *must* have their
+ offset normalized to zero. The default allocation function provided by this
+ library ensures this (see zutil.c). To reduce memory requirements and avoid
+ any allocation of 64K objects, at the expense of compression ratio, compile
+ the library with -DMAX_WBITS=14 (see zconf.h).
+
+ The fields total_in and total_out can be used for statistics or progress
+ reports. After compression, total_in holds the total size of the
+ uncompressed data and may be saved for use in the decompressor (particularly
+ if the decompressor wants to decompress everything in a single step).
+*/
+
+ /* constants */
+
+#define Z_NO_FLUSH 0
+#define Z_PARTIAL_FLUSH 1
+#define Z_SYNC_FLUSH 2
+#define Z_FULL_FLUSH 3
+#define Z_FINISH 4
+#define Z_BLOCK 5
+#define Z_TREES 6
+/* Allowed flush values; see deflate() and inflate() below for details */
+
+#define Z_OK 0
+#define Z_STREAM_END 1
+#define Z_NEED_DICT 2
+#define Z_ERRNO (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR (-3)
+#define Z_MEM_ERROR (-4)
+#define Z_BUF_ERROR (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION 0
+#define Z_BEST_SPEED 1
+#define Z_BEST_COMPRESSION 9
+#define Z_DEFAULT_COMPRESSION (-1)
+/* compression levels */
+
+#define Z_FILTERED 1
+#define Z_HUFFMAN_ONLY 2
+#define Z_RLE 3
+#define Z_FIXED 4
+#define Z_DEFAULT_STRATEGY 0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY 0
+#define Z_TEXT 1
+#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */
+#define Z_UNKNOWN 2
+/* Possible values of the data_type field (though see inflate()) */
+
+#define Z_DEFLATED 8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
+
+#define zlib_version zlibVersion()
+/* for compatibility with versions < 1.0.2 */
+
+
+ /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+ If the first character differs, the library code actually used is not
+ compatible with the zlib.h header file used by the application. This check
+ is automatically made by deflateInit and inflateInit.
+ */
+
+/*
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+ Initializes the internal stream state for compression. The fields
+ zalloc, zfree and opaque must be initialized before by the caller. If
+ zalloc and zfree are set to Z_NULL, deflateInit updates them to use default
+ allocation functions.
+
+ The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+ 1 gives best speed, 9 gives best compression, 0 gives no compression at all
+ (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION
+ requests a default compromise between speed and compression (currently
+ equivalent to level 6).
+
+ deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if level is not a valid compression level, or
+ Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+ with the version assumed by the caller (ZLIB_VERSION). msg is set to null
+ if there is no error message. deflateInit does not perform any compression:
+ this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush));
+/*
+ deflate compresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. deflate performs one or both of the
+ following actions:
+
+ - Compress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), next_in and avail_in are updated and
+ processing will resume at this point for the next call of deflate().
+
+ - Provide more output starting at next_out and update next_out and avail_out
+ accordingly. This action is forced if the parameter flush is non zero.
+ Forcing flush frequently degrades the compression ratio, so this parameter
+ should be set only when necessary (in interactive applications). Some
+ output may be provided even if flush is not set.
+
+ Before the call of deflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating avail_in or avail_out accordingly; avail_out should
+ never be zero before the call. The application can consume the compressed
+ output when it wants, for example when the output buffer is full (avail_out
+ == 0), or after each call of deflate(). If deflate returns Z_OK and with
+ zero avail_out, it must be called again after making room in the output
+ buffer because there might be more output pending.
+
+ Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to
+ decide how much data to accumulate before producing output, in order to
+ maximize compression.
+
+ If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+ flushed to the output buffer and the output is aligned on a byte boundary, so
+ that the decompressor can get all input data available so far. (In
+ particular avail_in is zero after the call if enough output space has been
+ provided before the call.) Flushing may degrade compression for some
+ compression algorithms and so it should be used only when necessary. This
+ completes the current deflate block and follows it with an empty stored block
+ that is three bits plus filler bits to the next byte, followed by four bytes
+ (00 00 ff ff).
+
+ If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the
+ output buffer, but the output is not aligned to a byte boundary. All of the
+ input data so far will be available to the decompressor, as for Z_SYNC_FLUSH.
+ This completes the current deflate block and follows it with an empty fixed
+ codes block that is 10 bits long. This assures that enough bytes are output
+ in order for the decompressor to finish the block before the empty fixed code
+ block.
+
+ If flush is set to Z_BLOCK, a deflate block is completed and emitted, as
+ for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to
+ seven bits of the current block are held to be written as the next byte after
+ the next deflate block is completed. In this case, the decompressor may not
+ be provided enough bits at this point in order to complete decompression of
+ the data provided so far to the compressor. It may need to wait for the next
+ block to be emitted. This is for advanced applications that need to control
+ the emission of deflate blocks.
+
+ If flush is set to Z_FULL_FLUSH, all output is flushed as with
+ Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+ restart from this point if previous compressed data has been damaged or if
+ random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+ compression.
+
+ If deflate returns with avail_out == 0, this function must be called again
+ with the same value of the flush parameter and more output space (updated
+ avail_out), until the flush is complete (deflate returns with non-zero
+ avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that
+ avail_out is greater than six to avoid repeated flush markers due to
+ avail_out == 0 on return.
+
+ If the parameter flush is set to Z_FINISH, pending input is processed,
+ pending output is flushed and deflate returns with Z_STREAM_END if there was
+ enough output space; if deflate returns with Z_OK, this function must be
+ called again with Z_FINISH and more output space (updated avail_out) but no
+ more input data, until it returns with Z_STREAM_END or an error. After
+ deflate has returned Z_STREAM_END, the only possible operations on the stream
+ are deflateReset or deflateEnd.
+
+ Z_FINISH can be used immediately after deflateInit if all the compression
+ is to be done in a single step. In this case, avail_out must be at least the
+ value returned by deflateBound (see below). Then deflate is guaranteed to
+ return Z_STREAM_END. If not enough output space is provided, deflate will
+ not return Z_STREAM_END, and it must be called again as described above.
+
+ deflate() sets strm->adler to the adler32 checksum of all input read
+ so far (that is, total_in bytes).
+
+ deflate() may update strm->data_type if it can make a good guess about
+ the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered
+ binary. This field is only for information purposes and does not affect the
+ compression algorithm in any manner.
+
+ deflate() returns Z_OK if some progress has been made (more input
+ processed or more output produced), Z_STREAM_END if all input has been
+ consumed and all output has been produced (only when flush is set to
+ Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+ if next_in or next_out was Z_NULL), Z_BUF_ERROR if no progress is possible
+ (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not
+ fatal, and deflate() can be called again with more input and more output
+ space to continue compressing.
+*/
+
+
+ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm));
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+ stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+ prematurely (some input or output was discarded). In the error case, msg
+ may be set but then points to a static string (which must not be
+ deallocated).
+*/
+
+
+/*
+ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm));
+
+ Initializes the internal stream state for decompression. The fields
+ next_in, avail_in, zalloc, zfree and opaque must be initialized before by
+ the caller. If next_in is not Z_NULL and avail_in is large enough (the
+ exact value depends on the compression method), inflateInit determines the
+ compression method from the zlib header and allocates all data structures
+ accordingly; otherwise the allocation will be deferred to the first call of
+ inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+ use default allocation functions.
+
+ inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit does not perform any decompression
+ apart from possibly reading the zlib header if present: actual decompression
+ will be done by inflate(). (So next_in and avail_in may be modified, but
+ next_out and avail_out are unused and unchanged.) The current implementation
+ of inflateInit() does not process any header information -- that is deferred
+ until inflate() is called.
+*/
+
+
+ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
+/*
+ inflate decompresses as much data as possible, and stops when the input
+ buffer becomes empty or the output buffer becomes full. It may introduce
+ some output latency (reading input without producing any output) except when
+ forced to flush.
+
+ The detailed semantics are as follows. inflate performs one or both of the
+ following actions:
+
+ - Decompress more input starting at next_in and update next_in and avail_in
+ accordingly. If not all input can be processed (because there is not
+ enough room in the output buffer), next_in is updated and processing will
+ resume at this point for the next call of inflate().
+
+ - Provide more output starting at next_out and update next_out and avail_out
+ accordingly. inflate() provides as much output as possible, until there is
+ no more input data or no more space in the output buffer (see below about
+ the flush parameter).
+
+ Before the call of inflate(), the application should ensure that at least
+ one of the actions is possible, by providing more input and/or consuming more
+ output, and updating the next_* and avail_* values accordingly. The
+ application can consume the uncompressed output when it wants, for example
+ when the output buffer is full (avail_out == 0), or after each call of
+ inflate(). If inflate returns Z_OK and with zero avail_out, it must be
+ called again after making room in the output buffer because there might be
+ more output pending.
+
+ The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH,
+ Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much
+ output as possible to the output buffer. Z_BLOCK requests that inflate()
+ stop if and when it gets to the next deflate block boundary. When decoding
+ the zlib or gzip format, this will cause inflate() to return immediately
+ after the header and before the first block. When doing a raw inflate,
+ inflate() will go ahead and process the first block, and will return when it
+ gets to the end of that block, or when it runs out of data.
+
+ The Z_BLOCK option assists in appending to or combining deflate streams.
+ Also to assist in this, on return inflate() will set strm->data_type to the
+ number of unused bits in the last byte taken from strm->next_in, plus 64 if
+ inflate() is currently decoding the last block in the deflate stream, plus
+ 128 if inflate() returned immediately after decoding an end-of-block code or
+ decoding the complete header up to just before the first byte of the deflate
+ stream. The end-of-block will not be indicated until all of the uncompressed
+ data from that block has been written to strm->next_out. The number of
+ unused bits may in general be greater than seven, except when bit 7 of
+ data_type is set, in which case the number of unused bits will be less than
+ eight. data_type is set as noted here every time inflate() returns for all
+ flush options, and so can be used to determine the amount of currently
+ consumed input in bits.
+
+ The Z_TREES option behaves as Z_BLOCK does, but it also returns when the
+ end of each deflate block header is reached, before any actual data in that
+ block is decoded. This allows the caller to determine the length of the
+ deflate block header for later use in random access within a deflate block.
+ 256 is added to the value of strm->data_type when inflate() returns
+ immediately after reaching the end of the deflate block header.
+
+ inflate() should normally be called until it returns Z_STREAM_END or an
+ error. However if all decompression is to be performed in a single step (a
+ single call of inflate), the parameter flush should be set to Z_FINISH. In
+ this case all pending input is processed and all pending output is flushed;
+ avail_out must be large enough to hold all of the uncompressed data for the
+ operation to complete. (The size of the uncompressed data may have been
+ saved by the compressor for this purpose.) The use of Z_FINISH is not
+ required to perform an inflation in one step. However it may be used to
+ inform inflate that a faster approach can be used for the single inflate()
+ call. Z_FINISH also informs inflate to not maintain a sliding window if the
+ stream completes, which reduces inflate's memory footprint. If the stream
+ does not complete, either because not all of the stream is provided or not
+ enough output space is provided, then a sliding window will be allocated and
+ inflate() can be called again to continue the operation as if Z_NO_FLUSH had
+ been used.
+
+ In this implementation, inflate() always flushes as much output as
+ possible to the output buffer, and always uses the faster approach on the
+ first call. So the effects of the flush parameter in this implementation are
+ on the return value of inflate() as noted below, when inflate() returns early
+ when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of
+ memory for a sliding window when Z_FINISH is used.
+
+ If a preset dictionary is needed after this call (see inflateSetDictionary
+ below), inflate sets strm->adler to the Adler-32 checksum of the dictionary
+ chosen by the compressor and returns Z_NEED_DICT; otherwise it sets
+ strm->adler to the Adler-32 checksum of all output produced so far (that is,
+ total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described
+ below. At the end of the stream, inflate() checks that its computed adler32
+ checksum is equal to that saved by the compressor and returns Z_STREAM_END
+ only if the checksum is correct.
+
+ inflate() can decompress and check either zlib-wrapped or gzip-wrapped
+ deflate data. The header type is detected automatically, if requested when
+ initializing with inflateInit2(). Any information contained in the gzip
+ header is not retained, so applications that need that information should
+ instead use raw inflate, see inflateInit2() below, or inflateBack() and
+ perform their own processing of the gzip header and trailer. When processing
+ gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output
+ producted so far. The CRC-32 is checked against the gzip trailer.
+
+ inflate() returns Z_OK if some progress has been made (more input processed
+ or more output produced), Z_STREAM_END if the end of the compressed data has
+ been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+ preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+ corrupted (input stream not conforming to the zlib format or incorrect check
+ value), Z_STREAM_ERROR if the stream structure was inconsistent (for example
+ next_in or next_out was Z_NULL), Z_MEM_ERROR if there was not enough memory,
+ Z_BUF_ERROR if no progress is possible or if there was not enough room in the
+ output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and
+ inflate() can be called again with more input and more output space to
+ continue decompressing. If Z_DATA_ERROR is returned, the application may
+ then call inflateSync() to look for a good compression block if a partial
+ recovery of the data is desired.
+*/
+
+
+ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm));
+/*
+ All dynamically allocated data structures for this stream are freed.
+ This function discards any unprocessed input and does not flush any pending
+ output.
+
+ inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+ was inconsistent. In the error case, msg may be set but then points to a
+ static string (which must not be deallocated).
+*/
+
+
+ /* Advanced functions */
+
+/*
+ The following functions are needed only in some special applications.
+*/
+
+/*
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+ int level,
+ int method,
+ int windowBits,
+ int memLevel,
+ int strategy));
+
+ This is another version of deflateInit with more compression options. The
+ fields next_in, zalloc, zfree and opaque must be initialized before by the
+ caller.
+
+ The method parameter is the compression method. It must be Z_DEFLATED in
+ this version of the library.
+
+ The windowBits parameter is the base two logarithm of the window size
+ (the size of the history buffer). It should be in the range 8..15 for this
+ version of the library. Larger values of this parameter result in better
+ compression at the expense of memory usage. The default value is 15 if
+ deflateInit is used instead.
+
+ windowBits can also be -8..-15 for raw deflate. In this case, -windowBits
+ determines the window size. deflate() will then generate raw deflate data
+ with no zlib header or trailer, and will not compute an adler32 check value.
+
+ windowBits can also be greater than 15 for optional gzip encoding. Add
+ 16 to windowBits to write a simple gzip header and trailer around the
+ compressed data instead of a zlib wrapper. The gzip header will have no
+ file name, no extra data, no comment, no modification time (set to zero), no
+ header crc, and the operating system will be set to 255 (unknown). If a
+ gzip stream is being written, strm->adler is a crc32 instead of an adler32.
+
+ The memLevel parameter specifies how much memory should be allocated
+ for the internal compression state. memLevel=1 uses minimum memory but is
+ slow and reduces compression ratio; memLevel=9 uses maximum memory for
+ optimal speed. The default value is 8. See zconf.h for total memory usage
+ as a function of windowBits and memLevel.
+
+ The strategy parameter is used to tune the compression algorithm. Use the
+ value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+ filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
+ string match), or Z_RLE to limit match distances to one (run-length
+ encoding). Filtered data consists mostly of small values with a somewhat
+ random distribution. In this case, the compression algorithm is tuned to
+ compress them better. The effect of Z_FILTERED is to force more Huffman
+ coding and less string matching; it is somewhat intermediate between
+ Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as
+ fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The
+ strategy parameter only affects the compression ratio but not the
+ correctness of the compressed output even if it is not set appropriately.
+ Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
+ decoder for special applications.
+
+ deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
+ method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is
+ incompatible with the version assumed by the caller (ZLIB_VERSION). msg is
+ set to null if there is no error message. deflateInit2 does not perform any
+ compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength));
+/*
+ Initializes the compression dictionary from the given byte sequence
+ without producing any compressed output. When using the zlib format, this
+ function must be called immediately after deflateInit, deflateInit2 or
+ deflateReset, and before any call of deflate. When doing raw deflate, this
+ function must be called either before any call of deflate, or immediately
+ after the completion of a deflate block, i.e. after all input has been
+ consumed and all output has been delivered when using any of the flush
+ options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The
+ compressor and decompressor must use exactly the same dictionary (see
+ inflateSetDictionary).
+
+ The dictionary should consist of strings (byte sequences) that are likely
+ to be encountered later in the data to be compressed, with the most commonly
+ used strings preferably put towards the end of the dictionary. Using a
+ dictionary is most useful when the data to be compressed is short and can be
+ predicted with good accuracy; the data can then be compressed better than
+ with the default empty dictionary.
+
+ Depending on the size of the compression data structures selected by
+ deflateInit or deflateInit2, a part of the dictionary may in effect be
+ discarded, for example if the dictionary is larger than the window size
+ provided in deflateInit or deflateInit2. Thus the strings most likely to be
+ useful should be put at the end of the dictionary, not at the front. In
+ addition, the current implementation of deflate will use at most the window
+ size minus 262 bytes of the provided dictionary.
+
+ Upon return of this function, strm->adler is set to the adler32 value
+ of the dictionary; the decompressor may later use this value to determine
+ which dictionary has been used by the compressor. (The adler32 value
+ applies to the whole dictionary even if only a subset of the dictionary is
+ actually used by the compressor.) If a raw deflate was requested, then the
+ adler32 value is not computed and strm->adler is not set.
+
+ deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent (for example if deflate has already been called for this stream
+ or if not at a block boundary for raw deflate). deflateSetDictionary does
+ not perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest,
+ z_streamp source));
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when several compression strategies will be
+ tried, for example when there are several ways of pre-processing the input
+ data with a filter. The streams that will be discarded should then be freed
+ by calling deflateEnd. Note that deflateCopy duplicates the internal
+ compression state which can be quite large, so this strategy is slow and can
+ consume lots of memory.
+
+ deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm));
+/*
+ This function is equivalent to deflateEnd followed by deflateInit,
+ but does not free and reallocate all the internal compression state. The
+ stream will keep the same compression level and any other attributes that
+ may have been set by deflateInit2.
+
+ deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm,
+ int level,
+ int strategy));
+/*
+ Dynamically update the compression level and compression strategy. The
+ interpretation of level and strategy is as in deflateInit2. This can be
+ used to switch between compression and straight copy of the input data, or
+ to switch to a different kind of input data requiring a different strategy.
+ If the compression level is changed, the input available so far is
+ compressed with the old level (and may be flushed); the new level will take
+ effect only at the next call of deflate().
+
+ Before the call of deflateParams, the stream state must be set as for
+ a call of deflate(), since the currently available input may have to be
+ compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+ deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+ stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if
+ strm->avail_out was zero.
+*/
+
+ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm,
+ int good_length,
+ int max_lazy,
+ int nice_length,
+ int max_chain));
+/*
+ Fine tune deflate's internal compression parameters. This should only be
+ used by someone who understands the algorithm used by zlib's deflate for
+ searching for the best matching string, and even then only by the most
+ fanatic optimizer trying to squeeze out the last compressed bit for their
+ specific input data. Read the deflate.c source code for the meaning of the
+ max_lazy, good_length, nice_length, and max_chain parameters.
+
+ deflateTune() can be called after deflateInit() or deflateInit2(), and
+ returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
+ */
+
+ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm,
+ uLong sourceLen));
+/*
+ deflateBound() returns an upper bound on the compressed size after
+ deflation of sourceLen bytes. It must be called after deflateInit() or
+ deflateInit2(), and after deflateSetHeader(), if used. This would be used
+ to allocate an output buffer for deflation in a single pass, and so would be
+ called before deflate(). If that first deflate() call is provided the
+ sourceLen input bytes, an output buffer allocated to the size returned by
+ deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed
+ to return Z_STREAM_END. Note that it is possible for the compressed size to
+ be larger than the value returned by deflateBound() if flush options other
+ than Z_FINISH or Z_NO_FLUSH are used.
+*/
+
+ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm,
+ unsigned *pending,
+ int *bits));
+/*
+ deflatePending() returns the number of bytes and bits of output that have
+ been generated, but not yet provided in the available output. The bytes not
+ provided would be due to the available output space having being consumed.
+ The number of bits of output not provided are between 0 and 7, where they
+ await more bits to join them in order to fill out a full byte. If pending
+ or bits are Z_NULL, then those values are not set.
+
+ deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+ */
+
+ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm,
+ int bits,
+ int value));
+/*
+ deflatePrime() inserts bits in the deflate output stream. The intent
+ is that this function is used to start off the deflate output with the bits
+ leftover from a previous deflate stream when appending to it. As such, this
+ function can only be used for raw deflate, and must be used before the first
+ deflate() call after a deflateInit2() or deflateReset(). bits must be less
+ than or equal to 16, and that many of the least significant bits of value
+ will be inserted in the output.
+
+ deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough
+ room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm,
+ gz_headerp head));
+/*
+ deflateSetHeader() provides gzip header information for when a gzip
+ stream is requested by deflateInit2(). deflateSetHeader() may be called
+ after deflateInit2() or deflateReset() and before the first call of
+ deflate(). The text, time, os, extra field, name, and comment information
+ in the provided gz_header structure are written to the gzip header (xflag is
+ ignored -- the extra flags are set according to the compression level). The
+ caller must assure that, if not Z_NULL, name and comment are terminated with
+ a zero byte, and that if extra is not Z_NULL, that extra_len bytes are
+ available there. If hcrc is true, a gzip header crc is included. Note that
+ the current versions of the command-line version of gzip (up through version
+ 1.3.x) do not support header crc's, and will report that it is a "multi-part
+ gzip file" and give up.
+
+ If deflateSetHeader is not used, the default gzip header has text false,
+ the time set to zero, and os set to 255, with no extra, name, or comment
+ fields. The gzip header is returned to the default state by deflateReset().
+
+ deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+ int windowBits));
+
+ This is another version of inflateInit with an extra parameter. The
+ fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+ before by the caller.
+
+ The windowBits parameter is the base two logarithm of the maximum window
+ size (the size of the history buffer). It should be in the range 8..15 for
+ this version of the library. The default value is 15 if inflateInit is used
+ instead. windowBits must be greater than or equal to the windowBits value
+ provided to deflateInit2() while compressing, or it must be equal to 15 if
+ deflateInit2() was not used. If a compressed stream with a larger window
+ size is given as input, inflate() will return with the error code
+ Z_DATA_ERROR instead of trying to allocate a larger window.
+
+ windowBits can also be zero to request that inflate use the window size in
+ the zlib header of the compressed stream.
+
+ windowBits can also be -8..-15 for raw inflate. In this case, -windowBits
+ determines the window size. inflate() will then process raw deflate data,
+ not looking for a zlib or gzip header, not generating a check value, and not
+ looking for any check values for comparison at the end of the stream. This
+ is for use with other formats that use the deflate compressed data format
+ such as zip. Those formats provide their own check values. If a custom
+ format is developed using the raw deflate format for compressed data, it is
+ recommended that a check value such as an adler32 or a crc32 be applied to
+ the uncompressed data as is done in the zlib, gzip, and zip formats. For
+ most applications, the zlib format should be used as is. Note that comments
+ above on the use in deflateInit2() applies to the magnitude of windowBits.
+
+ windowBits can also be greater than 15 for optional gzip decoding. Add
+ 32 to windowBits to enable zlib and gzip decoding with automatic header
+ detection, or add 16 to decode only the gzip format (the zlib format will
+ return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a
+ crc32 instead of an adler32.
+
+ inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+ version assumed by the caller, or Z_STREAM_ERROR if the parameters are
+ invalid, such as a null pointer to the structure. msg is set to null if
+ there is no error message. inflateInit2 does not perform any decompression
+ apart from possibly reading the zlib header if present: actual decompression
+ will be done by inflate(). (So next_in and avail_in may be modified, but
+ next_out and avail_out are unused and unchanged.) The current implementation
+ of inflateInit2() does not process any header information -- that is
+ deferred until inflate() is called.
+*/
+
+ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm,
+ const Bytef *dictionary,
+ uInt dictLength));
+/*
+ Initializes the decompression dictionary from the given uncompressed byte
+ sequence. This function must be called immediately after a call of inflate,
+ if that call returned Z_NEED_DICT. The dictionary chosen by the compressor
+ can be determined from the adler32 value returned by that call of inflate.
+ The compressor and decompressor must use exactly the same dictionary (see
+ deflateSetDictionary). For raw inflate, this function can be called at any
+ time to set the dictionary. If the provided dictionary is smaller than the
+ window and there is already data in the window, then the provided dictionary
+ will amend what's there. The application must insure that the dictionary
+ that was used for compression is provided.
+
+ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+ parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is
+ inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+ expected one (incorrect adler32 value). inflateSetDictionary does not
+ perform any decompression: this will be done by subsequent calls of
+ inflate().
+*/
+
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+ Bytef *dictionary,
+ uInt *dictLength));
+/*
+ Returns the sliding dictionary being maintained by inflate. dictLength is
+ set to the number of bytes in the dictionary, and that many bytes are copied
+ to dictionary. dictionary must have enough space, where 32768 bytes is
+ always enough. If inflateGetDictionary() is called with dictionary equal to
+ Z_NULL, then only the dictionary length is returned, and nothing is copied.
+ Similary, if dictLength is Z_NULL, then it is not set.
+
+ inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+ stream state is inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
+/*
+ Skips invalid compressed data until a possible full flush point (see above
+ for the description of deflate with Z_FULL_FLUSH) can be found, or until all
+ available input is skipped. No output is provided.
+
+ inflateSync searches for a 00 00 FF FF pattern in the compressed data.
+ All full flush points have this pattern, but not all occurrences of this
+ pattern are full flush points.
+
+ inflateSync returns Z_OK if a possible full flush point has been found,
+ Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point
+ has been found, or Z_STREAM_ERROR if the stream structure was inconsistent.
+ In the success case, the application may save the current current value of
+ total_in which indicates where valid compressed data was found. In the
+ error case, the application may repeatedly call inflateSync, providing more
+ input each time, until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
+ z_streamp source));
+/*
+ Sets the destination stream as a complete copy of the source stream.
+
+ This function can be useful when randomly accessing a large stream. The
+ first pass through the stream can periodically record the inflate state,
+ allowing restarting inflate at those points when randomly accessing the
+ stream.
+
+ inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+ (such as zalloc being Z_NULL). msg is left unchanged in both source and
+ destination.
+*/
+
+ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
+/*
+ This function is equivalent to inflateEnd followed by inflateInit,
+ but does not free and reallocate all the internal decompression state. The
+ stream will keep attributes that may have been set by inflateInit2.
+
+ inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL).
+*/
+
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm,
+ int windowBits));
+/*
+ This function is the same as inflateReset, but it also permits changing
+ the wrap and window size requests. The windowBits parameter is interpreted
+ the same as it is for inflateInit2.
+
+ inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent (such as zalloc or state being Z_NULL), or if
+ the windowBits parameter is invalid.
+*/
+
+ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
+ int bits,
+ int value));
+/*
+ This function inserts bits in the inflate input stream. The intent is
+ that this function is used to start inflating at a bit position in the
+ middle of a byte. The provided bits will be used before any bytes are used
+ from next_in. This function should only be used with raw inflate, and
+ should be used before the first inflate() call after inflateInit2() or
+ inflateReset(). bits must be less than or equal to 16, and that many of the
+ least significant bits of value will be inserted in the input.
+
+ If bits is negative, then the input stream bit buffer is emptied. Then
+ inflatePrime() can be called again to put bits in the buffer. This is used
+ to clear out bits leftover after feeding inflate a block description prior
+ to feeding inflate codes.
+
+ inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm));
+/*
+ This function returns two values, one in the lower 16 bits of the return
+ value, and the other in the remaining upper bits, obtained by shifting the
+ return value down 16 bits. If the upper value is -1 and the lower value is
+ zero, then inflate() is currently decoding information outside of a block.
+ If the upper value is -1 and the lower value is non-zero, then inflate is in
+ the middle of a stored block, with the lower value equaling the number of
+ bytes from the input remaining to copy. If the upper value is not -1, then
+ it is the number of bits back from the current bit position in the input of
+ the code (literal or length/distance pair) currently being processed. In
+ that case the lower value is the number of bytes already emitted for that
+ code.
+
+ A code is being processed if inflate is waiting for more input to complete
+ decoding of the code, or if it has completed decoding but is waiting for
+ more output space to write the literal or match data.
+
+ inflateMark() is used to mark locations in the input data for random
+ access, which may be at bit positions, and to note those cases where the
+ output of a code may span boundaries of random access blocks. The current
+ location in the input stream can be determined from avail_in and data_type
+ as noted in the description for the Z_BLOCK flush parameter for inflate.
+
+ inflateMark returns the value noted above or -1 << 16 if the provided
+ source stream state was inconsistent.
+*/
+
+ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm,
+ gz_headerp head));
+/*
+ inflateGetHeader() requests that gzip header information be stored in the
+ provided gz_header structure. inflateGetHeader() may be called after
+ inflateInit2() or inflateReset(), and before the first call of inflate().
+ As inflate() processes the gzip stream, head->done is zero until the header
+ is completed, at which time head->done is set to one. If a zlib stream is
+ being decoded, then head->done is set to -1 to indicate that there will be
+ no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be
+ used to force inflate() to return immediately after header processing is
+ complete and before any actual data is decompressed.
+
+ The text, time, xflags, and os fields are filled in with the gzip header
+ contents. hcrc is set to true if there is a header CRC. (The header CRC
+ was valid if done is set to one.) If extra is not Z_NULL, then extra_max
+ contains the maximum number of bytes to write to extra. Once done is true,
+ extra_len contains the actual extra field length, and extra contains the
+ extra field, or that field truncated if extra_max is less than extra_len.
+ If name is not Z_NULL, then up to name_max characters are written there,
+ terminated with a zero unless the length is greater than name_max. If
+ comment is not Z_NULL, then up to comm_max characters are written there,
+ terminated with a zero unless the length is greater than comm_max. When any
+ of extra, name, or comment are not Z_NULL and the respective field is not
+ present in the header, then that field is set to Z_NULL to signal its
+ absence. This allows the use of deflateSetHeader() with the returned
+ structure to duplicate the header. However if those fields are set to
+ allocated memory, then the application will need to save those pointers
+ elsewhere so that they can be eventually freed.
+
+ If inflateGetHeader is not used, then the header information is simply
+ discarded. The header is always checked for validity, including the header
+ CRC if present. inflateReset() will reset the process to discard the header
+ information. The application would need to call inflateGetHeader() again to
+ retrieve the header from the next gzip stream.
+
+ inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source
+ stream state was inconsistent.
+*/
+
+/*
+ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits,
+ unsigned char FAR *window));
+
+ Initialize the internal stream state for decompression using inflateBack()
+ calls. The fields zalloc, zfree and opaque in strm must be initialized
+ before the call. If zalloc and zfree are Z_NULL, then the default library-
+ derived memory allocation routines are used. windowBits is the base two
+ logarithm of the window size, in the range 8..15. window is a caller
+ supplied buffer of that size. Except for special applications where it is
+ assured that deflate was used with small window sizes, windowBits must be 15
+ and a 32K byte window must be supplied to be able to decompress general
+ deflate streams.
+
+ See inflateBack() for the usage of these routines.
+
+ inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of
+ the parameters are invalid, Z_MEM_ERROR if the internal state could not be
+ allocated, or Z_VERSION_ERROR if the version of the library does not match
+ the version of the header file.
+*/
+
+typedef unsigned (*in_func) OF((void FAR *,
+ z_const unsigned char FAR * FAR *));
+typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned));
+
+ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm,
+ in_func in, void FAR *in_desc,
+ out_func out, void FAR *out_desc));
+/*
+ inflateBack() does a raw inflate with a single call using a call-back
+ interface for input and output. This is potentially more efficient than
+ inflate() for file i/o applications, in that it avoids copying between the
+ output and the sliding window by simply making the window itself the output
+ buffer. inflate() can be faster on modern CPUs when used with large
+ buffers. inflateBack() trusts the application to not change the output
+ buffer passed by the output function, at least until inflateBack() returns.
+
+ inflateBackInit() must be called first to allocate the internal state
+ and to initialize the state with the user-provided window buffer.
+ inflateBack() may then be used multiple times to inflate a complete, raw
+ deflate stream with each call. inflateBackEnd() is then called to free the
+ allocated state.
+
+ A raw deflate stream is one with no zlib or gzip header or trailer.
+ This routine would normally be used in a utility that reads zip or gzip
+ files and writes out uncompressed files. The utility would decode the
+ header and process the trailer on its own, hence this routine expects only
+ the raw deflate stream to decompress. This is different from the normal
+ behavior of inflate(), which expects either a zlib or gzip header and
+ trailer around the deflate stream.
+
+ inflateBack() uses two subroutines supplied by the caller that are then
+ called by inflateBack() for input and output. inflateBack() calls those
+ routines until it reads a complete deflate stream and writes out all of the
+ uncompressed data, or until it encounters an error. The function's
+ parameters and return types are defined above in the in_func and out_func
+ typedefs. inflateBack() will call in(in_desc, &buf) which should return the
+ number of bytes of provided input, and a pointer to that input in buf. If
+ there is no input available, in() must return zero--buf is ignored in that
+ case--and inflateBack() will return a buffer error. inflateBack() will call
+ out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out()
+ should return zero on success, or non-zero on failure. If out() returns
+ non-zero, inflateBack() will return with an error. Neither in() nor out()
+ are permitted to change the contents of the window provided to
+ inflateBackInit(), which is also the buffer that out() uses to write from.
+ The length written by out() will be at most the window size. Any non-zero
+ amount of input may be provided by in().
+
+ For convenience, inflateBack() can be provided input on the first call by
+ setting strm->next_in and strm->avail_in. If that input is exhausted, then
+ in() will be called. Therefore strm->next_in must be initialized before
+ calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called
+ immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in
+ must also be initialized, and then if strm->avail_in is not zero, input will
+ initially be taken from strm->next_in[0 .. strm->avail_in - 1].
+
+ The in_desc and out_desc parameters of inflateBack() is passed as the
+ first parameter of in() and out() respectively when they are called. These
+ descriptors can be optionally used to pass any information that the caller-
+ supplied in() and out() functions need to do their job.
+
+ On return, inflateBack() will set strm->next_in and strm->avail_in to
+ pass back any unused input that was provided by the last in() call. The
+ return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR
+ if in() or out() returned an error, Z_DATA_ERROR if there was a format error
+ in the deflate stream (in which case strm->msg is set to indicate the nature
+ of the error), or Z_STREAM_ERROR if the stream was not properly initialized.
+ In the case of Z_BUF_ERROR, an input or output error can be distinguished
+ using strm->next_in which will be Z_NULL only if in() returned an error. If
+ strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning
+ non-zero. (in() will always be called before out(), so strm->next_in is
+ assured to be defined if out() returns non-zero.) Note that inflateBack()
+ cannot return Z_OK.
+*/
+
+ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm));
+/*
+ All memory allocated by inflateBackInit() is freed.
+
+ inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream
+ state was inconsistent.
+*/
+
+ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void));
+/* Return flags indicating compile-time options.
+
+ Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other:
+ 1.0: size of uInt
+ 3.2: size of uLong
+ 5.4: size of voidpf (pointer)
+ 7.6: size of z_off_t
+
+ Compiler, assembler, and debug options:
+ 8: DEBUG
+ 9: ASMV or ASMINF -- use ASM code
+ 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention
+ 11: 0 (reserved)
+
+ One-time table building (smaller code, but not thread-safe if true):
+ 12: BUILDFIXED -- build static block decoding tables when needed
+ 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed
+ 14,15: 0 (reserved)
+
+ Library content (indicates missing functionality):
+ 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking
+ deflate code when not needed)
+ 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect
+ and decode gzip streams (to avoid linking crc code)
+ 18-19: 0 (reserved)
+
+ Operation variations (changes in library functionality):
+ 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate
+ 21: FASTEST -- deflate algorithm with only one, lowest compression level
+ 22,23: 0 (reserved)
+
+ The sprintf variant used by gzprintf (zero is best):
+ 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
+ 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+ 26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+
+ Remainder:
+ 27-31: 0 (reserved)
+ */
+
+#ifndef Z_SOLO
+
+ /* utility functions */
+
+/*
+ The following utility functions are implemented on top of the basic
+ stream-oriented functions. To simplify the interface, some default options
+ are assumed (compression level and memory usage, standard memory allocation
+ functions). The source code of these utility functions can be modified if
+ you need special options.
+*/
+
+ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen));
+/*
+ Compresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed buffer.
+
+ compress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer.
+*/
+
+ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen,
+ int level));
+/*
+ Compresses the source buffer into the destination buffer. The level
+ parameter has the same meaning as in deflateInit. sourceLen is the byte
+ length of the source buffer. Upon entry, destLen is the total size of the
+ destination buffer, which must be at least the value returned by
+ compressBound(sourceLen). Upon exit, destLen is the actual size of the
+ compressed buffer.
+
+ compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+ memory, Z_BUF_ERROR if there was not enough room in the output buffer,
+ Z_STREAM_ERROR if the level parameter is invalid.
+*/
+
+ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen));
+/*
+ compressBound() returns an upper bound on the compressed size after
+ compress() or compress2() on sourceLen bytes. It would be used before a
+ compress() or compress2() call to allocate the destination buffer.
+*/
+
+ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen,
+ const Bytef *source, uLong sourceLen));
+/*
+ Decompresses the source buffer into the destination buffer. sourceLen is
+ the byte length of the source buffer. Upon entry, destLen is the total size
+ of the destination buffer, which must be large enough to hold the entire
+ uncompressed data. (The size of the uncompressed data must have been saved
+ previously by the compressor and transmitted to the decompressor by some
+ mechanism outside the scope of this compression library.) Upon exit, destLen
+ is the actual size of the uncompressed buffer.
+
+ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
+ enough memory, Z_BUF_ERROR if there was not enough room in the output
+ buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In
+ the case where there is not enough room, uncompress() will fill the output
+ buffer with the uncompressed data up to that point.
+*/
+
+ /* gzip file access functions */
+
+/*
+ This library supports reading and writing files in gzip (.gz) format with
+ an interface similar to that of stdio, using the functions that start with
+ "gz". The gzip format is different from the zlib format. gzip is a gzip
+ wrapper, documented in RFC 1952, wrapped around a deflate stream.
+*/
+
+typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */
+
+/*
+ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
+
+ Opens a gzip (.gz) file for reading or writing. The mode parameter is as
+ in fopen ("rb" or "wb") but can also include a compression level ("wb9") or
+ a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only
+ compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F'
+ for fixed code compression as in "wb9F". (See the description of
+ deflateInit2 for more information about the strategy parameter.) 'T' will
+ request transparent writing or appending with no compression and not using
+ the gzip format.
+
+ "a" can be used instead of "w" to request that the gzip stream that will
+ be written be appended to the file. "+" will result in an error, since
+ reading and writing to the same gzip file is not supported. The addition of
+ "x" when writing will create the file exclusively, which fails if the file
+ already exists. On systems that support it, the addition of "e" when
+ reading or writing will set the flag to close the file on an execve() call.
+
+ These functions, as well as gzip, will read and decode a sequence of gzip
+ streams in a file. The append function of gzopen() can be used to create
+ such a file. (Also see gzflush() for another way to do this.) When
+ appending, gzopen does not test whether the file begins with a gzip stream,
+ nor does it look for the end of the gzip streams to begin appending. gzopen
+ will simply append a gzip stream to the existing file.
+
+ gzopen can be used to read a file which is not in gzip format; in this
+ case gzread will directly read from the file without decompression. When
+ reading, this will be detected automatically by looking for the magic two-
+ byte gzip header.
+
+ gzopen returns NULL if the file could not be opened, if there was
+ insufficient memory to allocate the gzFile state, or if an invalid mode was
+ specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
+ errno can be checked to determine if the reason gzopen failed was that the
+ file could not be opened.
+*/
+
+ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode));
+/*
+ gzdopen associates a gzFile with the file descriptor fd. File descriptors
+ are obtained from calls like open, dup, creat, pipe or fileno (if the file
+ has been previously opened with fopen). The mode parameter is as in gzopen.
+
+ The next call of gzclose on the returned gzFile will also close the file
+ descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
+ fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd,
+ mode);. The duplicated descriptor should be saved to avoid a leak, since
+ gzdopen does not close fd if it fails. If you are using fileno() to get the
+ file descriptor from a FILE *, then you will have to use dup() to avoid
+ double-close()ing the file descriptor. Both gzclose() and fclose() will
+ close the associated file descriptor, so they need to have different file
+ descriptors.
+
+ gzdopen returns NULL if there was insufficient memory to allocate the
+ gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not
+ provided, or '+' was provided), or if fd is -1. The file descriptor is not
+ used until the next gz* read, write, seek, or close operation, so gzdopen
+ will not detect if fd is invalid (unless fd is -1).
+*/
+
+ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size));
+/*
+ Set the internal buffer size used by this library's functions. The
+ default buffer size is 8192 bytes. This function must be called after
+ gzopen() or gzdopen(), and before any other calls that read or write the
+ file. The buffer memory allocation is always deferred to the first read or
+ write. Two buffers are allocated, either both of the specified size when
+ writing, or one of the specified size and the other twice that size when
+ reading. A larger buffer size of, for example, 64K or 128K bytes will
+ noticeably increase the speed of decompression (reading).
+
+ The new buffer size also affects the maximum length for gzprintf().
+
+ gzbuffer() returns 0 on success, or -1 on failure, such as being called
+ too late.
+*/
+
+ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy));
+/*
+ Dynamically update the compression level or strategy. See the description
+ of deflateInit2 for the meaning of these parameters.
+
+ gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not
+ opened for writing.
+*/
+
+ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len));
+/*
+ Reads the given number of uncompressed bytes from the compressed file. If
+ the input file is not in gzip format, gzread copies the given number of
+ bytes into the buffer directly from the file.
+
+ After reaching the end of a gzip stream in the input, gzread will continue
+ to read, looking for another gzip stream. Any number of gzip streams may be
+ concatenated in the input file, and will all be decompressed by gzread().
+ If something other than a gzip stream is encountered after a gzip stream,
+ that remaining trailing garbage is ignored (and no error is returned).
+
+ gzread can be used to read a gzip file that is being concurrently written.
+ Upon reaching the end of the input, gzread will return with the available
+ data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then
+ gzclearerr can be used to clear the end of file indicator in order to permit
+ gzread to be tried again. Z_OK indicates that a gzip stream was completed
+ on the last gzread. Z_BUF_ERROR indicates that the input file ended in the
+ middle of a gzip stream. Note that gzread does not return -1 in the event
+ of an incomplete gzip stream. This error is deferred until gzclose(), which
+ will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip
+ stream. Alternatively, gzerror can be used before gzclose to detect this
+ case.
+
+ gzread returns the number of uncompressed bytes actually read, less than
+ len for end of file, or -1 for error.
+*/
+
+ZEXTERN int ZEXPORT gzwrite OF((gzFile file,
+ voidpc buf, unsigned len));
+/*
+ Writes the given number of uncompressed bytes into the compressed file.
+ gzwrite returns the number of uncompressed bytes written or 0 in case of
+ error.
+*/
+
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
+/*
+ Converts, formats, and writes the arguments to the compressed file under
+ control of the format string, as in fprintf. gzprintf returns the number of
+ uncompressed bytes actually written, or 0 in case of error. The number of
+ uncompressed bytes written is limited to 8191, or one less than the buffer
+ size given to gzbuffer(). The caller should assure that this limit is not
+ exceeded. If it is exceeded, then gzprintf() will return an error (0) with
+ nothing written. In this case, there may also be a buffer overflow with
+ unpredictable consequences, which is possible only if zlib was compiled with
+ the insecure functions sprintf() or vsprintf() because the secure snprintf()
+ or vsnprintf() functions were not available. This can be determined using
+ zlibCompileFlags().
+*/
+
+ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s));
+/*
+ Writes the given null-terminated string to the compressed file, excluding
+ the terminating null character.
+
+ gzputs returns the number of characters written, or -1 in case of error.
+*/
+
+ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len));
+/*
+ Reads bytes from the compressed file until len-1 characters are read, or a
+ newline character is read and transferred to buf, or an end-of-file
+ condition is encountered. If any characters are read or if len == 1, the
+ string is terminated with a null character. If no characters are read due
+ to an end-of-file or len < 1, then the buffer is left untouched.
+
+ gzgets returns buf which is a null-terminated string, or it returns NULL
+ for end-of-file or in case of error. If there was an error, the contents at
+ buf are indeterminate.
+*/
+
+ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c));
+/*
+ Writes c, converted to an unsigned char, into the compressed file. gzputc
+ returns the value that was written, or -1 in case of error.
+*/
+
+ZEXTERN int ZEXPORT gzgetc OF((gzFile file));
+/*
+ Reads one byte from the compressed file. gzgetc returns this byte or -1
+ in case of end of file or error. This is implemented as a macro for speed.
+ As such, it does not do all of the checking the other functions do. I.e.
+ it does not check to see if file is NULL, nor whether the structure file
+ points to has been clobbered or not.
+*/
+
+ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file));
+/*
+ Push one character back onto the stream to be read as the first character
+ on the next read. At least one character of push-back is allowed.
+ gzungetc() returns the character pushed, or -1 on failure. gzungetc() will
+ fail if c is -1, and may fail if a character has been pushed but not read
+ yet. If gzungetc is used immediately after gzopen or gzdopen, at least the
+ output buffer size of pushed characters is allowed. (See gzbuffer above.)
+ The pushed character will be discarded if the stream is repositioned with
+ gzseek() or gzrewind().
+*/
+
+ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush));
+/*
+ Flushes all pending output into the compressed file. The parameter flush
+ is as in the deflate() function. The return value is the zlib error number
+ (see function gzerror below). gzflush is only permitted when writing.
+
+ If the flush parameter is Z_FINISH, the remaining data is written and the
+ gzip stream is completed in the output. If gzwrite() is called again, a new
+ gzip stream will be started in the output. gzread() is able to read such
+ concatented gzip streams.
+
+ gzflush should be called only when strictly necessary because it will
+ degrade compression if called too often.
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file,
+ z_off_t offset, int whence));
+
+ Sets the starting position for the next gzread or gzwrite on the given
+ compressed file. The offset represents a number of bytes in the
+ uncompressed data stream. The whence parameter is defined as in lseek(2);
+ the value SEEK_END is not supported.
+
+ If the file is opened for reading, this function is emulated but can be
+ extremely slow. If the file is opened for writing, only forward seeks are
+ supported; gzseek then compresses a sequence of zeroes up to the new
+ starting position.
+
+ gzseek returns the resulting offset location as measured in bytes from
+ the beginning of the uncompressed stream, or -1 in case of error, in
+ particular if the file is opened for writing and the new starting position
+ would be before the current position.
+*/
+
+ZEXTERN int ZEXPORT gzrewind OF((gzFile file));
+/*
+ Rewinds the given file. This function is supported only for reading.
+
+ gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file));
+
+ Returns the starting position for the next gzread or gzwrite on the given
+ compressed file. This position represents a number of bytes in the
+ uncompressed data stream, and is zero when starting, even if appending or
+ reading a gzip stream from the middle of a file using gzdopen().
+
+ gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR)
+*/
+
+/*
+ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file));
+
+ Returns the current offset in the file being read or written. This offset
+ includes the count of bytes that precede the gzip stream, for example when
+ appending or when using gzdopen() for reading. When reading, the offset
+ does not include as yet unused buffered input. This information can be used
+ for a progress indicator. On error, gzoffset() returns -1.
+*/
+
+ZEXTERN int ZEXPORT gzeof OF((gzFile file));
+/*
+ Returns true (1) if the end-of-file indicator has been set while reading,
+ false (0) otherwise. Note that the end-of-file indicator is set only if the
+ read tried to go past the end of the input, but came up short. Therefore,
+ just like feof(), gzeof() may return false even if there is no more data to
+ read, in the event that the last read request was for the exact number of
+ bytes remaining in the input file. This will happen if the input file size
+ is an exact multiple of the buffer size.
+
+ If gzeof() returns true, then the read functions will return no more data,
+ unless the end-of-file indicator is reset by gzclearerr() and the input file
+ has grown since the previous end of file was detected.
+*/
+
+ZEXTERN int ZEXPORT gzdirect OF((gzFile file));
+/*
+ Returns true (1) if file is being copied directly while reading, or false
+ (0) if file is a gzip stream being decompressed.
+
+ If the input file is empty, gzdirect() will return true, since the input
+ does not contain a gzip stream.
+
+ If gzdirect() is used immediately after gzopen() or gzdopen() it will
+ cause buffers to be allocated to allow reading the file to determine if it
+ is a gzip file. Therefore if gzbuffer() is used, it should be called before
+ gzdirect().
+
+ When writing, gzdirect() returns true (1) if transparent writing was
+ requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note:
+ gzdirect() is not needed when writing. Transparent writing must be
+ explicitly requested, so the application already knows the answer. When
+ linking statically, using gzdirect() will include all of the zlib code for
+ gzip file reading and decompression, which may not be desired.)
+*/
+
+ZEXTERN int ZEXPORT gzclose OF((gzFile file));
+/*
+ Flushes all pending output if necessary, closes the compressed file and
+ deallocates the (de)compression state. Note that once file is closed, you
+ cannot call gzerror with file, since its structures have been deallocated.
+ gzclose must not be called more than once on the same file, just as free
+ must not be called more than once on the same allocation.
+
+ gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a
+ file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the
+ last read ended in the middle of a gzip stream, or Z_OK on success.
+*/
+
+ZEXTERN int ZEXPORT gzclose_r OF((gzFile file));
+ZEXTERN int ZEXPORT gzclose_w OF((gzFile file));
+/*
+ Same as gzclose(), but gzclose_r() is only for use when reading, and
+ gzclose_w() is only for use when writing or appending. The advantage to
+ using these instead of gzclose() is that they avoid linking in zlib
+ compression or decompression code that is not used when only reading or only
+ writing respectively. If gzclose() is used, then both compression and
+ decompression code will be included the application when linking to a static
+ zlib library.
+*/
+
+ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum));
+/*
+ Returns the error message for the last error which occurred on the given
+ compressed file. errnum is set to zlib error number. If an error occurred
+ in the file system and not in the compression library, errnum is set to
+ Z_ERRNO and the application may consult errno to get the exact error code.
+
+ The application must not modify the returned string. Future calls to
+ this function may invalidate the previously returned string. If file is
+ closed, then the string previously returned by gzerror will no longer be
+ available.
+
+ gzerror() should be used to distinguish errors from end-of-file for those
+ functions above that do not distinguish those cases in their return values.
+*/
+
+ZEXTERN void ZEXPORT gzclearerr OF((gzFile file));
+/*
+ Clears the error and end-of-file flags for file. This is analogous to the
+ clearerr() function in stdio. This is useful for continuing to read a gzip
+ file that is being written concurrently.
+*/
+
+#endif /* !Z_SOLO */
+
+ /* checksum functions */
+
+/*
+ These functions are not related to compression but are exported
+ anyway because they might be useful in applications using the compression
+ library.
+*/
+
+ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
+/*
+ Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+ return the updated checksum. If buf is Z_NULL, this function returns the
+ required initial value for the checksum.
+
+ An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+ much faster.
+
+ Usage example:
+
+ uLong adler = adler32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ adler = adler32(adler, buffer, length);
+ }
+ if (adler != original_adler) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2,
+ z_off_t len2));
+
+ Combine two Adler-32 checksums into one. For two sequences of bytes, seq1
+ and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for
+ each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of
+ seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note
+ that the z_off_t type (like off_t) is a signed integer. If len2 is
+ negative, the result has no meaning or utility.
+*/
+
+ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
+/*
+ Update a running CRC-32 with the bytes buf[0..len-1] and return the
+ updated CRC-32. If buf is Z_NULL, this function returns the required
+ initial value for the crc. Pre- and post-conditioning (one's complement) is
+ performed within this function so it shouldn't be done by the application.
+
+ Usage example:
+
+ uLong crc = crc32(0L, Z_NULL, 0);
+
+ while (read_buffer(buffer, length) != EOF) {
+ crc = crc32(crc, buffer, length);
+ }
+ if (crc != original_crc) error();
+*/
+
+/*
+ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2));
+
+ Combine two CRC-32 check values into one. For two sequences of bytes,
+ seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
+ calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32
+ check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
+ len2.
+*/
+
+
+ /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
+ int windowBits, int memLevel,
+ int strategy, const char *version,
+ int stream_size));
+ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
+ const char *version, int stream_size));
+ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits,
+ unsigned char FAR *window,
+ const char *version,
+ int stream_size));
+#define deflateInit(strm, level) \
+ deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit(strm) \
+ inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream))
+#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+ (strategy), ZLIB_VERSION, (int)sizeof(z_stream))
+#define inflateInit2(strm, windowBits) \
+ inflateInit2_((strm), (windowBits), ZLIB_VERSION, \
+ (int)sizeof(z_stream))
+#define inflateBackInit(strm, windowBits, window) \
+ inflateBackInit_((strm), (windowBits), (window), \
+ ZLIB_VERSION, (int)sizeof(z_stream))
+
+#ifndef Z_SOLO
+
+/* gzgetc() macro and its supporting function and exposed data structure. Note
+ * that the real internal state is much larger than the exposed structure.
+ * This abbreviated structure exposes just enough for the gzgetc() macro. The
+ * user should not mess with these exposed elements, since their names or
+ * behavior could change in the future, perhaps even capriciously. They can
+ * only be used by the gzgetc() macro. You have been warned.
+ */
+struct gzFile_s {
+ unsigned have;
+ unsigned char *next;
+ z_off64_t pos;
+};
+ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+# define z_gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#else
+# define gzgetc(g) \
+ ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
+#endif
+
+/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
+ * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
+ * both are true, the application gets the *64 functions, and the regular
+ * functions are changed to 64 bits) -- in case these are set on systems
+ * without large file support, _LFS64_LARGEFILE must also be true
+ */
+#ifdef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t));
+#endif
+
+#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64)
+# ifdef Z_PREFIX_SET
+# define z_gzopen z_gzopen64
+# define z_gzseek z_gzseek64
+# define z_gztell z_gztell64
+# define z_gzoffset z_gzoffset64
+# define z_adler32_combine z_adler32_combine64
+# define z_crc32_combine z_crc32_combine64
+# else
+# define gzopen gzopen64
+# define gzseek gzseek64
+# define gztell gztell64
+# define gzoffset gzoffset64
+# define adler32_combine adler32_combine64
+# define crc32_combine crc32_combine64
+# endif
+# ifndef Z_LARGE64
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+# endif
+#else
+ ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *));
+ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int));
+ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile));
+ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile));
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+#endif
+
+#else /* Z_SOLO */
+
+ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t));
+
+#endif /* !Z_SOLO */
+
+/* hack for buggy compilers */
+#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL)
+ struct internal_state {int dummy;};
+#endif
+
+/* undocumented functions */
+ZEXTERN const char * ZEXPORT zError OF((int));
+ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp));
+ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void));
+ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int));
+ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp));
+ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp));
+#if defined(_WIN32) && !defined(Z_SOLO)
+ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path,
+ const char *mode));
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifndef Z_SOLO
+ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file,
+ const char *format,
+ va_list va));
+# endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ZLIB_H */
diff --git a/src/Common/zlib/zutil.c b/src/Common/zlib/zutil.c
new file mode 100644
index 0000000..23d2ebe
--- /dev/null
+++ b/src/Common/zlib/zutil.c
@@ -0,0 +1,324 @@
+/* zutil.c -- target dependent utility functions for the compression library
+ * Copyright (C) 1995-2005, 2010, 2011, 2012 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+#ifndef Z_SOLO
+# include "gzguts.h"
+#endif
+
+#ifndef NO_DUMMY_DECL
+struct internal_state {int dummy;}; /* for buggy compilers */
+#endif
+
+z_const char * const z_errmsg[10] = {
+"need dictionary", /* Z_NEED_DICT 2 */
+"stream end", /* Z_STREAM_END 1 */
+"", /* Z_OK 0 */
+"file error", /* Z_ERRNO (-1) */
+"stream error", /* Z_STREAM_ERROR (-2) */
+"data error", /* Z_DATA_ERROR (-3) */
+"insufficient memory", /* Z_MEM_ERROR (-4) */
+"buffer error", /* Z_BUF_ERROR (-5) */
+"incompatible version",/* Z_VERSION_ERROR (-6) */
+""};
+
+
+const char * ZEXPORT zlibVersion()
+{
+ return ZLIB_VERSION;
+}
+
+uLong ZEXPORT zlibCompileFlags()
+{
+ uLong flags;
+
+ flags = 0;
+ switch ((int)(sizeof(uInt))) {
+ case 2: break;
+ case 4: flags += 1; break;
+ case 8: flags += 2; break;
+ default: flags += 3;
+ }
+ switch ((int)(sizeof(uLong))) {
+ case 2: break;
+ case 4: flags += 1 << 2; break;
+ case 8: flags += 2 << 2; break;
+ default: flags += 3 << 2;
+ }
+ switch ((int)(sizeof(voidpf))) {
+ case 2: break;
+ case 4: flags += 1 << 4; break;
+ case 8: flags += 2 << 4; break;
+ default: flags += 3 << 4;
+ }
+ switch ((int)(sizeof(z_off_t))) {
+ case 2: break;
+ case 4: flags += 1 << 6; break;
+ case 8: flags += 2 << 6; break;
+ default: flags += 3 << 6;
+ }
+#ifdef DEBUG
+ flags += 1 << 8;
+#endif
+#if defined(ASMV) || defined(ASMINF)
+ flags += 1 << 9;
+#endif
+#ifdef ZLIB_WINAPI
+ flags += 1 << 10;
+#endif
+#ifdef BUILDFIXED
+ flags += 1 << 12;
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+ flags += 1 << 13;
+#endif
+#ifdef NO_GZCOMPRESS
+ flags += 1L << 16;
+#endif
+#ifdef NO_GZIP
+ flags += 1L << 17;
+#endif
+#ifdef PKZIP_BUG_WORKAROUND
+ flags += 1L << 20;
+#endif
+#ifdef FASTEST
+ flags += 1L << 21;
+#endif
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+# ifdef NO_vsnprintf
+ flags += 1L << 25;
+# ifdef HAS_vsprintf_void
+ flags += 1L << 26;
+# endif
+# else
+# ifdef HAS_vsnprintf_void
+ flags += 1L << 26;
+# endif
+# endif
+#else
+ flags += 1L << 24;
+# ifdef NO_snprintf
+ flags += 1L << 25;
+# ifdef HAS_sprintf_void
+ flags += 1L << 26;
+# endif
+# else
+# ifdef HAS_snprintf_void
+ flags += 1L << 26;
+# endif
+# endif
+#endif
+ return flags;
+}
+
+#ifdef DEBUG
+
+# ifndef verbose
+# define verbose 0
+# endif
+int ZLIB_INTERNAL z_verbose = verbose;
+
+void ZLIB_INTERNAL z_error (m)
+ char *m;
+{
+ fprintf(stderr, "%s\n", m);
+ exit(1);
+}
+#endif
+
+/* exported to allow conversion of error code to string for compress() and
+ * uncompress()
+ */
+const char * ZEXPORT zError(err)
+ int err;
+{
+ return ERR_MSG(err);
+}
+
+#if defined(_WIN32_WCE)
+ /* The Microsoft C Run-Time Library for Windows CE doesn't have
+ * errno. We define it as a global variable to simplify porting.
+ * Its value is always 0 and should not be used.
+ */
+ int errno = 0;
+#endif
+
+#ifndef HAVE_MEMCPY
+
+void ZLIB_INTERNAL zmemcpy(dest, source, len)
+ Bytef* dest;
+ const Bytef* source;
+ uInt len;
+{
+ if (len == 0) return;
+ do {
+ *dest++ = *source++; /* ??? to be unrolled */
+ } while (--len != 0);
+}
+
+int ZLIB_INTERNAL zmemcmp(s1, s2, len)
+ const Bytef* s1;
+ const Bytef* s2;
+ uInt len;
+{
+ uInt j;
+
+ for (j = 0; j < len; j++) {
+ if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
+ }
+ return 0;
+}
+
+void ZLIB_INTERNAL zmemzero(dest, len)
+ Bytef* dest;
+ uInt len;
+{
+ if (len == 0) return;
+ do {
+ *dest++ = 0; /* ??? to be unrolled */
+ } while (--len != 0);
+}
+#endif
+
+#ifndef Z_SOLO
+
+#ifdef SYS16BIT
+
+#ifdef __TURBOC__
+/* Turbo C in 16-bit mode */
+
+# define MY_ZCALLOC
+
+/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
+ * and farmalloc(64K) returns a pointer with an offset of 8, so we
+ * must fix the pointer. Warning: the pointer must be put back to its
+ * original form in order to free it, use zcfree().
+ */
+
+#define MAX_PTR 10
+/* 10*64K = 640K */
+
+local int next_ptr = 0;
+
+typedef struct ptr_table_s {
+ voidpf org_ptr;
+ voidpf new_ptr;
+} ptr_table;
+
+local ptr_table table[MAX_PTR];
+/* This table is used to remember the original form of pointers
+ * to large buffers (64K). Such pointers are normalized with a zero offset.
+ * Since MSDOS is not a preemptive multitasking OS, this table is not
+ * protected from concurrent access. This hack doesn't work anyway on
+ * a protected system like OS/2. Use Microsoft C instead.
+ */
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size)
+{
+ voidpf buf = opaque; /* just to make some compilers happy */
+ ulg bsize = (ulg)items*size;
+
+ /* If we allocate less than 65520 bytes, we assume that farmalloc
+ * will return a usable pointer which doesn't have to be normalized.
+ */
+ if (bsize < 65520L) {
+ buf = farmalloc(bsize);
+ if (*(ush*)&buf != 0) return buf;
+ } else {
+ buf = farmalloc(bsize + 16L);
+ }
+ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
+ table[next_ptr].org_ptr = buf;
+
+ /* Normalize the pointer to seg:0 */
+ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
+ *(ush*)&buf = 0;
+ table[next_ptr++].new_ptr = buf;
+ return buf;
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+ int n;
+ if (*(ush*)&ptr != 0) { /* object < 64K */
+ farfree(ptr);
+ return;
+ }
+ /* Find the original pointer */
+ for (n = 0; n < next_ptr; n++) {
+ if (ptr != table[n].new_ptr) continue;
+
+ farfree(table[n].org_ptr);
+ while (++n < next_ptr) {
+ table[n-1] = table[n];
+ }
+ next_ptr--;
+ return;
+ }
+ ptr = opaque; /* just to make some compilers happy */
+ Assert(0, "zcfree: ptr not found");
+}
+
+#endif /* __TURBOC__ */
+
+
+#ifdef M_I86
+/* Microsoft C in 16-bit mode */
+
+# define MY_ZCALLOC
+
+#if (!defined(_MSC_VER) || (_MSC_VER <= 600))
+# define _halloc halloc
+# define _hfree hfree
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ return _halloc((long)items, size);
+}
+
+void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
+{
+ if (opaque) opaque = 0; /* to make compiler happy */
+ _hfree(ptr);
+}
+
+#endif /* M_I86 */
+
+#endif /* SYS16BIT */
+
+
+#ifndef MY_ZCALLOC /* Any system without a special alloc function */
+
+#ifndef STDC
+extern voidp malloc OF((uInt size));
+extern voidp calloc OF((uInt items, uInt size));
+extern void free OF((voidpf ptr));
+#endif
+
+voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
+ voidpf opaque;
+ unsigned items;
+ unsigned size;
+{
+ if (opaque) items += size - size; /* make compiler happy */
+ return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) :
+ (voidpf)calloc(items, size);
+}
+
+void ZLIB_INTERNAL zcfree (opaque, ptr)
+ voidpf opaque;
+ voidpf ptr;
+{
+ free(ptr);
+ if (opaque) return; /* make compiler happy */
+}
+
+#endif /* MY_ZCALLOC */
+
+#endif /* !Z_SOLO */
diff --git a/src/Common/zlib/zutil.h b/src/Common/zlib/zutil.h
new file mode 100644
index 0000000..24ab06b
--- /dev/null
+++ b/src/Common/zlib/zutil.h
@@ -0,0 +1,253 @@
+/* zutil.h -- internal interface and configuration of the compression library
+ * Copyright (C) 1995-2013 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* WARNING: this file should *not* be used by applications. It is
+ part of the implementation of the compression library and is
+ subject to change. Applications should only use zlib.h.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef ZUTIL_H
+#define ZUTIL_H
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include "zlib.h"
+
+#if defined(STDC) && !defined(Z_SOLO)
+# if !(defined(_WIN32_WCE) && defined(_MSC_VER))
+# include <stddef.h>
+# endif
+# include <string.h>
+# include <stdlib.h>
+#endif
+
+#ifdef Z_SOLO
+ typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+typedef unsigned char uch;
+typedef uch FAR uchf;
+typedef unsigned short ush;
+typedef ush FAR ushf;
+typedef unsigned long ulg;
+
+extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
+/* (size given to avoid silly warnings with Visual C++) */
+
+#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
+
+#define ERR_RETURN(strm,err) \
+ return (strm->msg = ERR_MSG(err), (err))
+/* To be used only when the state is known to be valid */
+
+ /* common constants */
+
+#ifndef DEF_WBITS
+# define DEF_WBITS MAX_WBITS
+#endif
+/* default windowBits for decompression. MAX_WBITS is for compression only */
+
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+/* default memLevel */
+
+#define STORED_BLOCK 0
+#define STATIC_TREES 1
+#define DYN_TREES 2
+/* The three kinds of block type */
+
+#define MIN_MATCH 3
+#define MAX_MATCH 258
+/* The minimum and maximum match lengths */
+
+#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
+
+ /* target dependencies */
+
+#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32))
+# define OS_CODE 0x00
+# ifndef Z_SOLO
+# if defined(__TURBOC__) || defined(__BORLANDC__)
+# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__))
+ /* Allow compilation with ANSI keywords only enabled */
+ void _Cdecl farfree( void *block );
+ void *_Cdecl farmalloc( unsigned long nbytes );
+# else
+# include <alloc.h>
+# endif
+# else /* MSC or DJGPP */
+# include <malloc.h>
+# endif
+# endif
+#endif
+
+#ifdef AMIGA
+# define OS_CODE 0x01
+#endif
+
+#if defined(VAXC) || defined(VMS)
+# define OS_CODE 0x02
+# define F_OPEN(name, mode) \
+ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
+#endif
+
+#if defined(ATARI) || defined(atarist)
+# define OS_CODE 0x05
+#endif
+
+#ifdef OS2
+# define OS_CODE 0x06
+# if defined(M_I86) && !defined(Z_SOLO)
+# include <malloc.h>
+# endif
+#endif
+
+#if defined(MACOS) || defined(TARGET_OS_MAC)
+# define OS_CODE 0x07
+# ifndef Z_SOLO
+# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+# include <unix.h> /* for fdopen */
+# else
+# ifndef fdopen
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# endif
+# endif
+# endif
+#endif
+
+#ifdef TOPS20
+# define OS_CODE 0x0a
+#endif
+
+#ifdef WIN32
+# ifndef __CYGWIN__ /* Cygwin is Unix, not Win32 */
+# define OS_CODE 0x0b
+# endif
+#endif
+
+#ifdef __50SERIES /* Prime/PRIMOS */
+# define OS_CODE 0x0f
+#endif
+
+#if defined(_BEOS_) || defined(RISCOS)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+#endif
+
+#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX
+# if defined(_WIN32_WCE)
+# define fdopen(fd,mode) NULL /* No fdopen() */
+# ifndef _PTRDIFF_T_DEFINED
+ typedef int ptrdiff_t;
+# define _PTRDIFF_T_DEFINED
+# endif
+# else
+# define fdopen(fd,type) _fdopen(fd,type)
+# endif
+#endif
+
+#if defined(__BORLANDC__) && !defined(MSDOS)
+ #pragma warn -8004
+ #pragma warn -8008
+ #pragma warn -8066
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_WIN32) && \
+ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
+ ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t));
+ ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t));
+#endif
+
+ /* common defaults */
+
+#ifndef OS_CODE
+# define OS_CODE 0x03 /* assume Unix */
+#endif
+
+#ifndef F_OPEN
+# define F_OPEN(name, mode) fopen((name), (mode))
+#endif
+
+ /* functions */
+
+#if defined(pyr) || defined(Z_SOLO)
+# define NO_MEMCPY
+#endif
+#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__)
+ /* Use our own functions for small and medium model with MSC <= 5.0.
+ * You may have to use the same strategy for Borland C (untested).
+ * The __SC__ check is for Symantec.
+ */
+# define NO_MEMCPY
+#endif
+#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
+# define HAVE_MEMCPY
+#endif
+#ifdef HAVE_MEMCPY
+# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
+# define zmemcpy _fmemcpy
+# define zmemcmp _fmemcmp
+# define zmemzero(dest, len) _fmemset(dest, 0, len)
+# else
+# define zmemcpy memcpy
+# define zmemcmp memcmp
+# define zmemzero(dest, len) memset(dest, 0, len)
+# endif
+#else
+ void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len));
+ int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len));
+ void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len));
+#endif
+
+/* Diagnostic functions */
+#ifdef DEBUG
+# include <stdio.h>
+ extern int ZLIB_INTERNAL z_verbose;
+ extern void ZLIB_INTERNAL z_error OF((char *m));
+# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
+# define Trace(x) {if (z_verbose>=0) fprintf x ;}
+# define Tracev(x) {if (z_verbose>0) fprintf x ;}
+# define Tracevv(x) {if (z_verbose>1) fprintf x ;}
+# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;}
+# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;}
+#else
+# define Assert(cond,msg)
+# define Trace(x)
+# define Tracev(x)
+# define Tracevv(x)
+# define Tracec(c,x)
+# define Tracecv(c,x)
+#endif
+
+#ifndef Z_SOLO
+ voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items,
+ unsigned size));
+ void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr));
+#endif
+
+#define ZALLOC(strm, items, size) \
+ (*((strm)->zalloc))((strm)->opaque, (items), (size))
+#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
+#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
+
+/* Reverse the bytes in a 32-bit value */
+#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
+ (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#endif /* ZUTIL_H */
diff --git a/src/Core/RandomNumberGenerator.cpp b/src/Core/RandomNumberGenerator.cpp
index 9551f58..ea05fe6 100644
--- a/src/Core/RandomNumberGenerator.cpp
+++ b/src/Core/RandomNumberGenerator.cpp
@@ -173,7 +173,7 @@ namespace VeraCrypt
Running = true;
EnrichedByUser = false;
- Pool.Allocate (PoolSize);
+ Pool.Allocate (PoolSize, 16);
Test();
if (!PoolHash)
diff --git a/src/Core/Unix/MacOSX/CoreMacOSX.cpp b/src/Core/Unix/MacOSX/CoreMacOSX.cpp
index e7572e6..5088c94 100644
--- a/src/Core/Unix/MacOSX/CoreMacOSX.cpp
+++ b/src/Core/Unix/MacOSX/CoreMacOSX.cpp
@@ -117,29 +117,21 @@ namespace VeraCrypt
char fuseVersionString[MAXHOSTNAMELEN + 1] = { 0 };
size_t fuseVersionStringLength = MAXHOSTNAMELEN;
int status;
- bool bIsOSXFuse = false;
- if ((status = sysctlbyname ("macfuse.version.number", fuseVersionString, &fuseVersionStringLength, NULL, 0)) != 0)
+ if ((status = sysctlbyname ("osxfuse.version.number", fuseVersionString, &fuseVersionStringLength, NULL, 0)) != 0)
{
fuseVersionStringLength = MAXHOSTNAMELEN;
- if ((status = sysctlbyname ("osxfuse.version.number", fuseVersionString, &fuseVersionStringLength, NULL, 0)) != 0)
+ if ((status = sysctlbyname ("vfs.generic.osxfuse.version.number", fuseVersionString, &fuseVersionStringLength, NULL, 0)) != 0)
{
- fuseVersionStringLength = MAXHOSTNAMELEN;
- if ((status = sysctlbyname ("vfs.generic.osxfuse.version.number", fuseVersionString, &fuseVersionStringLength, NULL, 0)) != 0)
- {
- throw HigherFuseVersionRequired (SRC_POS);
- }
- }
-
- // look for compatibility mode
- struct stat sb;
- if ((0 == stat("/usr/local/lib/libfuse.dylib", &sb)) && (0 == stat("/Library/Frameworks/MacFUSE.framework/MacFUSE", &sb)))
- {
- bIsOSXFuse = true;
- }
- else
throw HigherFuseVersionRequired (SRC_POS);
+ }
+ }
+ // look for OSXFuse dynamic library
+ struct stat sb;
+ if (0 != stat("/usr/local/lib/libosxfuse_i64.2.dylib", &sb))
+ {
+ throw HigherFuseVersionRequired (SRC_POS);
}
vector <string> fuseVersion = StringConverter::Split (string (fuseVersionString), ".");
@@ -149,12 +141,7 @@ namespace VeraCrypt
uint32 fuseVersionMajor = StringConverter::ToUInt32 (fuseVersion[0]);
uint32 fuseVersionMinor = StringConverter::ToUInt32 (fuseVersion[1]);
- if (bIsOSXFuse)
- {
- if (fuseVersionMajor < 2 || (fuseVersionMajor == 2 && fuseVersionMinor < 5))
- throw HigherFuseVersionRequired (SRC_POS);
- }
- else if (fuseVersionMajor < 1 || (fuseVersionMajor == 1 && fuseVersionMinor < 3))
+ if (fuseVersionMajor < 2 || (fuseVersionMajor == 2 && fuseVersionMinor < 5))
throw HigherFuseVersionRequired (SRC_POS);
// Mount volume image
diff --git a/src/Crypto/Crypto.vcproj b/src/Crypto/Crypto.vcproj
index 15c5c4f..c46c0b5 100644
--- a/src/Crypto/Crypto.vcproj
+++ b/src/Crypto/Crypto.vcproj
@@ -1,587 +1,587 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Crypto"
- ProjectGUID="{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
- RootNamespace="Crypto"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
- PreprocessorDefinitions="WIN32;DEBUG;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="1"
- BufferSecurityCheck="false"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- DisableSpecificWarnings="4100;4127;4201"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)/Crypto.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
- PreprocessorDefinitions="WIN32;DEBUG;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- BasicRuntimeChecks="0"
- RuntimeLibrary="1"
- BufferSecurityCheck="false"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- DisableSpecificWarnings="4100;4127;4201"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)/Crypto.lib"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- Detect64BitPortabilityProblems="false"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4100;4127;4201"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)/Crypto.lib"
- AdditionalLibraryDirectories="$(TargetDir)"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- Detect64BitPortabilityProblems="false"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4100;4127;4201"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="$(OutDir)/Crypto.lib"
- AdditionalLibraryDirectories="$(TargetDir)"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\Aes_hw_cpu.asm"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -g -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Aes_x64.asm"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Aes_x86.asm"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Aeskey.c"
- >
- </File>
- <File
- RelativePath=".\Aestab.c"
- >
- </File>
- <File
- RelativePath=".\Camellia.c"
- >
- </File>
- <File
- RelativePath=".\cpu.c"
- >
- </File>
- <File
- RelativePath=".\Gost89_x64.asm"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCustomBuildTool"
- CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
- Outputs="$(TargetDir)\$(InputName).obj"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\GostCipher.c"
- >
- </File>
- <File
- RelativePath=".\kuznyechik.c"
- >
- </File>
- <File
- RelativePath=".\Rmd160.c"
- >
- </File>
- <File
- RelativePath=".\Serpent.c"
- >
- </File>
- <File
- RelativePath=".\Sha2.c"
- >
- </File>
- <File
- RelativePath=".\Streebog.c"
- >
- </File>
- <File
- RelativePath=".\Twofish.c"
- >
- </File>
- <File
- RelativePath=".\Whirlpool.c"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath=".\Aes.h"
- >
- </File>
- <File
- RelativePath=".\Aes_hw_cpu.h"
- >
- </File>
- <File
- RelativePath=".\Aesopt.h"
- >
- </File>
- <File
- RelativePath=".\Aestab.h"
- >
- </File>
- <File
- RelativePath=".\Camellia.h"
- >
- </File>
- <File
- RelativePath=".\config.h"
- >
- </File>
- <File
- RelativePath=".\cpu.h"
- >
- </File>
- <File
- RelativePath=".\GostCipher.h"
- >
- </File>
- <File
- RelativePath=".\kuznyechik.h"
- >
- </File>
- <File
- RelativePath=".\misc.h"
- >
- </File>
- <File
- RelativePath=".\Rmd160.h"
- >
- </File>
- <File
- RelativePath=".\Serpent.h"
- >
- </File>
- <File
- RelativePath=".\Sha2.h"
- >
- </File>
- <File
- RelativePath=".\Streebog.h"
- >
- </File>
- <File
- RelativePath=".\Twofish.h"
- >
- </File>
- <File
- RelativePath=".\Whirlpool.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Crypto"
+ ProjectGUID="{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
+ RootNamespace="Crypto"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
+ PreprocessorDefinitions="WIN32;DEBUG;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4100;4127;4201"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/Crypto.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
+ PreprocessorDefinitions="WIN32;DEBUG;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4100;4127;4201"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/Crypto.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4100;4127;4201"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/Crypto.lib"
+ AdditionalLibraryDirectories="$(TargetDir)"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories="&quot;$(ProjectDir)\..&quot;;&quot;$(ProjectDir)\..\Common&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4100;4127;4201"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)/Crypto.lib"
+ AdditionalLibraryDirectories="$(TargetDir)"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\Aes_hw_cpu.asm"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -g -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Aes_x64.asm"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Aes_x86.asm"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox -g --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win32 -Ox --prefix _ -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Aeskey.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Aestab.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Camellia.c"
+ >
+ </File>
+ <File
+ RelativePath=".\cpu.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Gost89_x64.asm"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine="echo $(InputFileName) &amp; nasm.exe -Xvc -f win64 -Ox -o &quot;$(TargetDir)\$(InputName).obj&quot; -l &quot;$(TargetDir)\$(InputName).lst&quot; &quot;$(InputPath)&quot;&#x0D;&#x0A;"
+ Outputs="$(TargetDir)\$(InputName).obj"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\GostCipher.c"
+ >
+ </File>
+ <File
+ RelativePath=".\kuznyechik.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Rmd160.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Serpent.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Sha2.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Streebog.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Twofish.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Whirlpool.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\Aes.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Aes_hw_cpu.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Aesopt.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Aestab.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Camellia.h"
+ >
+ </File>
+ <File
+ RelativePath=".\config.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cpu.h"
+ >
+ </File>
+ <File
+ RelativePath=".\GostCipher.h"
+ >
+ </File>
+ <File
+ RelativePath=".\kuznyechik.h"
+ >
+ </File>
+ <File
+ RelativePath=".\misc.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Rmd160.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Serpent.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Sha2.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Streebog.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Twofish.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Whirlpool.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Crypto/Crypto.vcxproj b/src/Crypto/Crypto.vcxproj
index 3db1e78..7573f1e 100644
--- a/src/Crypto/Crypto.vcxproj
+++ b/src/Crypto/Crypto.vcxproj
@@ -221,7 +221,8 @@
<ClCompile Include="GostCipher.c" />
<ClCompile Include="kuznyechik.c" />
<ClCompile Include="Rmd160.c" />
- <ClCompile Include="Serpent.c" />
+ <ClCompile Include="SerpentFast.c" />
+ <ClCompile Include="SerpentFast_simd.cpp" />
<ClCompile Include="Sha2.c" />
<ClCompile Include="Streebog.c" />
<ClCompile Include="Twofish.c" />
@@ -239,7 +240,8 @@
<ClInclude Include="kuznyechik.h" />
<ClInclude Include="misc.h" />
<ClInclude Include="Rmd160.h" />
- <ClInclude Include="Serpent.h" />
+ <ClInclude Include="SerpentFast.h" />
+ <ClInclude Include="SerpentFast_sbox.h" />
<ClInclude Include="Sha2.h" />
<ClInclude Include="Streebog.h" />
<ClInclude Include="Twofish.h" />
diff --git a/src/Crypto/Crypto.vcxproj.filters b/src/Crypto/Crypto.vcxproj.filters
index 91e83c6..ad933b0 100644
--- a/src/Crypto/Crypto.vcxproj.filters
+++ b/src/Crypto/Crypto.vcxproj.filters
@@ -30,9 +30,6 @@
<ClCompile Include="Rmd160.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="Serpent.c">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="Sha2.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -51,6 +48,12 @@
<ClCompile Include="Streebog.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="SerpentFast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="SerpentFast_simd.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Aes.h">
@@ -80,9 +83,6 @@
<ClInclude Include="Rmd160.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="Serpent.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="Sha2.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -101,6 +101,12 @@
<ClInclude Include="Streebog.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="SerpentFast.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="SerpentFast_sbox.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="Aes_hw_cpu.asm">
diff --git a/src/Crypto/GostCipher.c b/src/Crypto/GostCipher.c
index 925fdfa..0fd3941 100644
--- a/src/Crypto/GostCipher.c
+++ b/src/Crypto/GostCipher.c
@@ -5,7 +5,8 @@ Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
This program and the accompanying materials
are licensed and made available under the terms and conditions
-of the Apache License, Version 2.0. The full text of the license may be found at
+of the Apache License, Version 2.0.
+The full text of the license may be found at
https://opensource.org/licenses/Apache-2.0
Dynamic SBOX idea is from GostCrypt project. Copyright (c) 2008-2011 TrueCrypt Developers Association
@@ -68,7 +69,6 @@ void gost_prepare_kds(gost_kds* kds) {
}
-#ifdef GOST_DYNAMIC_SBOXES
static void xor_s_box(byte s_box[8][16], byte *seed)
{
int i;
@@ -84,38 +84,35 @@ static void xor_s_box(byte s_box[8][16], byte *seed)
s_box[7][i] ^= (seed[ (i * 4) + 3 ]>>4) & 0xF;
}
}
-#endif
-void gost_set_key(const byte *key, gost_kds *ks)
+void gost_set_key(const byte *key, gost_kds *ks, int useDynamicSbox)
{
-#ifdef GOST_DYNAMIC_SBOXES
- STREEBOG_CTX sctx;
- byte sbox_seed[64];
-#if defined (DEVICE_DRIVER) && !defined (_WIN64)
- KFLOATING_SAVE floatingPointState;
- NTSTATUS saveStatus = STATUS_SUCCESS;
- if (HasSSE2() || HasSSE41())
- saveStatus = KeSaveFloatingPointState (&floatingPointState);
-#endif
-#endif
-
memcpy(ks->key, key, GOST_KEYSIZE);
memcpy(ks->sbox, S_TC26, sizeof(ks->sbox));
-#ifdef GOST_DYNAMIC_SBOXES
- //Generate pseudorandom data based on the key
- STREEBOG_init(&sctx);
- STREEBOG_add(&sctx, key, 32);
- STREEBOG_finalize(&sctx, sbox_seed);
-
+ if (useDynamicSbox)
+ {
+ STREEBOG_CTX sctx;
+ byte sbox_seed[64];
#if defined (DEVICE_DRIVER) && !defined (_WIN64)
- if (NT_SUCCESS (saveStatus) && (HasSSE2() || HasSSE41()))
- KeRestoreFloatingPointState (&floatingPointState);
+ KFLOATING_SAVE floatingPointState;
+ NTSTATUS saveStatus = STATUS_SUCCESS;
+ if (HasSSE2() || HasSSE41())
+ saveStatus = KeSaveFloatingPointState (&floatingPointState);
#endif
+ //Generate pseudorandom data based on the key
+ STREEBOG_init(&sctx);
+ STREEBOG_add(&sctx, ks->key, 32);
+ STREEBOG_finalize(&sctx, sbox_seed);
- xor_s_box(ks->sbox, sbox_seed);
+#if defined (DEVICE_DRIVER) && !defined (_WIN64)
+ if (NT_SUCCESS (saveStatus) && (HasSSE2() || HasSSE41()))
+ KeRestoreFloatingPointState (&floatingPointState);
#endif
+ xor_s_box(ks->sbox, sbox_seed);
+ }
+
gost_prepare_kds(ks);
}
diff --git a/src/Crypto/GostCipher.h b/src/Crypto/GostCipher.h
index 4096207..6031c43 100644
--- a/src/Crypto/GostCipher.h
+++ b/src/Crypto/GostCipher.h
@@ -13,6 +13,7 @@
#define GOST_CIPHER_H
#include "Common/Tcdefs.h"
+#include "config.h"
#ifdef __cplusplus
extern "C" {
@@ -47,7 +48,7 @@ typedef unsigned int gst_udword;
typedef struct gost_kds
{
- byte key[32];
+ CRYPTOPP_ALIGN_DATA(16) byte key[32];
gst_udword sbox_cvt[256 * 4];
byte sbox[8][16];
} gost_kds;
@@ -56,7 +57,7 @@ typedef struct gost_kds
void gost_encrypt(const byte *in, byte *out, gost_kds *ks, int count);
void gost_decrypt(const byte *in, byte *out, gost_kds *ks, int count);
-void gost_set_key(const byte *key, gost_kds *ks);
+void gost_set_key(const byte *key, gost_kds *ks, int useDynamicSbox);
#else
#define GOST_KS (0)
diff --git a/src/Crypto/SerpentFast.c b/src/Crypto/SerpentFast.c
new file mode 100644
index 0000000..02777a8
--- /dev/null
+++ b/src/Crypto/SerpentFast.c
@@ -0,0 +1,318 @@
+/*
+* Serpent
+* (C) 1999-2007 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include "SerpentFast.h"
+#include "SerpentFast_sbox.h"
+#include "Common/Endian.h"
+#if !defined(_UEFI)
+#include <memory.h>
+#include <stdlib.h>
+#endif
+#include "cpu.h"
+#include "misc.h"
+
+#if BYTE_ORDER == BIG_ENDIAN
+
+#define BOTAN_ENDIAN_N2B(x) (x)
+#define BOTAN_ENDIAN_B2N(x) (x)
+
+#define BOTAN_ENDIAN_N2L(x) bswap_32(x)
+#define BOTAN_ENDIAN_L2N(x) bswap_32(x)
+
+#elif BYTE_ORDER == LITTLE_ENDIAN
+
+#define BOTAN_ENDIAN_N2L(x) (x)
+#define BOTAN_ENDIAN_L2N(x) (x)
+
+#define BOTAN_ENDIAN_N2B(x) bswap_32(x)
+#define BOTAN_ENDIAN_B2N(x) bswap_32(x)
+
+#endif
+
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+extern void serpent_simd_encrypt_blocks_4(const unsigned __int8 in[], unsigned __int8 out[], unsigned __int32* round_key);
+extern void serpent_simd_decrypt_blocks_4(const unsigned __int8 in[], unsigned __int8 out[], unsigned __int32* round_key);
+#endif
+
+/*
+* Serpent's Linear Transform
+*/
+#define transform(B0,B1,B2,B3) \
+ do { \
+ B0 = rotl32(B0, 13); B2 = rotl32(B2, 3); \
+ B1 ^= B0 ^ B2; B3 ^= B2 ^ (B0 << 3); \
+ B1 = rotl32(B1, 1); B3 = rotl32(B3, 7); \
+ B0 ^= B1 ^ B3; B2 ^= B3 ^ (B1 << 7); \
+ B0 = rotl32(B0, 5); B2 = rotl32(B2, 22); \
+ } while (0);
+
+/*
+* Serpent's Inverse Linear Transform
+*/
+#define i_transform(B0,B1,B2,B3) \
+ do { \
+ B2 = rotr32(B2, 22); B0 = rotr32(B0, 5); \
+ B2 ^= B3 ^ (B1 << 7); B0 ^= B1 ^ B3; \
+ B3 = rotr32(B3, 7); B1 = rotr32(B1, 1); \
+ B3 ^= B2 ^ (B0 << 3); B1 ^= B0 ^ B2; \
+ B2 = rotr32(B2, 3); B0 = rotr32(B0, 13); \
+ } while (0);
+
+
+/*
+* XOR a key block with a data block
+*/
+#define key_xor(round, B0, B1, B2, B3) \
+ B0 ^= round_key[4*round ]; \
+ B1 ^= round_key[4*round+1]; \
+ B2 ^= round_key[4*round+2]; \
+ B3 ^= round_key[4*round+3];
+
+/*
+* Serpent Encryption
+*/
+void serpent_encrypt_blocks(const unsigned __int8* in, unsigned __int8* out, size_t blocks, unsigned __int8 *ks)
+{
+ unsigned __int32 B0, B1, B2, B3;
+ unsigned __int32* round_key = ((unsigned __int32*) ks) + 8;
+ size_t i;
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+ if(HasSSE2() && (blocks >= 4))
+ {
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 alignedInputBuffer[4 * 16];
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 alignedOutputBuffer[4 * 16];
+ unsigned __int8 *inPtr, *outPtr;
+ BOOL inputAligned = IsAligned16(in)? TRUE : FALSE;
+ BOOL outputAligned = IsAligned16(out)? TRUE : FALSE;
+
+ while(blocks >= 4)
+ {
+ if (inputAligned)
+ inPtr = (unsigned __int8 *) in;
+ else
+ {
+ inPtr = alignedInputBuffer;
+ memcpy (inPtr, in, 4 * 16);
+ }
+ if (out == in)
+ outPtr = inPtr;
+ else if (outputAligned)
+ outPtr = (unsigned __int8 *) out;
+ else
+ {
+ outPtr = alignedOutputBuffer;
+ memcpy (outPtr, out, 4 * 16);
+ }
+ serpent_simd_encrypt_blocks_4(inPtr, outPtr, round_key);
+ in += 4 * 16;
+ out += 4 * 16;
+ blocks -= 4;
+ }
+ }
+#endif
+
+ for(i = 0; i != blocks; ++i)
+ {
+ memcpy (&B0, in + 0, 4);
+ memcpy (&B1, in + 4, 4);
+ memcpy (&B2, in + 8, 4);
+ memcpy (&B3, in + 12, 4);
+ B0 = BOTAN_ENDIAN_N2L (B0);
+ B1 = BOTAN_ENDIAN_N2L (B1);
+ B2 = BOTAN_ENDIAN_N2L (B2);
+ B3 = BOTAN_ENDIAN_N2L (B3);
+
+ key_xor( 0,B0,B1,B2,B3); SBoxE1(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 1,B0,B1,B2,B3); SBoxE2(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 2,B0,B1,B2,B3); SBoxE3(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 3,B0,B1,B2,B3); SBoxE4(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 4,B0,B1,B2,B3); SBoxE5(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 5,B0,B1,B2,B3); SBoxE6(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 6,B0,B1,B2,B3); SBoxE7(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 7,B0,B1,B2,B3); SBoxE8(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 8,B0,B1,B2,B3); SBoxE1(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 9,B0,B1,B2,B3); SBoxE2(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(10,B0,B1,B2,B3); SBoxE3(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(11,B0,B1,B2,B3); SBoxE4(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(12,B0,B1,B2,B3); SBoxE5(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(13,B0,B1,B2,B3); SBoxE6(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(14,B0,B1,B2,B3); SBoxE7(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(15,B0,B1,B2,B3); SBoxE8(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(16,B0,B1,B2,B3); SBoxE1(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(17,B0,B1,B2,B3); SBoxE2(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(18,B0,B1,B2,B3); SBoxE3(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(19,B0,B1,B2,B3); SBoxE4(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(20,B0,B1,B2,B3); SBoxE5(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(21,B0,B1,B2,B3); SBoxE6(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(22,B0,B1,B2,B3); SBoxE7(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(23,B0,B1,B2,B3); SBoxE8(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(24,B0,B1,B2,B3); SBoxE1(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(25,B0,B1,B2,B3); SBoxE2(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(26,B0,B1,B2,B3); SBoxE3(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(27,B0,B1,B2,B3); SBoxE4(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(28,B0,B1,B2,B3); SBoxE5(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(29,B0,B1,B2,B3); SBoxE6(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(30,B0,B1,B2,B3); SBoxE7(unsigned __int32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(31,B0,B1,B2,B3); SBoxE8(unsigned __int32,B0,B1,B2,B3); key_xor(32,B0,B1,B2,B3);
+
+ B0 = BOTAN_ENDIAN_L2N(B0);
+ B1 = BOTAN_ENDIAN_L2N(B1);
+ B2 = BOTAN_ENDIAN_L2N(B2);
+ B3 = BOTAN_ENDIAN_L2N(B3);
+ memcpy(out + 0, &B0, 4);
+ memcpy(out + 4, &B1, 4);
+ memcpy(out + 8, &B2, 4);
+ memcpy(out + 12, &B3, 4);
+
+ in += 16;
+ out += 16;
+ }
+}
+
+/*
+* Serpent Decryption
+*/
+void serpent_decrypt_blocks(const unsigned __int8* in, unsigned __int8* out, size_t blocks, unsigned __int8 *ks)
+{
+ unsigned __int32 B0, B1, B2, B3;
+ unsigned __int32* round_key = ((unsigned __int32*) ks) + 8;
+ size_t i;
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+ if(HasSSE2() && (blocks >= 4))
+ {
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 alignedInputBuffer[4 * 16];
+ CRYPTOPP_ALIGN_DATA(16) unsigned __int8 alignedOutputBuffer[4 * 16];
+ unsigned __int8 *inPtr, *outPtr;
+ BOOL inputAligned = IsAligned16(in)? TRUE : FALSE;
+ BOOL outputAligned = IsAligned16(out)? TRUE : FALSE;
+
+ while(blocks >= 4)
+ {
+ if (inputAligned)
+ inPtr = (unsigned __int8 *) in;
+ else
+ {
+ inPtr = alignedInputBuffer;
+ memcpy (inPtr, in, 4 * 16);
+ }
+ if (out == in)
+ outPtr = inPtr;
+ else if (outputAligned)
+ outPtr = (unsigned __int8 *) out;
+ else
+ {
+ outPtr = alignedOutputBuffer;
+ memcpy (outPtr, out, 4 * 16);
+ }
+ serpent_simd_decrypt_blocks_4(inPtr, outPtr, round_key);
+ in += 4 * 16;
+ out += 4 * 16;
+ blocks -= 4;
+ }
+ }
+#endif
+
+ for(i = 0; i != blocks; ++i)
+ {
+ memcpy (&B0, in + 0, 4);
+ memcpy (&B1, in + 4, 4);
+ memcpy (&B2, in + 8, 4);
+ memcpy (&B3, in + 12, 4);
+ B0 = BOTAN_ENDIAN_N2L (B0);
+ B1 = BOTAN_ENDIAN_N2L (B1);
+ B2 = BOTAN_ENDIAN_N2L (B2);
+ B3 = BOTAN_ENDIAN_N2L (B3);
+
+ key_xor(32,B0,B1,B2,B3); SBoxD8(unsigned __int32,B0,B1,B2,B3); key_xor(31,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(unsigned __int32,B0,B1,B2,B3); key_xor(30,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(unsigned __int32,B0,B1,B2,B3); key_xor(29,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(unsigned __int32,B0,B1,B2,B3); key_xor(28,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(unsigned __int32,B0,B1,B2,B3); key_xor(27,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(unsigned __int32,B0,B1,B2,B3); key_xor(26,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(unsigned __int32,B0,B1,B2,B3); key_xor(25,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(unsigned __int32,B0,B1,B2,B3); key_xor(24,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD8(unsigned __int32,B0,B1,B2,B3); key_xor(23,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(unsigned __int32,B0,B1,B2,B3); key_xor(22,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(unsigned __int32,B0,B1,B2,B3); key_xor(21,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(unsigned __int32,B0,B1,B2,B3); key_xor(20,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(unsigned __int32,B0,B1,B2,B3); key_xor(19,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(unsigned __int32,B0,B1,B2,B3); key_xor(18,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(unsigned __int32,B0,B1,B2,B3); key_xor(17,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(unsigned __int32,B0,B1,B2,B3); key_xor(16,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD8(unsigned __int32,B0,B1,B2,B3); key_xor(15,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(unsigned __int32,B0,B1,B2,B3); key_xor(14,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(unsigned __int32,B0,B1,B2,B3); key_xor(13,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(unsigned __int32,B0,B1,B2,B3); key_xor(12,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(unsigned __int32,B0,B1,B2,B3); key_xor(11,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(unsigned __int32,B0,B1,B2,B3); key_xor(10,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(unsigned __int32,B0,B1,B2,B3); key_xor( 9,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(unsigned __int32,B0,B1,B2,B3); key_xor( 8,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD8(unsigned __int32,B0,B1,B2,B3); key_xor( 7,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(unsigned __int32,B0,B1,B2,B3); key_xor( 6,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(unsigned __int32,B0,B1,B2,B3); key_xor( 5,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(unsigned __int32,B0,B1,B2,B3); key_xor( 4,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(unsigned __int32,B0,B1,B2,B3); key_xor( 3,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(unsigned __int32,B0,B1,B2,B3); key_xor( 2,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(unsigned __int32,B0,B1,B2,B3); key_xor( 1,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(unsigned __int32,B0,B1,B2,B3); key_xor( 0,B0,B1,B2,B3);
+
+ B0 = BOTAN_ENDIAN_L2N(B0);
+ B1 = BOTAN_ENDIAN_L2N(B1);
+ B2 = BOTAN_ENDIAN_L2N(B2);
+ B3 = BOTAN_ENDIAN_L2N(B3);
+ memcpy(out + 0, &B0, 4);
+ memcpy(out + 4, &B1, 4);
+ memcpy(out + 8, &B2, 4);
+ memcpy(out + 12, &B3, 4);
+
+ in += 16;
+ out += 16;
+ }
+}
+
+#undef key_xor
+#undef transform
+#undef i_transform
+
+/*
+* Serpent Key Schedule
+*/
+void serpent_set_key(const unsigned __int8 userKey[], unsigned __int8 *ks)
+{
+ const unsigned __int32 PHI = 0x9E3779B9;
+ unsigned __int32* W = (unsigned __int32*) ks;
+ int i;
+ for(i = 0; i != 8; ++i)
+ {
+ memcpy (W + i, userKey + (i*4), 4);
+ W[i] = BOTAN_ENDIAN_N2L(W[i]);
+ }
+
+ for(i = 8; i != 140; ++i)
+ {
+ unsigned __int32 wi = W[i-8] ^ W[i-5] ^ W[i-3] ^ W[i-1] ^ PHI ^ (unsigned __int32)(i-8);
+ W[i] = rotl32(wi, 11);
+ }
+
+ SBoxE4(unsigned __int32,W[ 8],W[ 9],W[ 10],W[ 11]); SBoxE3(unsigned __int32,W[ 12],W[ 13],W[ 14],W[ 15]);
+ SBoxE2(unsigned __int32,W[ 16],W[ 17],W[ 18],W[ 19]); SBoxE1(unsigned __int32,W[ 20],W[ 21],W[ 22],W[ 23]);
+ SBoxE8(unsigned __int32,W[ 24],W[ 25],W[ 26],W[ 27]); SBoxE7(unsigned __int32,W[ 28],W[ 29],W[ 30],W[ 31]);
+ SBoxE6(unsigned __int32,W[ 32],W[ 33],W[ 34],W[ 35]); SBoxE5(unsigned __int32,W[ 36],W[ 37],W[ 38],W[ 39]);
+ SBoxE4(unsigned __int32,W[ 40],W[ 41],W[ 42],W[ 43]); SBoxE3(unsigned __int32,W[ 44],W[ 45],W[ 46],W[ 47]);
+ SBoxE2(unsigned __int32,W[ 48],W[ 49],W[ 50],W[ 51]); SBoxE1(unsigned __int32,W[ 52],W[ 53],W[ 54],W[ 55]);
+ SBoxE8(unsigned __int32,W[ 56],W[ 57],W[ 58],W[ 59]); SBoxE7(unsigned __int32,W[ 60],W[ 61],W[ 62],W[ 63]);
+ SBoxE6(unsigned __int32,W[ 64],W[ 65],W[ 66],W[ 67]); SBoxE5(unsigned __int32,W[ 68],W[ 69],W[ 70],W[ 71]);
+ SBoxE4(unsigned __int32,W[ 72],W[ 73],W[ 74],W[ 75]); SBoxE3(unsigned __int32,W[ 76],W[ 77],W[ 78],W[ 79]);
+ SBoxE2(unsigned __int32,W[ 80],W[ 81],W[ 82],W[ 83]); SBoxE1(unsigned __int32,W[ 84],W[ 85],W[ 86],W[ 87]);
+ SBoxE8(unsigned __int32,W[ 88],W[ 89],W[ 90],W[ 91]); SBoxE7(unsigned __int32,W[ 92],W[ 93],W[ 94],W[ 95]);
+ SBoxE6(unsigned __int32,W[ 96],W[ 97],W[ 98],W[ 99]); SBoxE5(unsigned __int32,W[100],W[101],W[102],W[103]);
+ SBoxE4(unsigned __int32,W[104],W[105],W[106],W[107]); SBoxE3(unsigned __int32,W[108],W[109],W[110],W[111]);
+ SBoxE2(unsigned __int32,W[112],W[113],W[114],W[115]); SBoxE1(unsigned __int32,W[116],W[117],W[118],W[119]);
+ SBoxE8(unsigned __int32,W[120],W[121],W[122],W[123]); SBoxE7(unsigned __int32,W[124],W[125],W[126],W[127]);
+ SBoxE6(unsigned __int32,W[128],W[129],W[130],W[131]); SBoxE5(unsigned __int32,W[132],W[133],W[134],W[135]);
+ SBoxE4(unsigned __int32,W[136],W[137],W[138],W[139]);
+}
diff --git a/src/Crypto/SerpentFast.h b/src/Crypto/SerpentFast.h
new file mode 100644
index 0000000..a5937b6
--- /dev/null
+++ b/src/Crypto/SerpentFast.h
@@ -0,0 +1,28 @@
+/*
+* Serpent
+* (C) 1999-2007 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include "Common/Tcdefs.h"
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* userKey is always 32-bytes long */
+void serpent_set_key(const unsigned __int8 userKey[], unsigned __int8 *ks);
+void serpent_encrypt_blocks(const unsigned __int8* in, unsigned __int8* out, size_t blocks, unsigned __int8 *ks);
+void serpent_decrypt_blocks(const unsigned __int8* in, unsigned __int8* out, size_t blocks, unsigned __int8 *ks);
+
+#define serpent_encrypt(inBlock,outBlock,ks) serpent_encrypt_blocks(inBlock,outBlock,1,ks)
+#define serpent_decrypt(inBlock,outBlock,ks) serpent_decrypt_blocks(inBlock,outBlock,1,ks)
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/src/Crypto/SerpentFast_sbox.h b/src/Crypto/SerpentFast_sbox.h
new file mode 100644
index 0000000..b5c4b21
--- /dev/null
+++ b/src/Crypto/SerpentFast_sbox.h
@@ -0,0 +1,437 @@
+/*
+* Serpent SBox Expressions
+* (C) 1999-2007,2013 Jack Lloyd
+*
+* The sbox expressions used here were discovered by Dag Arne Osvik and
+* are described in his paper "Speeding Up Serpent".
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#ifndef BOTAN_SERPENT_SBOX_H__
+#define BOTAN_SERPENT_SBOX_H__
+
+#define SBoxE1(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B3 ^= B0; \
+ B4 = B1; \
+ B1 &= B3; \
+ B4 ^= B2; \
+ B1 ^= B0; \
+ B0 |= B3; \
+ B0 ^= B4; \
+ B4 ^= B3; \
+ B3 ^= B2; \
+ B2 |= B1; \
+ B2 ^= B4; \
+ B4 = ~B4; \
+ B4 |= B1; \
+ B1 ^= B3; \
+ B1 ^= B4; \
+ B3 |= B0; \
+ B1 ^= B3; \
+ B4 ^= B3; \
+ B3 = B0; \
+ B0 = B1; \
+ B1 = B4; \
+ } while(0);
+
+#define SBoxE2(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B0 = ~B0; \
+ B2 = ~B2; \
+ B4 = B0; \
+ B0 &= B1; \
+ B2 ^= B0; \
+ B0 |= B3; \
+ B3 ^= B2; \
+ B1 ^= B0; \
+ B0 ^= B4; \
+ B4 |= B1; \
+ B1 ^= B3; \
+ B2 |= B0; \
+ B2 &= B4; \
+ B0 ^= B1; \
+ B1 &= B2; \
+ B1 ^= B0; \
+ B0 &= B2; \
+ B4 ^= B0; \
+ B0 = B2; \
+ B2 = B3; \
+ B3 = B1; \
+ B1 = B4; \
+ } while(0);
+
+#define SBoxE3(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B0; \
+ B0 &= B2; \
+ B0 ^= B3; \
+ B2 ^= B1; \
+ B2 ^= B0; \
+ B3 |= B4; \
+ B3 ^= B1; \
+ B4 ^= B2; \
+ B1 = B3; \
+ B3 |= B4; \
+ B3 ^= B0; \
+ B0 &= B1; \
+ B4 ^= B0; \
+ B1 ^= B3; \
+ B1 ^= B4; \
+ B0 = B2; \
+ B2 = B1; \
+ B1 = B3; \
+ B3 = ~B4; \
+ } while(0);
+
+#define SBoxE4(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B0; \
+ B0 |= B3; \
+ B3 ^= B1; \
+ B1 &= B4; \
+ B4 ^= B2; \
+ B2 ^= B3; \
+ B3 &= B0; \
+ B4 |= B1; \
+ B3 ^= B4; \
+ B0 ^= B1; \
+ B4 &= B0; \
+ B1 ^= B3; \
+ B4 ^= B2; \
+ B1 |= B0; \
+ B1 ^= B2; \
+ B0 ^= B3; \
+ B2 = B1; \
+ B1 |= B3; \
+ B0 ^= B1; \
+ B1 = B2; \
+ B2 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#define SBoxE5(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B1 ^= B3; \
+ B3 = ~B3; \
+ B2 ^= B3; \
+ B3 ^= B0; \
+ B4 = B1; \
+ B1 &= B3; \
+ B1 ^= B2; \
+ B4 ^= B3; \
+ B0 ^= B4; \
+ B2 &= B4; \
+ B2 ^= B0; \
+ B0 &= B1; \
+ B3 ^= B0; \
+ B4 |= B1; \
+ B4 ^= B0; \
+ B0 |= B3; \
+ B0 ^= B2; \
+ B2 &= B3; \
+ B0 = ~B0; \
+ B4 ^= B2; \
+ B2 = B0; \
+ B0 = B1; \
+ B1 = B4; \
+ } while(0);
+
+#define SBoxE6(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B0 ^= B1; \
+ B1 ^= B3; \
+ B3 = ~B3; \
+ B4 = B1; \
+ B1 &= B0; \
+ B2 ^= B3; \
+ B1 ^= B2; \
+ B2 |= B4; \
+ B4 ^= B3; \
+ B3 &= B1; \
+ B3 ^= B0; \
+ B4 ^= B1; \
+ B4 ^= B2; \
+ B2 ^= B0; \
+ B0 &= B3; \
+ B2 = ~B2; \
+ B0 ^= B4; \
+ B4 |= B3; \
+ B4 ^= B2; \
+ B2 = B0; \
+ B0 = B1; \
+ B1 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#define SBoxE7(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B2 = ~B2; \
+ B4 = B3; \
+ B3 &= B0; \
+ B0 ^= B4; \
+ B3 ^= B2; \
+ B2 |= B4; \
+ B1 ^= B3; \
+ B2 ^= B0; \
+ B0 |= B1; \
+ B2 ^= B1; \
+ B4 ^= B0; \
+ B0 |= B3; \
+ B0 ^= B2; \
+ B4 ^= B3; \
+ B4 ^= B0; \
+ B3 = ~B3; \
+ B2 &= B4; \
+ B3 ^= B2; \
+ B2 = B4; \
+ } while(0);
+
+#define SBoxE8(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B1; \
+ B1 |= B2; \
+ B1 ^= B3; \
+ B4 ^= B2; \
+ B2 ^= B1; \
+ B3 |= B4; \
+ B3 &= B0; \
+ B4 ^= B2; \
+ B3 ^= B1; \
+ B1 |= B4; \
+ B1 ^= B0; \
+ B0 |= B4; \
+ B0 ^= B2; \
+ B1 ^= B4; \
+ B2 ^= B1; \
+ B1 &= B0; \
+ B1 ^= B4; \
+ B2 = ~B2; \
+ B2 |= B0; \
+ B4 ^= B2; \
+ B2 = B1; \
+ B1 = B3; \
+ B3 = B0; \
+ B0 = B4; \
+ } while(0);
+
+#define SBoxD1(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B2 = ~B2; \
+ B4 = B1; \
+ B1 |= B0; \
+ B4 = ~B4; \
+ B1 ^= B2; \
+ B2 |= B4; \
+ B1 ^= B3; \
+ B0 ^= B4; \
+ B2 ^= B0; \
+ B0 &= B3; \
+ B4 ^= B0; \
+ B0 |= B1; \
+ B0 ^= B2; \
+ B3 ^= B4; \
+ B2 ^= B1; \
+ B3 ^= B0; \
+ B3 ^= B1; \
+ B2 &= B3; \
+ B4 ^= B2; \
+ B2 = B1; \
+ B1 = B4; \
+ } while(0);
+
+#define SBoxD2(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B1; \
+ B1 ^= B3; \
+ B3 &= B1; \
+ B4 ^= B2; \
+ B3 ^= B0; \
+ B0 |= B1; \
+ B2 ^= B3; \
+ B0 ^= B4; \
+ B0 |= B2; \
+ B1 ^= B3; \
+ B0 ^= B1; \
+ B1 |= B3; \
+ B1 ^= B0; \
+ B4 = ~B4; \
+ B4 ^= B1; \
+ B1 |= B0; \
+ B1 ^= B0; \
+ B1 |= B4; \
+ B3 ^= B1; \
+ B1 = B0; \
+ B0 = B4; \
+ B4 = B2; \
+ B2 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#define SBoxD3(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B2 ^= B3; \
+ B3 ^= B0; \
+ B4 = B3; \
+ B3 &= B2; \
+ B3 ^= B1; \
+ B1 |= B2; \
+ B1 ^= B4; \
+ B4 &= B3; \
+ B2 ^= B3; \
+ B4 &= B0; \
+ B4 ^= B2; \
+ B2 &= B1; \
+ B2 |= B0; \
+ B3 = ~B3; \
+ B2 ^= B3; \
+ B0 ^= B3; \
+ B0 &= B1; \
+ B3 ^= B4; \
+ B3 ^= B0; \
+ B0 = B1; \
+ B1 = B4; \
+ } while(0);
+
+#define SBoxD4(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B2; \
+ B2 ^= B1; \
+ B0 ^= B2; \
+ B4 &= B2; \
+ B4 ^= B0; \
+ B0 &= B1; \
+ B1 ^= B3; \
+ B3 |= B4; \
+ B2 ^= B3; \
+ B0 ^= B3; \
+ B1 ^= B4; \
+ B3 &= B2; \
+ B3 ^= B1; \
+ B1 ^= B0; \
+ B1 |= B2; \
+ B0 ^= B3; \
+ B1 ^= B4; \
+ B0 ^= B1; \
+ B4 = B0; \
+ B0 = B2; \
+ B2 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#define SBoxD5(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B2; \
+ B2 &= B3; \
+ B2 ^= B1; \
+ B1 |= B3; \
+ B1 &= B0; \
+ B4 ^= B2; \
+ B4 ^= B1; \
+ B1 &= B2; \
+ B0 = ~B0; \
+ B3 ^= B4; \
+ B1 ^= B3; \
+ B3 &= B0; \
+ B3 ^= B2; \
+ B0 ^= B1; \
+ B2 &= B0; \
+ B3 ^= B0; \
+ B2 ^= B4; \
+ B2 |= B3; \
+ B3 ^= B0; \
+ B2 ^= B1; \
+ B1 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#define SBoxD6(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B1 = ~B1; \
+ B4 = B3; \
+ B2 ^= B1; \
+ B3 |= B0; \
+ B3 ^= B2; \
+ B2 |= B1; \
+ B2 &= B0; \
+ B4 ^= B3; \
+ B2 ^= B4; \
+ B4 |= B0; \
+ B4 ^= B1; \
+ B1 &= B2; \
+ B1 ^= B3; \
+ B4 ^= B2; \
+ B3 &= B4; \
+ B4 ^= B1; \
+ B3 ^= B4; \
+ B4 = ~B4; \
+ B3 ^= B0; \
+ B0 = B1; \
+ B1 = B4; \
+ B4 = B3; \
+ B3 = B2; \
+ B2 = B4; \
+ } while(0);
+
+#define SBoxD7(T, B0, B1, B2, B3) \
+ do { \
+ T B4; \
+ B0 ^= B2; \
+ B4 = B2; \
+ B2 &= B0; \
+ B4 ^= B3; \
+ B2 = ~B2; \
+ B3 ^= B1; \
+ B2 ^= B3; \
+ B4 |= B0; \
+ B0 ^= B2; \
+ B3 ^= B4; \
+ B4 ^= B1; \
+ B1 &= B3; \
+ B1 ^= B0; \
+ B0 ^= B3; \
+ B0 |= B2; \
+ B3 ^= B1; \
+ B4 ^= B0; \
+ B0 = B1; \
+ B1 = B2; \
+ B2 = B4; \
+ } while(0);
+
+#define SBoxD8(T, B0, B1, B2, B3) \
+ do { \
+ T B4 = B2; \
+ B2 ^= B0; \
+ B0 &= B3; \
+ B4 |= B3; \
+ B2 = ~B2; \
+ B3 ^= B1; \
+ B1 |= B0; \
+ B0 ^= B2; \
+ B2 &= B4; \
+ B3 &= B4; \
+ B1 ^= B2; \
+ B2 ^= B0; \
+ B0 |= B2; \
+ B4 ^= B1; \
+ B0 ^= B3; \
+ B3 ^= B4; \
+ B4 |= B0; \
+ B3 ^= B2; \
+ B4 ^= B2; \
+ B2 = B1; \
+ B1 = B0; \
+ B0 = B3; \
+ B3 = B4; \
+ } while(0);
+
+#endif
diff --git a/src/Crypto/SerpentFast_simd.cpp b/src/Crypto/SerpentFast_simd.cpp
new file mode 100644
index 0000000..d5d5d65
--- /dev/null
+++ b/src/Crypto/SerpentFast_simd.cpp
@@ -0,0 +1,338 @@
+/*
+* Serpent (SIMD)
+* (C) 2009,2013 Jack Lloyd
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include "SerpentFast.h"
+#include "SerpentFast_sbox.h"
+#if !defined(_UEFI)
+#include <memory.h>
+#include <stdlib.h>
+#endif
+#include "cpu.h"
+#include "misc.h"
+
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+
+/**
+* This class is not a general purpose SIMD type, and only offers
+* instructions needed for evaluation of specific crypto primitives.
+* For example it does not currently have equality operators of any
+* kind.
+*/
+class SIMD_4x32
+{
+public:
+
+ SIMD_4x32() // zero initialized
+ {
+ ::memset(&m_reg, 0, sizeof(m_reg));
+ }
+
+ explicit SIMD_4x32(const unsigned __int32 B[4])
+ {
+ m_reg = _mm_loadu_si128(reinterpret_cast<const __m128i*>(B));
+ }
+
+ SIMD_4x32(unsigned __int32 B0, unsigned __int32 B1, unsigned __int32 B2, unsigned __int32 B3)
+ {
+ m_reg = _mm_set_epi32(B0, B1, B2, B3);
+ }
+
+ explicit SIMD_4x32(unsigned __int32 B)
+ {
+ m_reg = _mm_set1_epi32(B);
+ }
+
+ static SIMD_4x32 load_le(const void* in)
+ {
+ return SIMD_4x32(_mm_loadu_si128(reinterpret_cast<const __m128i*>(in)));
+ }
+
+ static SIMD_4x32 load_be(const void* in)
+ {
+ return load_le(in).bswap();
+ }
+
+ void store_le(unsigned __int8 out[]) const
+ {
+ _mm_storeu_si128(reinterpret_cast<__m128i*>(out), m_reg);
+ }
+
+ void store_be(unsigned __int8 out[]) const
+ {
+ bswap().store_le(out);
+ }
+
+ void rotate_left(size_t rot)
+ {
+ m_reg = _mm_or_si128(_mm_slli_epi32(m_reg, static_cast<int>(rot)),
+ _mm_srli_epi32(m_reg, static_cast<int>(32-rot)));
+
+ }
+
+ void rotate_right(size_t rot)
+ {
+ rotate_left(32 - rot);
+ }
+
+ void operator+=(const SIMD_4x32& other)
+ {
+ m_reg = _mm_add_epi32(m_reg, other.m_reg);
+ }
+
+ SIMD_4x32 operator+(const SIMD_4x32& other) const
+ {
+ return SIMD_4x32(_mm_add_epi32(m_reg, other.m_reg));
+ }
+
+ void operator-=(const SIMD_4x32& other)
+ {
+ m_reg = _mm_sub_epi32(m_reg, other.m_reg);
+ }
+
+ SIMD_4x32 operator-(const SIMD_4x32& other) const
+ {
+ return SIMD_4x32(_mm_sub_epi32(m_reg, other.m_reg));
+ }
+
+ void operator^=(const SIMD_4x32& other)
+ {
+ m_reg = _mm_xor_si128(m_reg, other.m_reg);
+ }
+
+ SIMD_4x32 operator^(const SIMD_4x32& other) const
+ {
+ return SIMD_4x32(_mm_xor_si128(m_reg, other.m_reg));
+ }
+
+ void operator|=(const SIMD_4x32& other)
+ {
+ m_reg = _mm_or_si128(m_reg, other.m_reg);
+ }
+
+ SIMD_4x32 operator&(const SIMD_4x32& other)
+ {
+ return SIMD_4x32(_mm_and_si128(m_reg, other.m_reg));
+ }
+
+ void operator&=(const SIMD_4x32& other)
+ {
+ m_reg = _mm_and_si128(m_reg, other.m_reg);
+ }
+
+ SIMD_4x32 operator<<(size_t shift) const
+ {
+ return SIMD_4x32(_mm_slli_epi32(m_reg, static_cast<int>(shift)));
+ }
+
+ SIMD_4x32 operator>>(size_t shift) const
+ {
+ return SIMD_4x32(_mm_srli_epi32(m_reg, static_cast<int>(shift)));
+ }
+
+ SIMD_4x32 operator~() const
+ {
+ return SIMD_4x32(_mm_xor_si128(m_reg, _mm_set1_epi32(0xFFFFFFFF)));
+ }
+
+ // (~reg) & other
+ SIMD_4x32 andc(const SIMD_4x32& other)
+ {
+ return SIMD_4x32(_mm_andnot_si128(m_reg, other.m_reg));
+ }
+
+ SIMD_4x32 bswap() const
+ {
+ __m128i T = m_reg;
+
+ T = _mm_shufflehi_epi16(T, _MM_SHUFFLE(2, 3, 0, 1));
+ T = _mm_shufflelo_epi16(T, _MM_SHUFFLE(2, 3, 0, 1));
+
+ return SIMD_4x32(_mm_or_si128(_mm_srli_epi16(T, 8),
+ _mm_slli_epi16(T, 8)));
+ }
+
+ static void transpose(SIMD_4x32& B0, SIMD_4x32& B1,
+ SIMD_4x32& B2, SIMD_4x32& B3)
+ {
+ __m128i T0 = _mm_unpacklo_epi32(B0.m_reg, B1.m_reg);
+ __m128i T1 = _mm_unpacklo_epi32(B2.m_reg, B3.m_reg);
+ __m128i T2 = _mm_unpackhi_epi32(B0.m_reg, B1.m_reg);
+ __m128i T3 = _mm_unpackhi_epi32(B2.m_reg, B3.m_reg);
+ B0.m_reg = _mm_unpacklo_epi64(T0, T1);
+ B1.m_reg = _mm_unpackhi_epi64(T0, T1);
+ B2.m_reg = _mm_unpacklo_epi64(T2, T3);
+ B3.m_reg = _mm_unpackhi_epi64(T2, T3);
+ }
+
+private:
+
+ explicit SIMD_4x32(__m128i in) { m_reg = in; }
+
+ __m128i m_reg;
+
+};
+
+typedef SIMD_4x32 SIMD_32;
+
+#define key_xor(round, B0, B1, B2, B3) \
+ do { \
+ B0 ^= SIMD_32(round_key[4*round ]); \
+ B1 ^= SIMD_32(round_key[4*round+1]); \
+ B2 ^= SIMD_32(round_key[4*round+2]); \
+ B3 ^= SIMD_32(round_key[4*round+3]); \
+ } while(0);
+
+/*
+* Serpent's linear transformations
+*/
+#define transform(B0, B1, B2, B3) \
+ do { \
+ B0.rotate_left(13); \
+ B2.rotate_left(3); \
+ B1 ^= B0 ^ B2; \
+ B3 ^= B2 ^ (B0 << 3); \
+ B1.rotate_left(1); \
+ B3.rotate_left(7); \
+ B0 ^= B1 ^ B3; \
+ B2 ^= B3 ^ (B1 << 7); \
+ B0.rotate_left(5); \
+ B2.rotate_left(22); \
+ } while(0);
+
+#define i_transform(B0, B1, B2, B3) \
+ do { \
+ B2.rotate_right(22); \
+ B0.rotate_right(5); \
+ B2 ^= B3 ^ (B1 << 7); \
+ B0 ^= B1 ^ B3; \
+ B3.rotate_right(7); \
+ B1.rotate_right(1); \
+ B3 ^= B2 ^ (B0 << 3); \
+ B1 ^= B0 ^ B2; \
+ B2.rotate_right(3); \
+ B0.rotate_right(13); \
+ } while(0);
+
+
+
+/*
+* SIMD Serpent Encryption of 4 blocks in parallel
+*/
+extern "C" void serpent_simd_encrypt_blocks_4(const unsigned __int8 in[], unsigned __int8 out[], unsigned __int32* round_key)
+{
+ SIMD_32 B0 = SIMD_32::load_le(in);
+ SIMD_32 B1 = SIMD_32::load_le(in + 16);
+ SIMD_32 B2 = SIMD_32::load_le(in + 32);
+ SIMD_32 B3 = SIMD_32::load_le(in + 48);
+
+ SIMD_32::transpose(B0, B1, B2, B3);
+
+ key_xor( 0,B0,B1,B2,B3); SBoxE1(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 1,B0,B1,B2,B3); SBoxE2(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 2,B0,B1,B2,B3); SBoxE3(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 3,B0,B1,B2,B3); SBoxE4(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 4,B0,B1,B2,B3); SBoxE5(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 5,B0,B1,B2,B3); SBoxE6(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 6,B0,B1,B2,B3); SBoxE7(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 7,B0,B1,B2,B3); SBoxE8(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+
+ key_xor( 8,B0,B1,B2,B3); SBoxE1(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor( 9,B0,B1,B2,B3); SBoxE2(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(10,B0,B1,B2,B3); SBoxE3(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(11,B0,B1,B2,B3); SBoxE4(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(12,B0,B1,B2,B3); SBoxE5(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(13,B0,B1,B2,B3); SBoxE6(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(14,B0,B1,B2,B3); SBoxE7(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(15,B0,B1,B2,B3); SBoxE8(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+
+ key_xor(16,B0,B1,B2,B3); SBoxE1(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(17,B0,B1,B2,B3); SBoxE2(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(18,B0,B1,B2,B3); SBoxE3(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(19,B0,B1,B2,B3); SBoxE4(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(20,B0,B1,B2,B3); SBoxE5(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(21,B0,B1,B2,B3); SBoxE6(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(22,B0,B1,B2,B3); SBoxE7(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(23,B0,B1,B2,B3); SBoxE8(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+
+ key_xor(24,B0,B1,B2,B3); SBoxE1(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(25,B0,B1,B2,B3); SBoxE2(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(26,B0,B1,B2,B3); SBoxE3(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(27,B0,B1,B2,B3); SBoxE4(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(28,B0,B1,B2,B3); SBoxE5(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(29,B0,B1,B2,B3); SBoxE6(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(30,B0,B1,B2,B3); SBoxE7(SIMD_32,B0,B1,B2,B3); transform(B0,B1,B2,B3);
+ key_xor(31,B0,B1,B2,B3); SBoxE8(SIMD_32,B0,B1,B2,B3); key_xor(32,B0,B1,B2,B3);
+
+ SIMD_32::transpose(B0, B1, B2, B3);
+
+ B0.store_le(out);
+ B1.store_le(out + 16);
+ B2.store_le(out + 32);
+ B3.store_le(out + 48);
+}
+
+/*
+* SIMD Serpent Decryption of 4 blocks in parallel
+*/
+extern "C" void serpent_simd_decrypt_blocks_4(const unsigned __int8 in[], unsigned __int8 out[], unsigned __int32* round_key)
+{
+ SIMD_32 B0 = SIMD_32::load_le(in);
+ SIMD_32 B1 = SIMD_32::load_le(in + 16);
+ SIMD_32 B2 = SIMD_32::load_le(in + 32);
+ SIMD_32 B3 = SIMD_32::load_le(in + 48);
+
+ SIMD_32::transpose(B0, B1, B2, B3);
+
+ key_xor(32,B0,B1,B2,B3); SBoxD8(SIMD_32,B0,B1,B2,B3); key_xor(31,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(SIMD_32,B0,B1,B2,B3); key_xor(30,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(SIMD_32,B0,B1,B2,B3); key_xor(29,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(SIMD_32,B0,B1,B2,B3); key_xor(28,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(SIMD_32,B0,B1,B2,B3); key_xor(27,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(SIMD_32,B0,B1,B2,B3); key_xor(26,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(SIMD_32,B0,B1,B2,B3); key_xor(25,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(SIMD_32,B0,B1,B2,B3); key_xor(24,B0,B1,B2,B3);
+
+ i_transform(B0,B1,B2,B3); SBoxD8(SIMD_32,B0,B1,B2,B3); key_xor(23,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(SIMD_32,B0,B1,B2,B3); key_xor(22,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(SIMD_32,B0,B1,B2,B3); key_xor(21,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(SIMD_32,B0,B1,B2,B3); key_xor(20,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(SIMD_32,B0,B1,B2,B3); key_xor(19,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(SIMD_32,B0,B1,B2,B3); key_xor(18,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(SIMD_32,B0,B1,B2,B3); key_xor(17,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(SIMD_32,B0,B1,B2,B3); key_xor(16,B0,B1,B2,B3);
+
+ i_transform(B0,B1,B2,B3); SBoxD8(SIMD_32,B0,B1,B2,B3); key_xor(15,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(SIMD_32,B0,B1,B2,B3); key_xor(14,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(SIMD_32,B0,B1,B2,B3); key_xor(13,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(SIMD_32,B0,B1,B2,B3); key_xor(12,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(SIMD_32,B0,B1,B2,B3); key_xor(11,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(SIMD_32,B0,B1,B2,B3); key_xor(10,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(SIMD_32,B0,B1,B2,B3); key_xor( 9,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(SIMD_32,B0,B1,B2,B3); key_xor( 8,B0,B1,B2,B3);
+
+ i_transform(B0,B1,B2,B3); SBoxD8(SIMD_32,B0,B1,B2,B3); key_xor( 7,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD7(SIMD_32,B0,B1,B2,B3); key_xor( 6,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD6(SIMD_32,B0,B1,B2,B3); key_xor( 5,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD5(SIMD_32,B0,B1,B2,B3); key_xor( 4,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD4(SIMD_32,B0,B1,B2,B3); key_xor( 3,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD3(SIMD_32,B0,B1,B2,B3); key_xor( 2,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD2(SIMD_32,B0,B1,B2,B3); key_xor( 1,B0,B1,B2,B3);
+ i_transform(B0,B1,B2,B3); SBoxD1(SIMD_32,B0,B1,B2,B3); key_xor( 0,B0,B1,B2,B3);
+
+ SIMD_32::transpose(B0, B1, B2, B3);
+
+ B0.store_le(out);
+ B1.store_le(out + 16);
+ B2.store_le(out + 32);
+ B3.store_le(out + 48);
+}
+
+#undef key_xor
+#undef transform
+#undef i_transform
+
+#endif
diff --git a/src/Crypto/Sources b/src/Crypto/Sources
index c7601a0..07e66b7 100644
--- a/src/Crypto/Sources
+++ b/src/Crypto/Sources
@@ -16,7 +16,8 @@ SOURCES = \
Aestab.c \
cpu.c \
Rmd160.c \
- Serpent.c \
+ SerpentFast.c \
+ SerpentFast_simd.cpp \
Sha2.c \
Twofish.c \
GostCipher.c \
diff --git a/src/Crypto/Twofish.c b/src/Crypto/Twofish.c
index 09f6eda..a04f36e 100644
--- a/src/Crypto/Twofish.c
+++ b/src/Crypto/Twofish.c
@@ -40,10 +40,366 @@
#include "Twofish.h"
#include "Common/Endian.h"
+#ifndef TC_MINIMIZE_CODE_SIZE
+
+#include "misc.h"
+
+/* Implementation based on ideas from Botan library
+ (C) 1999-2007 Jack Lloyd
+ Botan is released under the Simplified BSD License (see license.txt)
+ */
+
+#define get_byte(i,n) (byte) (n >> (((~i)&3) << 3))
+
+static const byte Q0[256] = {
+ 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78,
+ 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
+ 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30,
+ 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
+ 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE,
+ 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
+ 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45,
+ 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
+ 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF,
+ 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
+ 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED,
+ 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
+ 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B,
+ 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
+ 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F,
+ 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
+ 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17,
+ 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
+ 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68,
+ 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
+ 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42,
+ 0x4A, 0x5E, 0xC1, 0xE0 };
+
+static const byte Q1[256] = {
+ 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B,
+ 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
+ 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B,
+ 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
+ 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54,
+ 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
+ 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7,
+ 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
+ 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF,
+ 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
+ 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D,
+ 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
+ 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21,
+ 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
+ 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E,
+ 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
+ 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44,
+ 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
+ 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B,
+ 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
+ 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56,
+ 0x55, 0x09, 0xBE, 0x91 };
+
+static const byte RS[32] = {
+ 0x01, 0xA4, 0x02, 0xA4, 0xA4, 0x56, 0xA1, 0x55, 0x55, 0x82, 0xFC, 0x87,
+ 0x87, 0xF3, 0xC1, 0x5A, 0x5A, 0x1E, 0x47, 0x58, 0x58, 0xC6, 0xAE, 0xDB,
+ 0xDB, 0x68, 0x3D, 0x9E, 0x9E, 0xE5, 0x19, 0x03 };
+
+static const byte EXP_TO_POLY[255] = {
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2,
+ 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03,
+ 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6,
+ 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A,
+ 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63,
+ 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C,
+ 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07,
+ 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88,
+ 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12,
+ 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7,
+ 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C,
+ 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8,
+ 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25,
+ 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A,
+ 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE,
+ 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC,
+ 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E,
+ 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92,
+ 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89,
+ 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB,
+ 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1,
+ 0x8F, 0x53, 0xA6 };
+
+static const byte POLY_TO_EXP[255] = {
+ 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19,
+ 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A,
+ 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C,
+ 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B,
+ 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47,
+ 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D,
+ 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8,
+ 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C,
+ 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83,
+ 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48,
+ 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26,
+ 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E,
+ 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3,
+ 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9,
+ 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A,
+ 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D,
+ 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75,
+ 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84,
+ 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64,
+ 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49,
+ 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF,
+ 0x85, 0xC8, 0xA1 };
+
+static const uint32 MDS0[256] = {
+ 0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B,
+ 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B,
+ 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32,
+ 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
+ 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA,
+ 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B,
+ 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1,
+ 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
+ 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490,
+ 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154,
+ 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0,
+ 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
+ 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228,
+ 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7,
+ 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3,
+ 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
+ 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477,
+ 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF,
+ 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C,
+ 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
+ 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA,
+ 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D,
+ 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72,
+ 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
+ 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76,
+ 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321,
+ 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39,
+ 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
+ 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D,
+ 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E,
+ 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5,
+ 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
+ 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7,
+ 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544,
+ 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E,
+ 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
+ 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A,
+ 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B,
+ 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2,
+ 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
+ 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504,
+ 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756,
+ 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91 };
+
+static const uint32 MDS1[256] = {
+ 0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252,
+ 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A,
+ 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020,
+ 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
+ 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444,
+ 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424,
+ 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A,
+ 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
+ 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383,
+ 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A,
+ 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9,
+ 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
+ 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1,
+ 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898,
+ 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414,
+ 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
+ 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1,
+ 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989,
+ 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5,
+ 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
+ 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E,
+ 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E,
+ 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202,
+ 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
+ 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565,
+ 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A,
+ 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808,
+ 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
+ 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A,
+ 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969,
+ 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505,
+ 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
+ 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D,
+ 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343,
+ 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF,
+ 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
+ 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F,
+ 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646,
+ 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6,
+ 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
+ 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A,
+ 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7,
+ 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8 };
+
+static const uint32 MDS2[256] = {
+ 0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B,
+ 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F,
+ 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A,
+ 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
+ 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70,
+ 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3,
+ 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB,
+ 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
+ 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4,
+ 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41,
+ 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C,
+ 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
+ 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622,
+ 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18,
+ 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035,
+ 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
+ 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84,
+ 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E,
+ 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F,
+ 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
+ 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558,
+ 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40,
+ 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA,
+ 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
+ 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF,
+ 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773,
+ 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D,
+ 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
+ 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C,
+ 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19,
+ 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086,
+ 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
+ 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74,
+ 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755,
+ 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691,
+ 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
+ 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4,
+ 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53,
+ 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E,
+ 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
+ 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705,
+ 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7,
+ 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF };
+
+static const uint32 MDS3[256] = {
+ 0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98,
+ 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866,
+ 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643,
+ 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
+ 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9,
+ 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C,
+ 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3,
+ 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
+ 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F,
+ 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25,
+ 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF,
+ 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
+ 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4,
+ 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E,
+ 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA,
+ 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
+ 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12,
+ 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A,
+ 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D,
+ 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
+ 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A,
+ 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C,
+ 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B,
+ 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
+ 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B,
+ 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3,
+ 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE,
+ 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
+ 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85,
+ 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA,
+ 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E,
+ 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
+ 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33,
+ 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC,
+ 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718,
+ 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
+ 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8,
+ 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872,
+ 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882,
+ 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
+ 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10,
+ 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6,
+ 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8 };
+
+
+
+/*
+* Do one column of the RS matrix multiplcation
+*/
+static void rs_mul(byte S[4], byte key, size_t offset)
+{
+ if(key)
+ {
+ byte X = POLY_TO_EXP[key - 1];
+
+ byte RS1 = RS[(4*offset ) % 32];
+ byte RS2 = RS[(4*offset+1) % 32];
+ byte RS3 = RS[(4*offset+2) % 32];
+ byte RS4 = RS[(4*offset+3) % 32];
+
+ S[0] ^= EXP_TO_POLY[(X + POLY_TO_EXP[RS1 - 1]) % 255];
+ S[1] ^= EXP_TO_POLY[(X + POLY_TO_EXP[RS2 - 1]) % 255];
+ S[2] ^= EXP_TO_POLY[(X + POLY_TO_EXP[RS3 - 1]) % 255];
+ S[3] ^= EXP_TO_POLY[(X + POLY_TO_EXP[RS4 - 1]) % 255];
+ }
+}
+
+u4byte *twofish_set_key(TwofishInstance *instance, const u4byte in_key[])
+{
+ int i;
+ byte S[16] = {0};
+ const byte* key = (const byte*) in_key;
+ u4byte *l_key = instance->l_key;
+ u4byte *mk_tab = instance->mk_tab;
+
+ for(i = 0; i != 32; ++i)
+ rs_mul(&S[4*(i/8)], key[i], i);
+
+ for(i = 0; i != 256; ++i)
+ {
+ mk_tab[ i] = MDS0[Q0[Q0[Q1[Q1[i]^S[ 0]]^S[ 4]]^S[ 8]]^S[12]];
+ mk_tab[256+i] = MDS1[Q0[Q1[Q1[Q0[i]^S[ 1]]^S[ 5]]^S[ 9]]^S[13]];
+ mk_tab[512+i] = MDS2[Q1[Q0[Q0[Q0[i]^S[ 2]]^S[ 6]]^S[10]]^S[14]];
+ mk_tab[768+i] = MDS3[Q1[Q1[Q0[Q1[i]^S[ 3]]^S[ 7]]^S[11]]^S[15]];
+ }
+
+ for(i = 0; i != 40; i += 2)
+ {
+ uint32 X = MDS0[Q0[Q0[Q1[Q1[i ]^key[24]]^key[16]]^key[ 8]]^key[ 0]] ^
+ MDS1[Q0[Q1[Q1[Q0[i ]^key[25]]^key[17]]^key[ 9]]^key[ 1]] ^
+ MDS2[Q1[Q0[Q0[Q0[i ]^key[26]]^key[18]]^key[10]]^key[ 2]] ^
+ MDS3[Q1[Q1[Q0[Q1[i ]^key[27]]^key[19]]^key[11]]^key[ 3]];
+ uint32 Y = MDS0[Q0[Q0[Q1[Q1[i+1]^key[28]]^key[20]]^key[12]]^key[ 4]] ^
+ MDS1[Q0[Q1[Q1[Q0[i+1]^key[29]]^key[21]]^key[13]]^key[ 5]] ^
+ MDS2[Q1[Q0[Q0[Q0[i+1]^key[30]]^key[22]]^key[14]]^key[ 6]] ^
+ MDS3[Q1[Q1[Q0[Q1[i+1]^key[31]]^key[23]]^key[15]]^key[ 7]];
+ Y = rotl32(Y, 8);
+ X += Y; Y += X;
+
+ l_key[i] = X;
+ l_key[i+1] = rotl32(Y, 9);
+ }
+
+ return l_key;
+}
+
+#else
+
#define Q_TABLES
#define M_TABLE
-#if !defined (TC_MINIMIZE_CODE_SIZE) || defined (TC_WINDOWS_BOOT_TWOFISH)
+#if defined (TC_WINDOWS_BOOT_TWOFISH)
# define MK_TABLE
# define ONE_STEP
#endif
@@ -184,21 +540,19 @@ static u4byte h_fun(TwofishInstance *instance, const u4byte x, const u4byte key[
b0 = extract_byte(x, 0); b1 = extract_byte(x, 1); b2 = extract_byte(x, 2); b3 = extract_byte(x, 3);
- switch(instance->k_len)
- {
- case 4: b0 = q(1, (u1byte) b0) ^ extract_byte(key[3],0);
- b1 = q(0, (u1byte) b1) ^ extract_byte(key[3],1);
- b2 = q(0, (u1byte) b2) ^ extract_byte(key[3],2);
- b3 = q(1, (u1byte) b3) ^ extract_byte(key[3],3);
- case 3: b0 = q(1, (u1byte) b0) ^ extract_byte(key[2],0);
- b1 = q(1, (u1byte) b1) ^ extract_byte(key[2],1);
- b2 = q(0, (u1byte) b2) ^ extract_byte(key[2],2);
- b3 = q(0, (u1byte) b3) ^ extract_byte(key[2],3);
- case 2: b0 = q(0, (u1byte) (q(0, (u1byte) b0) ^ extract_byte(key[1],0))) ^ extract_byte(key[0],0);
- b1 = q(0, (u1byte) (q(1, (u1byte) b1) ^ extract_byte(key[1],1))) ^ extract_byte(key[0],1);
- b2 = q(1, (u1byte) (q(0, (u1byte) b2) ^ extract_byte(key[1],2))) ^ extract_byte(key[0],2);
- b3 = q(1, (u1byte) (q(1, (u1byte) b3) ^ extract_byte(key[1],3))) ^ extract_byte(key[0],3);
- }
+ b0 = q(1, (u1byte) b0) ^ extract_byte(key[3],0);
+ b1 = q(0, (u1byte) b1) ^ extract_byte(key[3],1);
+ b2 = q(0, (u1byte) b2) ^ extract_byte(key[3],2);
+ b3 = q(1, (u1byte) b3) ^ extract_byte(key[3],3);
+ b0 = q(1, (u1byte) b0) ^ extract_byte(key[2],0);
+ b1 = q(1, (u1byte) b1) ^ extract_byte(key[2],1);
+ b2 = q(0, (u1byte) b2) ^ extract_byte(key[2],2);
+ b3 = q(0, (u1byte) b3) ^ extract_byte(key[2],3);
+ b0 = q(0, (u1byte) (q(0, (u1byte) b0) ^ extract_byte(key[1],0))) ^ extract_byte(key[0],0);
+ b1 = q(0, (u1byte) (q(1, (u1byte) b1) ^ extract_byte(key[1],1))) ^ extract_byte(key[0],1);
+ b2 = q(1, (u1byte) (q(0, (u1byte) b2) ^ extract_byte(key[1],2))) ^ extract_byte(key[0],2);
+ b3 = q(1, (u1byte) (q(1, (u1byte) b3) ^ extract_byte(key[1],3))) ^ extract_byte(key[0],3);
+
#ifdef M_TABLE
return mds(0, b0) ^ mds(1, b1) ^ mds(2, b2) ^ mds(3, b3);
@@ -245,46 +599,17 @@ static void gen_mk_tab(TwofishInstance *instance, u4byte key[])
u4byte *mk_tab = instance->mk_tab;
- switch(instance->k_len)
+ for(i = 0; i < 256; ++i)
{
- case 2: for(i = 0; i < 256; ++i)
- {
- by = (u1byte)i;
-#ifdef ONE_STEP
- mk_tab[0 + 4*i] = mds(0, q20(by)); mk_tab[1 + 4*i] = mds(1, q21(by));
- mk_tab[2 + 4*i] = mds(2, q22(by)); mk_tab[3 + 4*i] = mds(3, q23(by));
-#else
- sb[0][i] = q20(by); sb[1][i] = q21(by);
- sb[2][i] = q22(by); sb[3][i] = q23(by);
-#endif
- }
- break;
-
- case 3: for(i = 0; i < 256; ++i)
- {
- by = (u1byte)i;
+ by = (u1byte)i;
#ifdef ONE_STEP
- mk_tab[0 + 4*i] = mds(0, q30(by)); mk_tab[1 + 4*i] = mds(1, q31(by));
- mk_tab[2 + 4*i] = mds(2, q32(by)); mk_tab[3 + 4*i] = mds(3, q33(by));
+ mk_tab[0 + 4*i] = mds(0, q40(by)); mk_tab[1 + 4*i] = mds(1, q41(by));
+ mk_tab[2 + 4*i] = mds(2, q42(by)); mk_tab[3 + 4*i] = mds(3, q43(by));
#else
- sb[0][i] = q30(by); sb[1][i] = q31(by);
- sb[2][i] = q32(by); sb[3][i] = q33(by);
+ sb[0][i] = q40(by); sb[1][i] = q41(by);
+ sb[2][i] = q42(by); sb[3][i] = q43(by);
#endif
- }
- break;
-
- case 4: for(i = 0; i < 256; ++i)
- {
- by = (u1byte)i;
-#ifdef ONE_STEP
- mk_tab[0 + 4*i] = mds(0, q40(by)); mk_tab[1 + 4*i] = mds(1, q41(by));
- mk_tab[2 + 4*i] = mds(2, q42(by)); mk_tab[3 + 4*i] = mds(3, q43(by));
-#else
- sb[0][i] = q40(by); sb[1][i] = q41(by);
- sb[2][i] = q42(by); sb[3][i] = q43(by);
-#endif
- }
- }
+ }
};
# ifdef ONE_STEP
@@ -391,13 +716,12 @@ u4byte *twofish_set_key(TwofishInstance *instance, const u4byte in_key[])
}
#endif
- instance->k_len = 4;
- for(i = 0; i < instance->k_len; ++i)
+ for(i = 0; i < 4; ++i)
{
a = LE32(in_key[i + i]); me_key[i] = a;
b = LE32(in_key[i + i + 1]); mo_key[i] = b;
- s_key[instance->k_len - i - 1] = mds_rem(a, b);
+ s_key[4 - i - 1] = mds_rem(a, b);
}
for(i = 0; i < 40; i += 2)
@@ -416,36 +740,59 @@ u4byte *twofish_set_key(TwofishInstance *instance, const u4byte in_key[])
return l_key;
};
+#endif
+
/* encrypt a block of text */
#ifndef TC_MINIMIZE_CODE_SIZE
-#define f_rnd(i) \
- t1 = g1_fun(blk[1]); t0 = g0_fun(blk[0]); \
- blk[2] = rotr(blk[2] ^ (t0 + t1 + l_key[4 * (i) + 8]), 1); \
- blk[3] = rotl(blk[3], 1) ^ (t0 + 2 * t1 + l_key[4 * (i) + 9]); \
- t1 = g1_fun(blk[3]); t0 = g0_fun(blk[2]); \
- blk[0] = rotr(blk[0] ^ (t0 + t1 + l_key[4 * (i) + 10]), 1); \
- blk[1] = rotl(blk[1], 1) ^ (t0 + 2 * t1 + l_key[4 * (i) + 11])
-
void twofish_encrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte out_blk[])
-{ u4byte t0, t1, blk[4];
+{
+ int j;
u4byte *l_key = instance->l_key;
u4byte *mk_tab = instance->mk_tab;
- blk[0] = LE32(in_blk[0]) ^ l_key[0];
- blk[1] = LE32(in_blk[1]) ^ l_key[1];
- blk[2] = LE32(in_blk[2]) ^ l_key[2];
- blk[3] = LE32(in_blk[3]) ^ l_key[3];
+ u4byte A = LE32(in_blk[0]) ^ l_key[0];
+ u4byte B = LE32(in_blk[1]) ^ l_key[1];
+ u4byte C = LE32(in_blk[2]) ^ l_key[2];
+ u4byte D = LE32(in_blk[3]) ^ l_key[3];
- f_rnd(0); f_rnd(1); f_rnd(2); f_rnd(3);
- f_rnd(4); f_rnd(5); f_rnd(6); f_rnd(7);
+ for(j = 0; j != 16; j += 2)
+ {
+ u4byte X, Y;
+ X = mk_tab[ get_byte(3, A)] ^ mk_tab[256+get_byte(2, A)] ^
+ mk_tab[512+get_byte(1, A)] ^ mk_tab[768+get_byte(0, A)];
+ Y = mk_tab[ get_byte(0, B)] ^ mk_tab[256+get_byte(3, B)] ^
+ mk_tab[512+get_byte(2, B)] ^ mk_tab[768+get_byte(1, B)];
+ X += Y;
+ Y += X + l_key[2*j + 9];
+ X += l_key[2*j + 8];
+
+ C = rotr32(C ^ X, 1);
+ D = rotl32(D, 1) ^ Y;
+
+ X = mk_tab[ get_byte(3, C)] ^ mk_tab[256+get_byte(2, C)] ^
+ mk_tab[512+get_byte(1, C)] ^ mk_tab[768+get_byte(0, C)];
+ Y = mk_tab[ get_byte(0, D)] ^ mk_tab[256+get_byte(3, D)] ^
+ mk_tab[512+get_byte(2, D)] ^ mk_tab[768+get_byte(1, D)];
+ X += Y;
+ Y += X + l_key[2*j + 11];
+ X += l_key[2*j + 10];
+
+ A = rotr32(A ^ X, 1);
+ B = rotl32(B, 1) ^ Y;
+ }
- out_blk[0] = LE32(blk[2] ^ l_key[4]);
- out_blk[1] = LE32(blk[3] ^ l_key[5]);
- out_blk[2] = LE32(blk[0] ^ l_key[6]);
- out_blk[3] = LE32(blk[1] ^ l_key[7]);
+ C ^= l_key[4];
+ D ^= l_key[5];
+ A ^= l_key[6];
+ B ^= l_key[7];
+
+ out_blk[0] = LE32(C);
+ out_blk[1] = LE32(D);
+ out_blk[2] = LE32(A);
+ out_blk[3] = LE32(B);
};
#else // TC_MINIMIZE_CODE_SIZE
@@ -486,32 +833,52 @@ void twofish_encrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte o
#ifndef TC_MINIMIZE_CODE_SIZE
-#define i_rnd(i) \
- t1 = g1_fun(blk[1]); t0 = g0_fun(blk[0]); \
- blk[2] = rotl(blk[2], 1) ^ (t0 + t1 + l_key[4 * (i) + 10]); \
- blk[3] = rotr(blk[3] ^ (t0 + 2 * t1 + l_key[4 * (i) + 11]), 1); \
- t1 = g1_fun(blk[3]); t0 = g0_fun(blk[2]); \
- blk[0] = rotl(blk[0], 1) ^ (t0 + t1 + l_key[4 * (i) + 8]); \
- blk[1] = rotr(blk[1] ^ (t0 + 2 * t1 + l_key[4 * (i) + 9]), 1)
-
void twofish_decrypt(TwofishInstance *instance, const u4byte in_blk[4], u4byte out_blk[4])
-{ u4byte t0, t1, blk[4];
-
+{
+ int j;
u4byte *l_key = instance->l_key;
u4byte *mk_tab = instance->mk_tab;
- blk[0] = LE32(in_blk[0]) ^ l_key[4];
- blk[1] = LE32(in_blk[1]) ^ l_key[5];
- blk[2] = LE32(in_blk[2]) ^ l_key[6];
- blk[3] = LE32(in_blk[3]) ^ l_key[7];
+ u4byte A = LE32(in_blk[0]) ^ l_key[4];
+ u4byte B = LE32(in_blk[1]) ^ l_key[5];
+ u4byte C = LE32(in_blk[2]) ^ l_key[6];
+ u4byte D = LE32(in_blk[3]) ^ l_key[7];
- i_rnd(7); i_rnd(6); i_rnd(5); i_rnd(4);
- i_rnd(3); i_rnd(2); i_rnd(1); i_rnd(0);
+ for(j = 0; j != 16; j += 2)
+ {
+ u4byte X, Y;
+ X = mk_tab[ get_byte(3, A)] ^ mk_tab[256+get_byte(2, A)] ^
+ mk_tab[512+get_byte(1, A)] ^ mk_tab[768+get_byte(0, A)];
+ Y = mk_tab[ get_byte(0, B)] ^ mk_tab[256+get_byte(3, B)] ^
+ mk_tab[512+get_byte(2, B)] ^ mk_tab[768+get_byte(1, B)];
+ X += Y;
+ Y += X + l_key[39 - 2*j];
+ X += l_key[38 - 2*j];
+
+ C = rotl32(C, 1) ^ X;
+ D = rotr32(D ^ Y, 1);
+
+ X = mk_tab[ get_byte(3, C)] ^ mk_tab[256+get_byte(2, C)] ^
+ mk_tab[512+get_byte(1, C)] ^ mk_tab[768+get_byte(0, C)];
+ Y = mk_tab[ get_byte(0, D)] ^ mk_tab[256+get_byte(3, D)] ^
+ mk_tab[512+get_byte(2, D)] ^ mk_tab[768+get_byte(1, D)];
+ X += Y;
+ Y += X + l_key[37 - 2*j];
+ X += l_key[36 - 2*j];
+
+ A = rotl32(A, 1) ^ X;
+ B = rotr32(B ^ Y, 1);
+ }
- out_blk[0] = LE32(blk[2] ^ l_key[0]);
- out_blk[1] = LE32(blk[3] ^ l_key[1]);
- out_blk[2] = LE32(blk[0] ^ l_key[2]);
- out_blk[3] = LE32(blk[1] ^ l_key[3]);
+ C ^= l_key[0];
+ D ^= l_key[1];
+ A ^= l_key[2];
+ B ^= l_key[3];
+
+ out_blk[0] = LE32(C);
+ out_blk[1] = LE32(D);
+ out_blk[2] = LE32(A);
+ out_blk[3] = LE32(B);
};
#else // TC_MINIMIZE_CODE_SIZE
diff --git a/src/Crypto/Twofish.h b/src/Crypto/Twofish.h
index 1011608..aebb6ea 100644
--- a/src/Crypto/Twofish.h
+++ b/src/Crypto/Twofish.h
@@ -35,11 +35,12 @@ extern "C"
typedef struct
{
u4byte l_key[40];
+#ifdef TC_MINIMIZE_CODE_SIZE
u4byte s_key[4];
+#endif
#if !defined (TC_MINIMIZE_CODE_SIZE) || defined (TC_WINDOWS_BOOT_TWOFISH)
u4byte mk_tab[4 * 256];
#endif
- u4byte k_len;
} TwofishInstance;
#define TWOFISH_KS sizeof(TwofishInstance)
diff --git a/src/Crypto/cpu.c b/src/Crypto/cpu.c
index ed1f593..7a4656d 100644
--- a/src/Crypto/cpu.c
+++ b/src/Crypto/cpu.c
@@ -189,7 +189,7 @@ static int TrySSE2()
int g_x86DetectionDone = 0;
int g_hasISSE = 0, g_hasSSE2 = 0, g_hasSSSE3 = 0, g_hasMMX = 0, g_hasAESNI = 0, g_hasCLMUL = 0, g_isP4 = 0;
-int g_hasAVX = 0, g_hasSSE42 = 0, g_hasSSE41 = 0;
+int g_hasAVX = 0, g_hasAVX2 = 0, g_hasBMI2 = 0, g_hasSSE42 = 0, g_hasSSE41 = 0;
uint32 g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE;
VC_INLINE int IsIntel(const uint32 output[4])
@@ -292,6 +292,8 @@ void DetectX86Features()
g_hasMMX = (cpuid1[3] & (1 << 23)) != 0;
if ((cpuid1[3] & (1 << 26)) != 0)
g_hasSSE2 = TrySSE2();
+ g_hasAVX2 = g_hasSSE2 && (cpuid1[1] & (1 << 5));
+ g_hasBMI2 = g_hasSSE2 && (cpuid1[1] & (1 << 8));
g_hasAVX = g_hasSSE2 && (cpuid1[2] & (1 << 28));
g_hasSSE42 = g_hasSSE2 && (cpuid1[2] & (1 << 20));
g_hasSSE41 = g_hasSSE2 && (cpuid1[2] & (1 << 19));
diff --git a/src/Crypto/cpu.h b/src/Crypto/cpu.h
index 2d26e92..ab372cf 100644
--- a/src/Crypto/cpu.h
+++ b/src/Crypto/cpu.h
@@ -69,8 +69,29 @@ extern void _mm_store_si128(__m128i *_P, __m128i _B);
extern __m64 _m_pxor(__m64 _MM1, __m64 _MM2);
extern __m128i _mm_set_epi64(__m64 _Q1, __m64 _Q0);
extern __m128i _mm_setr_epi32(int _I0, int _I1, int _I2, int _I3);
+extern __m128i _mm_loadu_si128(__m128i const*_P);
+extern __m128i _mm_set_epi32(int _I3, int _I2, int _I1, int _I0);
+extern __m128i _mm_set1_epi32(int _I);
+extern void _mm_storeu_si128(__m128i *_P, __m128i _B);
+extern __m128i _mm_or_si128(__m128i _A, __m128i _B);
+extern __m128i _mm_slli_epi32(__m128i _A, int _Count);
+extern __m128i _mm_srli_epi32(__m128i _A, int _Count);
+extern __m128i _mm_add_epi32(__m128i _A, __m128i _B);
+extern __m128i _mm_sub_epi32(__m128i _A, __m128i _B);
+extern __m128i _mm_or_si128(__m128i _A, __m128i _B);
+extern __m128i _mm_and_si128(__m128i _A, __m128i _B);
+extern __m128i _mm_andnot_si128(__m128i _A, __m128i _B);
+extern __m128i _mm_shufflehi_epi16(__m128i _A, int _Imm);
+extern __m128i _mm_shufflelo_epi16(__m128i _A, int _Imm);
+extern __m128i _mm_unpacklo_epi32(__m128i _A, __m128i _B);
+extern __m128i _mm_unpackhi_epi32(__m128i _A, __m128i _B);
+extern __m128i _mm_unpackhi_epi64(__m128i _A, __m128i _B);
+extern __m128i _mm_srli_epi16(__m128i _A, int _Count);
+extern __m128i _mm_slli_epi16(__m128i _A, int _Count);
#define _mm_xor_si64 _m_pxor
#define _mm_empty _m_empty
+#define _MM_SHUFFLE(fp3,fp2,fp1,fp0) (((fp3) << 6) | ((fp2) << 4) | \
+ ((fp1) << 2) | ((fp0)))
#if defined(__cplusplus)
}
#endif
@@ -146,6 +167,8 @@ extern "C" {
// these should not be used directly
extern int g_x86DetectionDone;
extern int g_hasAVX;
+extern int g_hasAVX2;
+extern int g_hasBMI2;
extern int g_hasSSE42;
extern int g_hasSSE41;
extern int g_hasSSSE3;
@@ -175,6 +198,8 @@ extern int g_hasMMX;
#define HasSSE42() g_hasSSE42
#define HasSSE41() g_hasSSE41
#define HasSAVX() g_hasAVX
+#define HasSAVX2() g_hasAVX2
+#define HasSBMI2() g_hasBMI2
#define HasSSSE3() g_hasSSSE3
#define HasAESNI() g_hasAESNI
#define HasCLMUL() g_hasCLMUL
@@ -396,4 +421,21 @@ extern int g_hasMMX;
AS2( add outputPtr, increment*16)
+#if defined(TC_WINDOWS_DRIVER) || defined (_UEFI)
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern unsigned __int64 __cdecl _rotl64(unsigned __int64,int);
+extern unsigned __int64 __cdecl _rotr64(unsigned __int64,int);
+extern unsigned int __cdecl _rotl(unsigned int,int);
+extern unsigned int __cdecl _rotr(unsigned int,int);
+extern unsigned char _rotr8(unsigned char value, unsigned char shift);
+extern unsigned short _rotr16(unsigned short value, unsigned char shift);
+extern unsigned char _rotl8(unsigned char value, unsigned char shift);
+extern unsigned short _rotl16(unsigned short value, unsigned char shift);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
#endif
diff --git a/src/Crypto/gost89_x64.asm b/src/Crypto/gost89_x64.asm
index f2e49cb..5f5892f 100644
--- a/src/Crypto/gost89_x64.asm
+++ b/src/Crypto/gost89_x64.asm
@@ -5,7 +5,9 @@
;
; This program and the accompanying materials
; are licensed and made available under the terms and conditions
-; of the Apache License, Version 2.0. The full text of the license may be found at
+; of the Apache License, Version 2.0.
+;
+; The full text of the license may be found at
; https://opensource.org/licenses/Apache-2.0
;
; Some ideas from article https://xakep.ru/2013/10/19/shifrovanie-gost-28147-89/
@@ -107,17 +109,17 @@
mov eax, [r8 + %2*4] ; read key
%endmacro
-; input: r8 - &key, rdx - &IN
+; input: r8 - &key, rcx - &IN
; returns: (r13) & (r10)
GostEncrypt2x64:
; 1st
- mov r13d, [rdx]
- mov r14, [rdx]
+ mov r13d, [rcx]
+ mov r14, [rcx]
shr r14, 32
; 2nd
- mov r10d, [rdx + 16]
- mov r11, [rdx + 16]
+ mov r10d, [rcx + 16]
+ mov r11, [rcx + 16]
shr r11, 32
mov ecx, [r8]
@@ -150,17 +152,17 @@ GostEncrypt2x64:
or r10, r11
ret
-; input: r8 - &key, rdx - &IN
+; input: r8 - &key, rcx - &IN
; returns: (r13) & (r10)
GostDecrypt2x64:
; 1st
- mov r13d, [rdx]
- mov r14, [rdx]
+ mov r13d, [rcx]
+ mov r14, [rcx]
shr r14, 32
; 2nd
- mov r10d, [rdx + 16]
- mov r11, [rdx + 16]
+ mov r10d, [rcx + 16]
+ mov r11, [rcx + 16]
shr r11, 32
mov ecx, [r8]
@@ -227,11 +229,11 @@ ret
mov ecx, [r8 + %2*4] ; read key
%endmacro
-; input: r8 - &gost_kds rdx - &IN
+; input: r8 - &gost_kds rcx - &IN
; returns: r13
GostEncrypt1x64:
- mov r13d, [rdx]
- mov r14, [rdx]
+ mov r13d, [rcx]
+ mov r14, [rcx]
shr r14, 32
mov ecx, [r8]
@@ -259,11 +261,11 @@ GostEncrypt1x64:
or r13, r14
ret
-; input: r8 - &gost_kds rdx - IN
+; input: r8 - &gost_kds rcx - IN
; returns: r13
GostDecrypt1x64:
- mov r13d, [rdx]
- mov r14, [rdx]
+ mov r13d, [rcx]
+ mov r14, [rcx]
shr r14, 32
mov ecx, [r8]
@@ -291,17 +293,17 @@ GostDecrypt1x64:
or r13, r14
ret
-global gost_encrypt_128_CBC_asm ; gost_encrypt_128_CBC_asm(uint64* out, uint64* in, gost_kds* kds, uint64 count);
-; rcx - &out
-; rdx - &in
+global gost_encrypt_128_CBC_asm ; gost_encrypt_128_CBC_asm(uint64* in, uint64* out, gost_kds* kds, uint64 count);
+; rcx - &in
+; rdx - &out
; r8 - &gost_kds
; r9 - count
gost_encrypt_128_CBC_asm:
SaveRegs ; Saving
sub rsp, 32
- mov [rsp], rcx ; Save out addr
- mov [rsp + 8], rdx ; Save in addr
+ mov [rsp], rdx ; Save out addr
+ mov [rsp + 8], rcx ; Save in addr
mov [rsp + 16], r8 ; key addr
.do:
@@ -314,32 +316,32 @@ gost_encrypt_128_CBC_asm:
; One 128 block encryption
.blk1:
- mov rdx, [rsp + 8] ; set in addr
+ mov rcx, [rsp + 8] ; set in addr
call GostEncrypt1x64
- mov rcx, [rsp] ; Restore out
- mov rdx, [rsp + 8] ; restore in
+ mov rdx, [rsp] ; Restore out
+ mov rcx, [rsp + 8] ; restore in
- mov [rcx], r13
- mov rax, [rdx + 8]
+ mov [rdx], r13
+ mov rax, [rcx + 8]
xor rax, r13 ; CBC
- add rcx, 8 ;next 8 bytes
- mov [rcx], rax
+ add rdx, 8 ;next 8 bytes
+ mov [rdx], rax
- mov rdx, rcx
+ mov rcx, rdx
call GostEncrypt1x64
- mov rcx, [rsp] ; Restore out addr
- mov rdx, [rsp+8] ; Restore in addr
+ mov rdx, [rsp] ; Restore out addr
+ mov rcx, [rsp+8] ; Restore in addr
- mov [rcx + 8], r13
+ mov [rdx + 8], r13
- add rcx,16
- mov [rsp], rcx
+ add rdx,16
+ mov [rsp], rdx
- add rdx, 16
- mov [rsp+8], rdx
+ add rcx, 16
+ mov [rsp+8], rcx
mov r9, [rsp + 24]
dec r9
@@ -347,41 +349,41 @@ gost_encrypt_128_CBC_asm:
jmp .do
.blk2:
- mov rdx, [rsp + 8] ; set in addr
+ mov rcx, [rsp + 8] ; set in addr
call GostEncrypt2x64
- mov rcx, [rsp] ; Restore out
- mov rdx, [rsp + 8] ; restore in
+ mov rdx, [rsp] ; Restore out
+ mov rcx, [rsp + 8] ; restore in
- mov [rcx], r13
+ mov [rdx], r13
- mov rax, [rdx + 8]
+ mov rax, [rcx + 8]
xor rax, r13 ; CBC
- mov [rcx + 16], r10
+ mov [rdx + 16], r10
- mov rbx, [rdx + 24]
+ mov rbx, [rcx + 24]
xor rbx, r10 ; CBC
- mov [rcx + 8], rax
- mov [rcx + 24], rbx
+ mov [rdx + 8], rax
+ mov [rdx + 24], rbx
- add rcx, 8 ;next 8 bytes
+ add rdx, 8 ;next 8 bytes
- mov rdx, rcx
+ mov rcx, rdx
call GostEncrypt2x64
- mov rcx, [rsp] ; Restore out addr
- mov rdx, [rsp+8] ; Restore in addr
+ mov rdx, [rsp] ; Restore out addr
+ mov rcx, [rsp+8] ; Restore in addr
- mov [rcx + 8], r13
- mov [rcx + 24], r10
+ mov [rdx + 8], r13
+ mov [rdx + 24], r10
- add rcx,32
- mov [rsp], rcx
+ add rdx,32
+ mov [rsp], rdx
- add rdx, 32
- mov [rsp+8], rdx
+ add rcx, 32
+ mov [rsp+8], rcx
mov r9, [rsp + 24]
sub r9, 2
@@ -393,9 +395,9 @@ gost_encrypt_128_CBC_asm:
RestoreRegs ; Load
ret
-global gost_decrypt_128_CBC_asm ; gost_decrypt_128_CBC_asm(uint64* out, uint64* in, const gost_kds* kds, uint64 count);
-; rcx - &out
-; rdx - &in
+global gost_decrypt_128_CBC_asm ; gost_decrypt_128_CBC_asm(uint64* in, uint64* out, const gost_kds* kds, uint64 count);
+; rcx - &in
+; rdx - &out
; r8 - &gost_kds
; r9 - count
gost_decrypt_128_CBC_asm:
@@ -416,26 +418,26 @@ gost_decrypt_128_CBC_asm:
; One 128 block decryption
.blk1:
- add rdx, 8
+ add rcx, 8
call GostDecrypt1x64
- mov rcx, [rsp] ; Restore out
- mov rdx, [rsp + 8] ; Restore in
- mov rax, [rdx]
+ mov rdx, [rsp] ; Restore out
+ mov rcx, [rsp + 8] ; Restore in
+ mov rax, [rcx]
xor rax, r13 ; CBC
- mov [rcx + 8], rax
+ mov [rdx + 8], rax
call GostDecrypt1x64
- mov rcx, [rsp] ; Restore out addr
- mov rdx, [rsp+8] ; Restore in addr
+ mov rdx, [rsp] ; Restore out addr
+ mov rcx, [rsp+8] ; Restore in addr
- mov [rcx], r13
+ mov [rdx], r13
- add rcx,16
- mov [rsp], rcx
+ add rdx,16
+ mov [rsp], rdx
- add rdx, 16
- mov [rsp+8], rdx
+ add rcx, 16
+ mov [rsp+8], rcx
mov r9, [rsp + 24]
dec r9
@@ -443,32 +445,32 @@ gost_decrypt_128_CBC_asm:
jmp .do
.blk2:
- add rdx, 8
+ add rcx, 8
call GostDecrypt2x64
- mov rcx, [rsp] ; Restore out
- mov rdx, [rsp + 8] ; Restore in
+ mov rdx, [rsp] ; Restore out
+ mov rcx, [rsp + 8] ; Restore in
- mov rax, [rdx]
+ mov rax, [rcx]
xor rax, r13 ; CBC
- mov [rcx + 8], rax
+ mov [rdx + 8], rax
- mov rbx, [rdx+16]
+ mov rbx, [rcx+16]
xor rbx, r10 ; CBC
- mov [rcx + 24], rbx
+ mov [rdx + 24], rbx
call GostDecrypt2x64
- mov rcx, [rsp] ; Restore out addr
- mov rdx, [rsp+8] ; Restore in addr
+ mov rdx, [rsp] ; Restore out addr
+ mov rcx, [rsp+8] ; Restore in addr
- mov [rcx], r13
- mov [rcx+16], r10
-
- add rcx,32
- mov [rsp], rcx
+ mov [rdx], r13
+ mov [rdx+16], r10
add rdx,32
- mov [rsp+8], rdx
+ mov [rsp], rdx
+
+ add rcx,32
+ mov [rsp+8], rcx
mov r9, [rsp + 24]
sub r9, 2
diff --git a/src/Crypto/misc.h b/src/Crypto/misc.h
index e739176..47d0288 100644
--- a/src/Crypto/misc.h
+++ b/src/Crypto/misc.h
@@ -12,6 +12,10 @@
#include "Tcdefs.h"
#endif // !defined(_UEFI)
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#if defined(_MSC_VER) && !defined(_UEFI)
#if _MSC_VER >= 1400
#if !defined(TC_WINDOWS_DRIVER) && !defined(_UEFI)
@@ -85,6 +89,7 @@
#define CRYPTOPP_BYTESWAP_AVAILABLE
#include <byteswap.h>
#elif defined(_MSC_VER) && _MSC_VER >= 1300 && !defined(_UEFI)
+#pragma intrinsic(_byteswap_ulong,_byteswap_uint64)
#define CRYPTOPP_BYTESWAP_AVAILABLE
#define bswap_32(x) _byteswap_ulong(x)
#define bswap_64(x) _byteswap_uint64(x)
@@ -174,4 +179,8 @@ VC_INLINE void CorrectEndianess(uint64 *out, const uint64 *in, size_t byteCount)
#define IsAligned16(p) IsAlignedOn(p, GetAlignmentOf(uint64))
+#ifdef __cplusplus
+}
+#endif
+
#endif
diff --git a/src/Driver/BuildDriver.cmd b/src/Driver/BuildDriver.cmd
index 197e41c..33888d0 100644
--- a/src/Driver/BuildDriver.cmd
+++ b/src/Driver/BuildDriver.cmd
@@ -1,184 +1,184 @@
-::
-:: Derived from source code of TrueCrypt 7.1a, which is
-:: Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
-:: by the TrueCrypt License 3.0.
-::
-:: Modifications and additions to the original source code (contained in this file)
-:: and all other portions of this file are Copyright (c) 2013-2016 IDRIX
-:: and are governed by the Apache License 2.0 the full text of which is
-:: contained in the file License.txt included in VeraCrypt binary and source
-:: code distribution packages.
-::
-
-:: Usage: BuildDriver <-build|-rebuild|-clean> <-release|-debug> <-x86|-x64> <dir1> [dir2] ...
-
-@echo off
-set TC_ARG_CMD=%~1
-shift
-set TC_ARG_TYPE=%~1
-shift
-set TC_ARG_ARCH=%~1
-shift
-
-
-:: Windows Driver Kit build number
-
-set TC_WINDDK_BUILD=7600.16385.1
-
-
-:: Check for spaces in the current directory path
-
-cd | find " " >NUL:
-
-if %ERRORLEVEL% == 0 (
- echo BuildDriver.cmd: error: MS Build does not support building of projects stored in a path containing spaces. >&2
- exit /B 1
-)
-
-
-:: Build options
-
-set TC_C_DEFINES=-D_WIN32 -DTC_WINDOWS_DRIVER
-set TC_C_FLAGS=-nologo -I..
-set TC_C_WARNING_LEVEL=-W4
-set TC_C_DISABLED_WARNINGS=-wd4057 -wd4100 -wd4127 -wd4152 -wd4201 -wd4701 -wd4702 -wd4706
-set TC_LIBRARIAN_FLAGS=-nologo
-set TC_LINKER_FLAGS=-nologo
-set TC_TEST_SIGN=0
-
-
-:: Windows Driver Kit root
-
-set TC_WINDDK_ROOT=%SYSTEMDRIVE%\WinDDK\%TC_WINDDK_BUILD%
-if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
-
-set TC_WINDDK_ROOT=%WINDDK_ROOT%\%TC_WINDDK_BUILD%
-if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
-
-set TC_WINDDK_ROOT=%WINDDK_ROOT%
-if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
-
-echo BuildDriver.cmd: error: Windows Driver Development Kit not found in the default directory. Set WINDDK_ROOT environment variable to point to your Windows DDK installation directory. >&2
-exit /B 1
-
-:ddk_found
-
-
-:: CPU architecture
-
-if "%TC_ARG_ARCH%"=="-x64" (
- set TC_BUILD_ARCH=x64 WNET
- set TC_BUILD_ARCH_DIR=amd64
- set TC_ARCH=x64
- set TC_ARCH_SUFFIX=-x64
- set TC_C_DISABLED_WARNINGS=%TC_C_DISABLED_WARNINGS% -wd4328 -wd4366
- set TC_LINKER_FLAGS=%TC_LINKER_FLAGS% -LTCG
- if defined TC_KERNEL_TEST_CERTIFICATE_NAME set TC_TEST_SIGN=1
-) else (
- set TC_BUILD_ARCH=WXP
- set TC_BUILD_ARCH_DIR=i386
- set TC_ARCH=x86
- set TC_ARCH_SUFFIX=
-)
-
-
-:: Build type
-
-if "%TC_ARG_TYPE%"=="-debug" (
- set TC_BUILD_TYPE=chk
- set TC_C_DEFINES=%TC_C_DEFINES% -DDEBUG -D_DEBUG
- set TC_BUILD_ALT_DIR=_driver_debug
- set TC_COPY_DIR="..\Debug"
-) else (
- set TC_BUILD_TYPE=fre
- set TC_BUILD_ALT_DIR=_driver_release
- set TC_COPY_DIR="..\Release"
- set TC_TEST_SIGN=0
-)
-
-
-:: WDK environment
-
-pushd .
-call %TC_WINDDK_ROOT%\bin\setenv %TC_WINDDK_ROOT% %TC_BUILD_TYPE% %TC_BUILD_ARCH% no_oacr || exit /B %errorlevel%
-popd
-
-:: set path to VC++ 2010
-IF EXIST "%programfiles(x86)%" (GOTO 64-Bit) ELSE (GOTO 32-Bit)
-
-:32-Bit
-@set "VCPATH=%programfiles%\Microsoft Visual Studio 10.0\"
-GOTO CONTINUE
-
-:64-Bit
-@set "VCPATH=%programfiles(x86)%\Microsoft Visual Studio 10.0\"
-GOTO CONTINUE
-
-:CONTINUE
-
-if "%TC_ARG_ARCH%"=="-x64" (
- @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin\amd64;%PATH%"
-) else (
- @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin;%PATH%"
-)
-
-:: Build
-
-if "%TC_ARG_CMD%"=="-rebuild" (set TC_BUILD_OPTS=-c -Z)
-
-pushd .
-:build_dirs
-
- if "%~1"=="" goto done
- cd /D "%~1" || exit /B %errorlevel%
-
- if "%TC_ARG_CMD%"=="-clean" (
- rd /s /q obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR% 2>NUL:
- rd /q obj%TC_BUILD_ALT_DIR% 2>NUL:
- ) else (
-
- set USER_C_FLAGS=%TC_C_FLAGS% %TC_C_DISABLED_WARNINGS% -FAcs -Fa%~1\obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\
- set MSC_WARNING_LEVEL=%TC_C_WARNING_LEVEL%
- set C_DEFINES=%TC_C_DEFINES%
- set RCOPTIONS=/I %MFC_INC_PATH%
- set LIBRARIAN_FLAGS=%TC_LIBRARIAN_FLAGS%
- set LINKER_FLAGS=%TC_LINKER_FLAGS%
- set BUILD_ALT_DIR=%TC_BUILD_ALT_DIR%
-
- build %TC_BUILD_OPTS% -w -nmake /S -nmake /C 2>build_errors.log 1>&2
-
- if errorlevel 1 (
- type build_errors.log
- type build_errors_asm.log 2>NUL:
- exit /B 1
- )
- del /q build_errors.log build_errors_asm.log build%BUILD_ALT_DIR%.* 2>NUL:
- )
-
- shift
-
-goto build_dirs
-:done
-popd
-
-
-if "%TC_ARG_CMD%"=="-clean" exit /B 0
-
-md "%TC_COPY_DIR%\Setup Files" >NUL: 2>NUL:
-copy /B /Y obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\veracrypt.sys "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL:
-
-if errorlevel 1 (
- echo BuildDriver.cmd: error: Cannot copy target. >&2
- exit /B 1
-)
-
-if %TC_TEST_SIGN% equ 1 (
- signtool sign /s "%TC_KERNEL_TEST_CERTIFICATE_STORE%" /n "%TC_KERNEL_TEST_CERTIFICATE_NAME%" "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL:
-
- if errorlevel 1 (
- echo BuildDriver.cmd: error: Cannot test-sign target. >&2
- exit /B 1
- )
-)
-
-exit /B 0
+::
+:: Derived from source code of TrueCrypt 7.1a, which is
+:: Copyright (c) 2008-2012 TrueCrypt Developers Association and which is governed
+:: by the TrueCrypt License 3.0.
+::
+:: Modifications and additions to the original source code (contained in this file)
+:: and all other portions of this file are Copyright (c) 2013-2016 IDRIX
+:: and are governed by the Apache License 2.0 the full text of which is
+:: contained in the file License.txt included in VeraCrypt binary and source
+:: code distribution packages.
+::
+
+:: Usage: BuildDriver <-build|-rebuild|-clean> <-release|-debug> <-x86|-x64> <dir1> [dir2] ...
+
+@echo off
+set TC_ARG_CMD=%~1
+shift
+set TC_ARG_TYPE=%~1
+shift
+set TC_ARG_ARCH=%~1
+shift
+
+
+:: Windows Driver Kit build number
+
+set TC_WINDDK_BUILD=7600.16385.1
+
+
+:: Check for spaces in the current directory path
+
+cd | find " " >NUL:
+
+if %ERRORLEVEL% == 0 (
+ echo BuildDriver.cmd: error: MS Build does not support building of projects stored in a path containing spaces. >&2
+ exit /B 1
+)
+
+
+:: Build options
+
+set TC_C_DEFINES=-D_WIN32 -DTC_WINDOWS_DRIVER
+set TC_C_FLAGS=-nologo -I..
+set TC_C_WARNING_LEVEL=-W4
+set TC_C_DISABLED_WARNINGS=-wd4057 -wd4100 -wd4127 -wd4152 -wd4201 -wd4701 -wd4702 -wd4706
+set TC_LIBRARIAN_FLAGS=-nologo
+set TC_LINKER_FLAGS=-nologo
+set TC_TEST_SIGN=0
+
+
+:: Windows Driver Kit root
+
+set TC_WINDDK_ROOT=%SYSTEMDRIVE%\WinDDK\%TC_WINDDK_BUILD%
+if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
+
+set TC_WINDDK_ROOT=%WINDDK_ROOT%\%TC_WINDDK_BUILD%
+if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
+
+set TC_WINDDK_ROOT=%WINDDK_ROOT%
+if exist "%TC_WINDDK_ROOT%\bin\setenv.bat" goto ddk_found
+
+echo BuildDriver.cmd: error: Windows Driver Development Kit not found in the default directory. Set WINDDK_ROOT environment variable to point to your Windows DDK installation directory. >&2
+exit /B 1
+
+:ddk_found
+
+
+:: CPU architecture
+
+if "%TC_ARG_ARCH%"=="-x64" (
+ set TC_BUILD_ARCH=x64 WNET
+ set TC_BUILD_ARCH_DIR=amd64
+ set TC_ARCH=x64
+ set TC_ARCH_SUFFIX=-x64
+ set TC_C_DISABLED_WARNINGS=%TC_C_DISABLED_WARNINGS% -wd4328 -wd4366
+ set TC_LINKER_FLAGS=%TC_LINKER_FLAGS% -LTCG
+ if defined TC_KERNEL_TEST_CERTIFICATE_NAME set TC_TEST_SIGN=1
+) else (
+ set TC_BUILD_ARCH=WXP
+ set TC_BUILD_ARCH_DIR=i386
+ set TC_ARCH=x86
+ set TC_ARCH_SUFFIX=
+)
+
+
+:: Build type
+
+if "%TC_ARG_TYPE%"=="-debug" (
+ set TC_BUILD_TYPE=chk
+ set TC_C_DEFINES=%TC_C_DEFINES% -DDEBUG -D_DEBUG
+ set TC_BUILD_ALT_DIR=_driver_debug
+ set TC_COPY_DIR="..\Debug"
+) else (
+ set TC_BUILD_TYPE=fre
+ set TC_BUILD_ALT_DIR=_driver_release
+ set TC_COPY_DIR="..\Release"
+ set TC_TEST_SIGN=0
+)
+
+
+:: WDK environment
+
+pushd .
+call %TC_WINDDK_ROOT%\bin\setenv %TC_WINDDK_ROOT% %TC_BUILD_TYPE% %TC_BUILD_ARCH% no_oacr || exit /B %errorlevel%
+popd
+
+:: set path to VC++ 2010
+IF EXIST "%programfiles(x86)%" (GOTO 64-Bit) ELSE (GOTO 32-Bit)
+
+:32-Bit
+@set "VCPATH=%programfiles%\Microsoft Visual Studio 10.0\"
+GOTO CONTINUE
+
+:64-Bit
+@set "VCPATH=%programfiles(x86)%\Microsoft Visual Studio 10.0\"
+GOTO CONTINUE
+
+:CONTINUE
+
+if "%TC_ARG_ARCH%"=="-x64" (
+ @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin\amd64;%PATH%"
+) else (
+ @set "PATH=%VCPATH%Common7\IDE;%VCPATH%VC\bin;%PATH%"
+)
+
+:: Build
+
+if "%TC_ARG_CMD%"=="-rebuild" (set TC_BUILD_OPTS=-c -Z)
+
+pushd .
+:build_dirs
+
+ if "%~1"=="" goto done
+ cd /D "%~1" || exit /B %errorlevel%
+
+ if "%TC_ARG_CMD%"=="-clean" (
+ rd /s /q obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR% 2>NUL:
+ rd /q obj%TC_BUILD_ALT_DIR% 2>NUL:
+ ) else (
+
+ set USER_C_FLAGS=%TC_C_FLAGS% %TC_C_DISABLED_WARNINGS% -FAcs -Fa%~1\obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\
+ set MSC_WARNING_LEVEL=%TC_C_WARNING_LEVEL%
+ set C_DEFINES=%TC_C_DEFINES%
+ set RCOPTIONS=/I %MFC_INC_PATH%
+ set LIBRARIAN_FLAGS=%TC_LIBRARIAN_FLAGS%
+ set LINKER_FLAGS=%TC_LINKER_FLAGS%
+ set BUILD_ALT_DIR=%TC_BUILD_ALT_DIR%
+
+ build %TC_BUILD_OPTS% -w -nmake /S -nmake /C 2>build_errors.log 1>&2
+
+ if errorlevel 1 (
+ type build_errors.log
+ type build_errors_asm.log 2>NUL:
+ exit /B 1
+ )
+ del /q build_errors.log build_errors_asm.log build%BUILD_ALT_DIR%.* 2>NUL:
+ )
+
+ shift
+
+goto build_dirs
+:done
+popd
+
+
+if "%TC_ARG_CMD%"=="-clean" exit /B 0
+
+md "%TC_COPY_DIR%\Setup Files" >NUL: 2>NUL:
+copy /B /Y obj%TC_BUILD_ALT_DIR%\%TC_BUILD_ARCH_DIR%\veracrypt.sys "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL:
+
+if errorlevel 1 (
+ echo BuildDriver.cmd: error: Cannot copy target. >&2
+ exit /B 1
+)
+
+if %TC_TEST_SIGN% equ 1 (
+ signtool sign /s "%TC_KERNEL_TEST_CERTIFICATE_STORE%" /n "%TC_KERNEL_TEST_CERTIFICATE_NAME%" "%TC_COPY_DIR%\Setup Files\veracrypt%TC_ARCH_SUFFIX%.sys" >NUL:
+
+ if errorlevel 1 (
+ echo BuildDriver.cmd: error: Cannot test-sign target. >&2
+ exit /B 1
+ )
+)
+
+exit /B 0
diff --git a/src/Driver/DriveFilter.c b/src/Driver/DriveFilter.c
index a3d76b3..66f4981 100644
--- a/src/Driver/DriveFilter.c
+++ b/src/Driver/DriveFilter.c
@@ -268,11 +268,9 @@ static void ComputeBootLoaderFingerprint(PDEVICE_OBJECT LowerDeviceObject, byte*
#endif
WHIRLPOOL_add (ioBuffer, TC_BOOT_SECTOR_PIM_VALUE_OFFSET, &whirlpool);
WHIRLPOOL_add (ioBuffer + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH, (TC_BOOT_SECTOR_USER_CONFIG_OFFSET - (TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)), &whirlpool);
- WHIRLPOOL_add (ioBuffer + TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1, (TC_MAX_MBR_BOOT_CODE_SIZE - (TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1)), &whirlpool);
sha512_hash (ioBuffer, TC_BOOT_SECTOR_PIM_VALUE_OFFSET, &sha2);
sha512_hash (ioBuffer + TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH, (TC_BOOT_SECTOR_USER_CONFIG_OFFSET - (TC_BOOT_SECTOR_USER_MESSAGE_OFFSET + TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH)), &sha2);
- sha512_hash (ioBuffer + TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1, (TC_MAX_MBR_BOOT_CODE_SIZE - (TC_BOOT_SECTOR_USER_CONFIG_OFFSET + 1)), &sha2);
// we has the reste of the bootloader, 512 bytes at a time
offset.QuadPart = TC_SECTOR_SIZE_BIOS;
@@ -424,7 +422,16 @@ static NTSTATUS MountDrive (DriveFilterExtension *Extension, Password *password,
Extension->Queue.CryptoInfo->EncryptedAreaStart.Value = BootArgs.DecoySystemPartitionStart;
if (Extension->Queue.CryptoInfo->VolumeSize.Value > hiddenPartitionOffset - BootArgs.DecoySystemPartitionStart)
+ {
+ // Erase boot loader scheduled keys
+ if (mappedCryptoInfo)
+ {
+ burn (mappedCryptoInfo, BootArgs.CryptoInfoLength);
+ MmUnmapIoSpace (mappedCryptoInfo, BootArgs.CryptoInfoLength);
+ BootArgs.CryptoInfoLength = 0;
+ }
TC_THROW_FATAL_EXCEPTION;
+ }
Dump ("RemappedAreaOffset = %I64d\n", Extension->Queue.RemappedAreaOffset);
Dump ("RemappedAreaDataUnitOffset = %I64d\n", Extension->Queue.RemappedAreaDataUnitOffset);
diff --git a/src/Driver/Driver.rc b/src/Driver/Driver.rc
index 305762c..a7de74b 100644
--- a/src/Driver/Driver.rc
+++ b/src/Driver/Driver.rc
@@ -1,101 +1,101 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,13,0
- PRODUCTVERSION 1,18,13,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x3L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "IDRIX"
- VALUE "FileDescription", "VeraCrypt Driver"
- VALUE "FileVersion", "1.18"
- VALUE "LegalTrademarks", "VeraCrypt"
- VALUE "OriginalFilename", "veracrypt.sys"
- VALUE "ProductName", "VeraCrypt"
- VALUE "ProductVersion", "1.18"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,19,4,0
+ PRODUCTVERSION 1,19,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x3L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "IDRIX"
+ VALUE "FileDescription", "VeraCrypt Driver"
+ VALUE "FileVersion", "1.19"
+ VALUE "LegalTrademarks", "VeraCrypt"
+ VALUE "OriginalFilename", "veracrypt.sys"
+ VALUE "ProductName", "VeraCrypt"
+ VALUE "ProductVersion", "1.19"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Driver/Driver.vcproj b/src/Driver/Driver.vcproj
index 4c474c3..8d28d75 100644
--- a/src/Driver/Driver.vcproj
+++ b/src/Driver/Driver.vcproj
@@ -1,398 +1,398 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Driver"
- ProjectGUID="{EF5EF444-18D0-40D7-8DFA-775EC4448602}"
- RootNamespace="Driver"
- Keyword="MakeFileProj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="echo ------ Building veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -build -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Building veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -build -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="echo ------ Rebuilding veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -rebuild -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Rebuilding veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="echo ------ Cleaning veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -clean -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Cleaning veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -clean -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output=""
- PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="echo ------ Building veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -build -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Building veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -build -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="echo ------ Rebuilding veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -rebuild -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Rebuilding veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -rebuild -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="echo ------ Cleaning veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -clean -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Cleaning veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -clean -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output=""
- PreprocessorDefinitions="TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Release x86|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="BuildDriver.cmd -build -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="BuildDriver.cmd -rebuild -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="BuildDriver.cmd -clean -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output=""
- PreprocessorDefinitions="TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Debug x86|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -build -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="BuildDriver.cmd -clean -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output="$(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe"
- PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Release x64|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="BuildDriver.cmd -build -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="BuildDriver.cmd -rebuild -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="BuildDriver.cmd -clean -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output=""
- PreprocessorDefinitions="TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- <Configuration
- Name="Debug x64|Win32"
- OutputDirectory="$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="0"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- >
- <Tool
- Name="VCNMakeTool"
- BuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -build -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- ReBuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- CleanCommandLine="BuildDriver.cmd -clean -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
- Output="$(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe"
- PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
- IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
- ForcedIncludes=""
- AssemblySearchPath=""
- ForcedUsingAssemblies=""
- CompileAsManaged=""
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\DriveFilter.c"
- >
- </File>
- <File
- RelativePath=".\DumpFilter.c"
- >
- </File>
- <File
- RelativePath=".\EncryptedIoQueue.c"
- >
- </File>
- <File
- RelativePath=".\Ntdriver.c"
- >
- </File>
- <File
- RelativePath=".\Ntvol.c"
- >
- </File>
- <File
- RelativePath=".\VolumeFilter.c"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\Cache.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.c"
- >
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.c"
- >
- </File>
- <File
- RelativePath="..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.c"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.c"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.c"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.c"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.c"
- >
- </File>
- </Filter>
- <Filter
- Name="Crypto"
- >
- <File
- RelativePath="..\Crypto\Aes_hw_cpu.asm"
- >
- </File>
- <File
- RelativePath="..\Crypto\Aes_x64.asm"
- >
- </File>
- <File
- RelativePath="..\Crypto\Aes_x86.asm"
- >
- </File>
- <File
- RelativePath="..\Crypto\Aeskey.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Aestab.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Rmd160.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Serpent.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Sha2.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Twofish.c"
- >
- </File>
- <File
- RelativePath="..\Crypto\Whirlpool.c"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\Common\Apidrvr.h"
- >
- </File>
- <File
- RelativePath="..\Common\Cache.h"
- >
- </File>
- <File
- RelativePath="..\Common\Common.h"
- >
- </File>
- <File
- RelativePath=".\DriveFilter.h"
- >
- </File>
- <File
- RelativePath=".\DumpFilter.h"
- >
- </File>
- <File
- RelativePath=".\EncryptedIoQueue.h"
- >
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.h"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.h"
- >
- </File>
- <File
- RelativePath=".\Ntdriver.h"
- >
- </File>
- <File
- RelativePath=".\Ntvol.h"
- >
- </File>
- <File
- RelativePath=".\resource.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tcdefs.h"
- >
- </File>
- <File
- RelativePath=".\VolumeFilter.h"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.h"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath=".\Driver.rc"
- >
- </File>
- </Filter>
- <Filter
- Name="Build Files"
- >
- <File
- RelativePath=".\BuildDriver.cmd"
- >
- </File>
- <File
- RelativePath=".\Makefile"
- >
- </File>
- <File
- RelativePath=".\Sources"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\Makefile"
- >
- </File>
- <File
- RelativePath="..\Common\Sources"
- >
- </File>
- </Filter>
- <Filter
- Name="Crypto"
- >
- <File
- RelativePath="..\Crypto\Makefile"
- >
- </File>
- <File
- RelativePath="..\Crypto\Makefile.inc"
- >
- </File>
- <File
- RelativePath="..\Crypto\Sources"
- >
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Driver"
+ ProjectGUID="{EF5EF444-18D0-40D7-8DFA-775EC4448602}"
+ RootNamespace="Driver"
+ Keyword="MakeFileProj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="echo ------ Building veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -build -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Building veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -build -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="echo ------ Rebuilding veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -rebuild -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Rebuilding veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="echo ------ Cleaning veracrypt.sys: Debug x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -clean -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Cleaning veracrypt.sys: Debug x64 ------&#x0D;&#x0A;BuildDriver.cmd -clean -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output=""
+ PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="echo ------ Building veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -build -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Building veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -build -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="echo ------ Rebuilding veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -rebuild -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Rebuilding veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -rebuild -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="echo ------ Cleaning veracrypt.sys: Release x86 ------&#x0D;&#x0A;cmd.exe /c BuildDriver.cmd -clean -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;&#x0D;&#x0A;if errorlevel 1 exit %errorlevel%&#x0D;&#x0A;echo.&#x0D;&#x0A;echo ------ Cleaning veracrypt.sys: Release x64 ------&#x0D;&#x0A;BuildDriver.cmd -clean -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output=""
+ PreprocessorDefinitions="TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release x86|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="BuildDriver.cmd -build -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="BuildDriver.cmd -rebuild -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="BuildDriver.cmd -clean -release -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output=""
+ PreprocessorDefinitions="TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug x86|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -build -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="BuildDriver.cmd -clean -debug -x86 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output="$(ProjectDir)\obj_driver_debug\i386\VeraCrypt.exe"
+ PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release x64|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="BuildDriver.cmd -build -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="BuildDriver.cmd -rebuild -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="BuildDriver.cmd -clean -release -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output=""
+ PreprocessorDefinitions="TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug x64|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="0"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ >
+ <Tool
+ Name="VCNMakeTool"
+ BuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -build -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ ReBuildCommandLine="if exist $(SolutionDir)\Mount\Debug\VeraCrypt.exe ( copy $(SolutionDir)\Mount\Debug\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL:&#x0D;&#x0A;) else ( copy $(SolutionDir)\Mount\Release\VeraCrypt.exe $(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe &gt;NUL: )&#x0D;&#x0A;&#x0D;&#x0A;BuildDriver.cmd -rebuild -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ CleanCommandLine="BuildDriver.cmd -clean -debug -x64 &quot;$(SolutionDir)\Common&quot; &quot;$(SolutionDir)\Crypto&quot; &quot;$(ProjectDir)&quot;"
+ Output="$(ProjectDir)\obj_driver_debug\amd64\VeraCrypt.exe"
+ PreprocessorDefinitions="DEBUG;_DEBUG;TC_WINDOWS_DRIVER"
+ IncludeSearchPath="&quot;$(ProjectDir)&quot;;&quot;$(SolutionDir)&quot;;&quot;$(SolutionDir)\Common&quot;;&quot;$(SolutionDir)\Crypto&quot;;&quot;$(WINDDK_ROOT)\inc\ddk&quot;;&quot;$(WINDDK_ROOT)\inc\api&quot;"
+ ForcedIncludes=""
+ AssemblySearchPath=""
+ ForcedUsingAssemblies=""
+ CompileAsManaged=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\DriveFilter.c"
+ >
+ </File>
+ <File
+ RelativePath=".\DumpFilter.c"
+ >
+ </File>
+ <File
+ RelativePath=".\EncryptedIoQueue.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Ntdriver.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Ntvol.c"
+ >
+ </File>
+ <File
+ RelativePath=".\VolumeFilter.c"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\Cache.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Crypto"
+ >
+ <File
+ RelativePath="..\Crypto\Aes_hw_cpu.asm"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Aes_x64.asm"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Aes_x86.asm"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Aeskey.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Aestab.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Rmd160.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Serpent.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Sha2.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Twofish.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Whirlpool.c"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Common\Apidrvr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cache.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.h"
+ >
+ </File>
+ <File
+ RelativePath=".\DriveFilter.h"
+ >
+ </File>
+ <File
+ RelativePath=".\DumpFilter.h"
+ >
+ </File>
+ <File
+ RelativePath=".\EncryptedIoQueue.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Ntdriver.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Ntvol.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tcdefs.h"
+ >
+ </File>
+ <File
+ RelativePath=".\VolumeFilter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\Driver.rc"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Build Files"
+ >
+ <File
+ RelativePath=".\BuildDriver.cmd"
+ >
+ </File>
+ <File
+ RelativePath=".\Makefile"
+ >
+ </File>
+ <File
+ RelativePath=".\Sources"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\Makefile"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Sources"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Crypto"
+ >
+ <File
+ RelativePath="..\Crypto\Makefile"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Makefile.inc"
+ >
+ </File>
+ <File
+ RelativePath="..\Crypto\Sources"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Driver/Driver.vcxproj b/src/Driver/Driver.vcxproj
index bc95ffe..f534a0e 100644
--- a/src/Driver/Driver.vcxproj
+++ b/src/Driver/Driver.vcxproj
@@ -193,6 +193,8 @@ BuildDriver.cmd -rebuild -debug -x64 "$(SolutionDir)\Common" "$(SolutionDir)\Cry
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\Crypto\Camellia.c" />
+ <ClCompile Include="..\Crypto\SerpentFast.c" />
+ <ClCompile Include="..\Crypto\SerpentFast_simd.cpp" />
<ClCompile Include="DriveFilter.c" />
<ClCompile Include="DumpFilter.c" />
<ClCompile Include="EncryptedIoQueue.c" />
@@ -213,7 +215,6 @@ BuildDriver.cmd -rebuild -debug -x64 "$(SolutionDir)\Common" "$(SolutionDir)\Cry
<ClCompile Include="..\Crypto\Aeskey.c" />
<ClCompile Include="..\Crypto\Aestab.c" />
<ClCompile Include="..\Crypto\Rmd160.c" />
- <ClCompile Include="..\Crypto\Serpent.c" />
<ClCompile Include="..\Crypto\Sha2.c" />
<ClCompile Include="..\Crypto\Twofish.c" />
<ClCompile Include="..\Crypto\Whirlpool.c" />
diff --git a/src/Driver/Driver.vcxproj.filters b/src/Driver/Driver.vcxproj.filters
index 73f4595..dfb7eda 100644
--- a/src/Driver/Driver.vcxproj.filters
+++ b/src/Driver/Driver.vcxproj.filters
@@ -90,9 +90,6 @@
<ClCompile Include="..\Crypto\Rmd160.c">
<Filter>Source Files\Crypto</Filter>
</ClCompile>
- <ClCompile Include="..\Crypto\Serpent.c">
- <Filter>Source Files\Crypto</Filter>
- </ClCompile>
<ClCompile Include="..\Crypto\Sha2.c">
<Filter>Source Files\Crypto</Filter>
</ClCompile>
@@ -105,6 +102,12 @@
<ClCompile Include="..\Crypto\Camellia.c">
<Filter>Source Files\Crypto</Filter>
</ClCompile>
+ <ClCompile Include="..\Crypto\SerpentFast.c">
+ <Filter>Source Files\Crypto</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Crypto\SerpentFast_simd.cpp">
+ <Filter>Source Files\Crypto</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\Crypto\Aes_hw_cpu.asm">
diff --git a/src/Driver/Ntdriver.c b/src/Driver/Ntdriver.c
index 384fca9..eaa8fa8 100644
--- a/src/Driver/Ntdriver.c
+++ b/src/Driver/Ntdriver.c
@@ -214,7 +214,7 @@ NTSTATUS TCDispatchQueueIRP (PDEVICE_OBJECT DeviceObject, PIRP Irp)
PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation (Irp);
NTSTATUS ntStatus;
-#ifdef _DEBUG
+#if defined(_DEBUG) || defined (_DEBUG_TRACE)
if (irpSp->MajorFunction == IRP_MJ_DEVICE_CONTROL && (Extension->bRootDevice || Extension->IsVolumeDevice))
{
switch (irpSp->Parameters.DeviceIoControl.IoControlCode)
@@ -896,6 +896,15 @@ NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION
}
break;
+
+ case IOCTL_UNKNOWN_WINDOWS10_EFS_ACCESS:
+ // This undocumented IOCTL is sent when handling EFS data
+ // We must return success otherwise EFS operations fail
+ Dump ("ProcessVolumeDeviceControlIrp (unknown IOCTL 0x%.8X, OutputBufferLength = %d). Returning fake success\n", irpSp->Parameters.DeviceIoControl.IoControlCode, (int) irpSp->Parameters.DeviceIoControl.OutputBufferLength);
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ Irp->IoStatus.Information = 0;
+
+ break;
default:
Dump ("ProcessVolumeDeviceControlIrp (unknown code 0x%.8X)\n", irpSp->Parameters.DeviceIoControl.IoControlCode);
return TCCompleteIrp (Irp, STATUS_INVALID_DEVICE_REQUEST, 0);
@@ -2071,7 +2080,7 @@ void TCGetDosNameFromNumber (LPWSTR dosname,int cbDosName, int nDriveNo, DeviceN
RtlStringCbCatW (dosname, cbDosName, tmp);
}
-#ifdef _DEBUG
+#if defined(_DEBUG) || defined (_DEBUG_TRACE)
LPWSTR TCTranslateCode (ULONG ulCode)
{
switch (ulCode)
diff --git a/src/ExpandVolume/ExpandVolume.c b/src/ExpandVolume/ExpandVolume.c
index 2235af1..82c4207 100644
--- a/src/ExpandVolume/ExpandVolume.c
+++ b/src/ExpandVolume/ExpandVolume.c
@@ -837,7 +837,7 @@ static int ExpandVolume (HWND hwndDlg, wchar_t *lpszVolume, Password *pVolumePas
PCRYPTO_INFO dummyInfo = NULL;
LARGE_INTEGER hiddenOffset;
- nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, newDataAreaSize, !backupHeader, backupHeader, FALSE);
+ nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, newDataAreaSize, !backupHeader, backupHeader);
if (nStatus != ERR_SUCCESS)
goto error;
diff --git a/src/ExpandVolume/ExpandVolume.rc b/src/ExpandVolume/ExpandVolume.rc
index fb3d9db..06ec849 100644
--- a/src/ExpandVolume/ExpandVolume.rc
+++ b/src/ExpandVolume/ExpandVolume.rc
@@ -1,298 +1,298 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-#include "..\\common\\resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_SIZE_DIALOG DIALOGEX 0, 0, 376, 271
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Expander"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- EDITTEXT IDC_SIZEBOX,30,102,109,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
- CONTROL "&KB",IDC_KB,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,169,105,38,10
- CONTROL "&MB",IDC_MB,"Button",BS_AUTORADIOBUTTON,209,105,38,10
- CONTROL "&GB",IDC_GB,"Button",BS_AUTORADIOBUTTON,248,105,38,10
- CONTROL "&TB",IDC_TB,"Button",BS_AUTORADIOBUTTON,288,105,38,10
- CONTROL "Fill new space with random data",IDC_INIT_NEWSPACE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,127,118,10
- DEFPUSHBUTTON "Continue",IDOK,15,238,84,18
- PUSHBUTTON "Cancel",IDCANCEL,277,238,84,18
- LTEXT "Help Text",IDC_BOX_HELP,15,165,346,58,0,WS_EX_CLIENTEDGE
- GROUPBOX "Enter new volume size",IDC_STATIC,15,83,346,63
- RTEXT "Current size: ",IDT_CURRENT_SIZE,27,42,46,8
- CONTROL "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,42,275,8,WS_EX_TRANSPARENT
- RTEXT "New size: ",IDT_NEW_SIZE,28,54,45,8
- LTEXT "",IDC_EXPAND_VOLUME_NEWSIZE,80,54,275,8,0,WS_EX_TRANSPARENT
- RTEXT "Volume: ",IDT_VOL_NAME,31,18,42,8
- GROUPBOX "",IDC_STATIC,15,9,346,59
- CONTROL "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,18,275,8,WS_EX_TRANSPARENT
- RTEXT "File system: ",IDT_FILE_SYS,31,30,42,8
- CONTROL "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,30,275,8,WS_EX_TRANSPARENT
-END
-
-IDD_MOUNT_DLG DIALOGEX 0, 0, 376, 271
-STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Expander"
-MENU IDR_MENU
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_VOLUME,56,192,212,74,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "Select &File...",IDC_SELECT_FILE,276,192,84,14
- PUSHBUTTON "Select D&evice...",IDC_SELECT_DEVICE,276,211,84,14
- DEFPUSHBUTTON "Mount",IDOK,8,243,84,18,WS_GROUP
- PUSHBUTTON "E&xit",IDC_EXIT,284,243,84,18,WS_GROUP
- CONTROL 112,IDC_LOGO,"Static",SS_BITMAP | SS_NOTIFY | WS_BORDER,16,192,27,31
- GROUPBOX "Volume",IDT_VOLUME,8,179,360,53
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,1,0,373,147
- GROUPBOX "",IDC_STATIC,282,238,88,24
- GROUPBOX "",IDC_STATIC,6,238,88,24
- GROUPBOX "",IDC_STATIC,1,147,373,123,BS_CENTER
- LTEXT "1. Select the VeraCrypt volume to be expanded\n2. Click the 'Mount' button",IDC_STATIC,15,156,293,21
- LTEXT "Static",IDC_INFOEXPAND,8,6,361,134,SS_NOPREFIX | SS_SUNKEN,WS_EX_STATICEDGE
-END
-
-IDD_PASSWORD_DLG DIALOGEX 0, 0, 322, 107
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "Enter VeraCrypt Volume Password"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_PASSWORD,69,8,166,14,ES_PASSWORD | ES_AUTOHSCROLL
- COMBOBOX IDC_PKCS5_PRF_ID,69,26,86,90,CBS_DROPDOWNLIST | WS_TABSTOP
- CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,28,76,10
- EDITTEXT IDC_PIM,69,43,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,49,97,10
- CONTROL "Cache passwords and keyfil&es in memory",IDC_CACHE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,62,153,10
- CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,75,83,10
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,88,83,11
- PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,171,86,64,14
- PUSHBUTTON "Mount Opti&ons...",IDC_MOUNT_OPTIONS,243,86,64,14
- DEFPUSHBUTTON "OK",IDOK,243,8,64,14
- PUSHBUTTON "Cancel",IDCANCEL,243,25,64,14
- RTEXT "Password:",IDT_PASSWORD,0,10,65,13
- RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,27,65,13
- RTEXT "Volume PIM:",IDT_PIM,0,46,65,13,NOT WS_VISIBLE
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,115,46,189,8,NOT WS_VISIBLE
-END
-
-IDD_EXPAND_PROGRESS_DLG DIALOGEX 0, 0, 376, 283
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Expander"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- RTEXT "Current size: ",IDT_CURRENT_SIZE,27,40,46,8
- CONTROL "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,40,275,8,WS_EX_TRANSPARENT
- RTEXT "New size: ",IDT_NEW_SIZE,28,52,45,8
- LTEXT "",IDC_EXPAND_VOLUME_NEWSIZE,80,52,275,8,0,WS_EX_TRANSPARENT
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,22,96,332,12
- RTEXT "",IDC_TIMEREMAIN,275,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_WRITESPEED,178,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- LTEXT "",IDC_BYTESWRITTEN,77,114,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "Done",IDT_DONE,53,115,22,8
- RTEXT "Speed",IDT_SPEED,142,115,34,8
- RTEXT "Left",IDT_LEFT,248,115,25,8
- GROUPBOX "",IDC_STATIC,15,84,346,49
- RTEXT "Volume: ",IDT_VOL_NAME,31,16,42,8
- GROUPBOX "",IDC_STATIC,15,7,346,72
- CONTROL "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,16,275,8,WS_EX_TRANSPARENT
- DEFPUSHBUTTON "Continue",IDOK,15,247,84,18
- PUSHBUTTON "Cancel",IDCANCEL,277,247,84,18
- EDITTEXT IDC_BOX_STATUS,15,176,346,66,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL
- CONTROL "",IDC_EXPAND_VOLUME_INITSPACE,"Static",SS_SIMPLE | WS_GROUP,80,64,275,8,WS_EX_TRANSPARENT
- RTEXT "Fill new space: ",IDT_INIT_SPACE,20,64,53,8
- RTEXT "File system: ",IDT_FILE_SYS,31,28,42,8
- CONTROL "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,28,275,8,WS_EX_TRANSPARENT
- RTEXT "Random Pool: ",IDT_RANDOM_POOL2,20,144,53,8
- CONTROL "",IDC_RANDOM_BYTES,"Static",SS_SIMPLE | WS_GROUP,80,144,149,8,WS_EX_TRANSPARENT
- CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,142,125,12
- GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,20,156,214,18
- CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,31,165,193,6
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_SIZE_DIALOG, DIALOG
- BEGIN
- LEFTMARGIN, 15
- RIGHTMARGIN, 361
- VERTGUIDE, 30
- TOPMARGIN, 14
- BOTTOMMARGIN, 256
- END
-
- IDD_MOUNT_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 369
- VERTGUIDE, 8
- BOTTOMMARGIN, 269
- END
-
- IDD_PASSWORD_DLG, DIALOG
- BEGIN
- BOTTOMMARGIN, 102
- END
-
- IDD_EXPAND_PROGRESS_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 361
- VERTGUIDE, 15
- VERTGUIDE, 73
- VERTGUIDE, 80
- VERTGUIDE, 355
- TOPMARGIN, 9
- BOTTOMMARGIN, 268
- HORZGUIDE, 176
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HEADER
-//
-
-IDR_MOUNT_RSRC_HEADER HEADER "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,13,0
- PRODUCTVERSION 1,18,13,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "IDRIX"
- VALUE "FileDescription", "VeraCrypt Expander"
- VALUE "FileVersion", "1.18"
- VALUE "LegalTrademarks", "VeraCrypt"
- VALUE "OriginalFilename", "VeraCryptExpander.exe"
- VALUE "ProductName", "VeraCrypt"
- VALUE "ProductVersion", "1.18"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "#include ""..\\\\common\\\\resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#include ""..\\\\common\\\\common.rc""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_LOGO_96DPI BITMAP "Logo_96dpi.bmp"
-IDB_LOGO_288DPI BITMAP "Logo_288dpi.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU MENUEX
-BEGIN
- MENUITEM "About", IDM_ABOUT,MFT_STRING,MFS_ENABLED
- MENUITEM "Homepage", IDM_HOMEPAGE,MFT_STRING | MFT_RIGHTJUSTIFY,MFS_ENABLED
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_UACSTRING "VeraCrypt Expander"
-END
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#include "..\\common\\common.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+#include "..\\common\\resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_SIZE_DIALOG DIALOGEX 0, 0, 376, 271
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Expander"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ EDITTEXT IDC_SIZEBOX,30,102,109,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
+ CONTROL "&KB",IDC_KB,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,169,105,38,10
+ CONTROL "&MB",IDC_MB,"Button",BS_AUTORADIOBUTTON,209,105,38,10
+ CONTROL "&GB",IDC_GB,"Button",BS_AUTORADIOBUTTON,248,105,38,10
+ CONTROL "&TB",IDC_TB,"Button",BS_AUTORADIOBUTTON,288,105,38,10
+ CONTROL "Fill new space with random data",IDC_INIT_NEWSPACE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,30,127,118,10
+ DEFPUSHBUTTON "Continue",IDOK,15,238,84,18
+ PUSHBUTTON "Cancel",IDCANCEL,277,238,84,18
+ LTEXT "Help Text",IDC_BOX_HELP,15,165,346,58,0,WS_EX_CLIENTEDGE
+ GROUPBOX "Enter new volume size",IDC_STATIC,15,83,346,63
+ RTEXT "Current size: ",IDT_CURRENT_SIZE,27,42,46,8
+ CONTROL "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,42,275,8,WS_EX_TRANSPARENT
+ RTEXT "New size: ",IDT_NEW_SIZE,28,54,45,8
+ LTEXT "",IDC_EXPAND_VOLUME_NEWSIZE,80,54,275,8,0,WS_EX_TRANSPARENT
+ RTEXT "Volume: ",IDT_VOL_NAME,31,18,42,8
+ GROUPBOX "",IDC_STATIC,15,9,346,59
+ CONTROL "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,18,275,8,WS_EX_TRANSPARENT
+ RTEXT "File system: ",IDT_FILE_SYS,31,30,42,8
+ CONTROL "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,30,275,8,WS_EX_TRANSPARENT
+END
+
+IDD_MOUNT_DLG DIALOGEX 0, 0, 376, 271
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Expander"
+MENU IDR_MENU
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_VOLUME,56,192,212,74,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Select &File...",IDC_SELECT_FILE,276,192,84,14
+ PUSHBUTTON "Select D&evice...",IDC_SELECT_DEVICE,276,211,84,14
+ DEFPUSHBUTTON "Mount",IDOK,8,243,84,18,WS_GROUP
+ PUSHBUTTON "E&xit",IDC_EXIT,284,243,84,18,WS_GROUP
+ CONTROL 112,IDC_LOGO,"Static",SS_BITMAP | SS_NOTIFY | WS_BORDER,16,192,27,31
+ GROUPBOX "Volume",IDT_VOLUME,8,179,360,53
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,1,0,373,147
+ GROUPBOX "",IDC_STATIC,282,238,88,24
+ GROUPBOX "",IDC_STATIC,6,238,88,24
+ GROUPBOX "",IDC_STATIC,1,147,373,123,BS_CENTER
+ LTEXT "1. Select the VeraCrypt volume to be expanded\n2. Click the 'Mount' button",IDC_STATIC,15,156,293,21
+ LTEXT "Static",IDC_INFOEXPAND,8,6,361,134,SS_NOPREFIX | SS_SUNKEN,WS_EX_STATICEDGE
+END
+
+IDD_PASSWORD_DLG DIALOGEX 0, 0, 322, 107
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
+CAPTION "Enter VeraCrypt Volume Password"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_PASSWORD,69,8,166,14,ES_PASSWORD | ES_AUTOHSCROLL
+ COMBOBOX IDC_PKCS5_PRF_ID,69,26,86,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,28,76,10
+ EDITTEXT IDC_PIM,69,43,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,49,97,10
+ CONTROL "Cache passwords and keyfil&es in memory",IDC_CACHE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,62,153,10
+ CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,75,83,10
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,88,83,11
+ PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,171,86,64,14
+ PUSHBUTTON "Mount Opti&ons...",IDC_MOUNT_OPTIONS,243,86,64,14
+ DEFPUSHBUTTON "OK",IDOK,243,8,64,14
+ PUSHBUTTON "Cancel",IDCANCEL,243,25,64,14
+ RTEXT "Password:",IDT_PASSWORD,0,10,65,13
+ RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,27,65,13
+ RTEXT "Volume PIM:",IDT_PIM,0,46,65,13,NOT WS_VISIBLE
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,115,46,189,8,NOT WS_VISIBLE
+END
+
+IDD_EXPAND_PROGRESS_DLG DIALOGEX 0, 0, 376, 283
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Expander"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ RTEXT "Current size: ",IDT_CURRENT_SIZE,27,40,46,8
+ CONTROL "",IDC_EXPAND_VOLUME_OLDSIZE,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,80,40,275,8,WS_EX_TRANSPARENT
+ RTEXT "New size: ",IDT_NEW_SIZE,28,52,45,8
+ LTEXT "",IDC_EXPAND_VOLUME_NEWSIZE,80,52,275,8,0,WS_EX_TRANSPARENT
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,22,96,332,12
+ RTEXT "",IDC_TIMEREMAIN,275,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_WRITESPEED,178,114,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ LTEXT "",IDC_BYTESWRITTEN,77,114,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "Done",IDT_DONE,53,115,22,8
+ RTEXT "Speed",IDT_SPEED,142,115,34,8
+ RTEXT "Left",IDT_LEFT,248,115,25,8
+ GROUPBOX "",IDC_STATIC,15,84,346,49
+ RTEXT "Volume: ",IDT_VOL_NAME,31,16,42,8
+ GROUPBOX "",IDC_STATIC,15,7,346,72
+ CONTROL "",IDC_EXPAND_VOLUME_NAME,"Static",SS_SIMPLE | WS_GROUP,80,16,275,8,WS_EX_TRANSPARENT
+ DEFPUSHBUTTON "Continue",IDOK,15,247,84,18
+ PUSHBUTTON "Cancel",IDCANCEL,277,247,84,18
+ EDITTEXT IDC_BOX_STATUS,15,176,346,66,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_WANTRETURN | WS_VSCROLL
+ CONTROL "",IDC_EXPAND_VOLUME_INITSPACE,"Static",SS_SIMPLE | WS_GROUP,80,64,275,8,WS_EX_TRANSPARENT
+ RTEXT "Fill new space: ",IDT_INIT_SPACE,20,64,53,8
+ RTEXT "File system: ",IDT_FILE_SYS,31,28,42,8
+ CONTROL "",IDC_EXPAND_FILE_SYSTEM,"Static",SS_SIMPLE | WS_GROUP,80,28,275,8,WS_EX_TRANSPARENT
+ RTEXT "Random Pool: ",IDT_RANDOM_POOL2,20,144,53,8
+ CONTROL "",IDC_RANDOM_BYTES,"Static",SS_SIMPLE | WS_GROUP,80,144,149,8,WS_EX_TRANSPARENT
+ CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,236,142,125,12
+ GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,20,156,214,18
+ CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,31,165,193,6
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_SIZE_DIALOG, DIALOG
+ BEGIN
+ LEFTMARGIN, 15
+ RIGHTMARGIN, 361
+ VERTGUIDE, 30
+ TOPMARGIN, 14
+ BOTTOMMARGIN, 256
+ END
+
+ IDD_MOUNT_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 369
+ VERTGUIDE, 8
+ BOTTOMMARGIN, 269
+ END
+
+ IDD_PASSWORD_DLG, DIALOG
+ BEGIN
+ BOTTOMMARGIN, 102
+ END
+
+ IDD_EXPAND_PROGRESS_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 361
+ VERTGUIDE, 15
+ VERTGUIDE, 73
+ VERTGUIDE, 80
+ VERTGUIDE, 355
+ TOPMARGIN, 9
+ BOTTOMMARGIN, 268
+ HORZGUIDE, 176
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HEADER
+//
+
+IDR_MOUNT_RSRC_HEADER HEADER "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,19,4,0
+ PRODUCTVERSION 1,19,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "IDRIX"
+ VALUE "FileDescription", "VeraCrypt Expander"
+ VALUE "FileVersion", "1.19"
+ VALUE "LegalTrademarks", "VeraCrypt"
+ VALUE "OriginalFilename", "VeraCryptExpander.exe"
+ VALUE "ProductName", "VeraCrypt"
+ VALUE "ProductVersion", "1.19"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "#include ""..\\\\common\\\\resource.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""..\\\\common\\\\common.rc""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_LOGO_96DPI BITMAP "Logo_96dpi.bmp"
+IDB_LOGO_288DPI BITMAP "Logo_288dpi.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MENU MENUEX
+BEGIN
+ MENUITEM "About", IDM_ABOUT,MFT_STRING,MFS_ENABLED
+ MENUITEM "Homepage", IDM_HOMEPAGE,MFT_STRING | MFT_RIGHTJUSTIFY,MFS_ENABLED
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_UACSTRING "VeraCrypt Expander"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "..\\common\\common.rc"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/ExpandVolume/ExpandVolume.vcproj b/src/ExpandVolume/ExpandVolume.vcproj
index 37b6f46..4ca6c9d 100644
--- a/src/ExpandVolume/ExpandVolume.vcproj
+++ b/src/ExpandVolume/ExpandVolume.vcproj
@@ -1,977 +1,977 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="ExpandVolume"
- ProjectGUID="{9715FF1D-599B-4BBC-AD96-BEF6E08FF827}"
- RootNamespace="ExpandVolume"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- CommandLine=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
- PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- ExceptionHandling="1"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- EnableFunctionLevelLinking="false"
- UsePrecompiledHeader="0"
- BrowseInformation="0"
- BrowseInformationFile=""
- WarningLevel="3"
- DebugInformationFormat="4"
- DisableSpecificWarnings="4311"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptExpander.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/ExpandVolume.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="VeraCryptExpander.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptExpander.exe &quot;..\Debug\Setup Files&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- CommandLine=""
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
- PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- ExceptionHandling="1"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- EnableFunctionLevelLinking="false"
- UsePrecompiledHeader="0"
- BrowseInformation="0"
- BrowseInformationFile=""
- WarningLevel="3"
- DebugInformationFormat="3"
- DisableSpecificWarnings="4311"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptExpander.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/ExpandVolume.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="VeraCryptExpander.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCryptExpander-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TypeLibraryName="$(SolutionDir)/Mount/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
- PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="3"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4311"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptExpander.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="VeraCryptExpander.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy Release\VeraCryptExpander.exe &quot;..\Release\Setup Files\&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/Mount/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
- PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="3"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4311"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptExpander.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="VeraCryptExpander.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCryptExpander-x64.exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
- RelativePathToProject=".\Crypto\Crypto.vcproj"
- />
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\DlgExpandVolume.cpp"
- >
- </File>
- <File
- RelativePath=".\ExpandVolume.c"
- >
- </File>
- <File
- RelativePath=".\InitDataArea.c"
- >
- </File>
- <File
- RelativePath=".\WinMain.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\BaseCom.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\BootEncryption.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Cmdline.c"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.c"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Dlgcode.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.c"
- >
- </File>
- <File
- RelativePath="..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.c"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Language.c"
- >
- </File>
- <File
- RelativePath="..\Common\Password.c"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.c"
- >
- </File>
- <File
- RelativePath="..\Common\Progress.c"
- >
- </File>
- <File
- RelativePath="..\Common\Random.c"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.c"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.c"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.c"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.c"
- >
- </File>
- </Filter>
- <Filter
- Name="Mount"
- >
- <File
- RelativePath="..\Mount\Favorites.cpp"
- >
- </File>
- <File
- RelativePath="..\Mount\Hotkeys.c"
- >
- </File>
- <File
- RelativePath="..\Mount\MainCom.cpp"
- >
- </File>
- <File
- RelativePath="..\Mount\MainCom.idl"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCMIDLTool"
- OutputDirectory="$(SolutionDir)/Mount"
- HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCMIDLTool"
- OutputDirectory="$(SolutionDir)/Mount"
- HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCMIDLTool"
- OutputDirectory="$(SolutionDir)/Mount"
- HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCMIDLTool"
- OutputDirectory="$(SolutionDir)/Mount"
- HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Mount\Mount.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\Common\Apidrvr.h"
- >
- </File>
- <File
- RelativePath="..\Common\BaseCom.h"
- >
- </File>
- <File
- RelativePath="..\Common\BootEncryption.h"
- >
- </File>
- <File
- RelativePath="..\Common\Cmdline.h"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.h"
- >
- </File>
- <File
- RelativePath="..\Common\Common.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dlgcode.h"
- >
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.h"
- >
- </File>
- <File
- RelativePath="..\Common\Exception.h"
- >
- </File>
- <File
- RelativePath=".\ExpandVolume.h"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.h"
- >
- </File>
- <File
- RelativePath=".\Hotkeys.h"
- >
- </File>
- <File
- RelativePath=".\InitDataArea.h"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.h"
- >
- </File>
- <File
- RelativePath="..\Common\Language.h"
- >
- </File>
- <File
- RelativePath="..\Mount\MainCom.h"
- >
- </File>
- <File
- RelativePath="..\Mount\Mount.h"
- >
- </File>
- <File
- RelativePath="..\Common\Password.h"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.h"
- >
- </File>
- <File
- RelativePath="..\Common\Progress.h"
- >
- </File>
- <File
- RelativePath="..\Common\Random.h"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.h"
- >
- </File>
- <File
- RelativePath="..\Common\Resource.h"
- >
- </File>
- <File
- RelativePath=".\resource.h"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tcdefs.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.h"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath=".\ExpandVolume.rc"
- >
- </File>
- <File
- RelativePath=".\Logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\Logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_background.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt.ico"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_mounted.ico"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_Volume.ico"
- >
- </File>
- <File
- RelativePath=".\VeraCryptExpander.manifest"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\Common.rc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Language.xml"
- >
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="ExpandVolume"
+ ProjectGUID="{9715FF1D-599B-4BBC-AD96-BEF6E08FF827}"
+ RootNamespace="ExpandVolume"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
+ PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ ExceptionHandling="1"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ EnableFunctionLevelLinking="false"
+ UsePrecompiledHeader="0"
+ BrowseInformation="0"
+ BrowseInformationFile=""
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4311"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptExpander.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/ExpandVolume.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="VeraCryptExpander.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptExpander.exe &quot;..\Debug\Setup Files&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
+ PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ ExceptionHandling="1"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ EnableFunctionLevelLinking="false"
+ UsePrecompiledHeader="0"
+ BrowseInformation="0"
+ BrowseInformationFile=""
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4311"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptExpander.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/ExpandVolume.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="VeraCryptExpander.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCryptExpander-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TypeLibraryName="$(SolutionDir)/Mount/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
+ PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="3"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4311"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptExpander.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="VeraCryptExpander.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\VeraCryptExpander.exe &quot;..\Release\Setup Files\&quot;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/Mount/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\pkcs11"
+ PreprocessorDefinitions="VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="3"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4311"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptExpander.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="VeraCryptExpander.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCryptExpander-x64.exe&quot;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ <ProjectReference
+ ReferencedProjectIdentifier="{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
+ RelativePathToProject=".\Crypto\Crypto.vcproj"
+ />
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\DlgExpandVolume.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\ExpandVolume.c"
+ >
+ </File>
+ <File
+ RelativePath=".\InitDataArea.c"
+ >
+ </File>
+ <File
+ RelativePath=".\WinMain.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\BaseCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BootEncryption.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cmdline.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Language.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Password.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Progress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Mount"
+ >
+ <File
+ RelativePath="..\Mount\Favorites.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\Hotkeys.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\MainCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\MainCom.idl"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ OutputDirectory="$(SolutionDir)/Mount"
+ HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ OutputDirectory="$(SolutionDir)/Mount"
+ HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ OutputDirectory="$(SolutionDir)/Mount"
+ HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCMIDLTool"
+ OutputDirectory="$(SolutionDir)/Mount"
+ HeaderFileName="$(SolutionDir)/Mount/$(InputName)_h.h"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Mount\Mount.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Common\Apidrvr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BaseCom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BootEncryption.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cmdline.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Exception.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ExpandVolume.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Hotkeys.h"
+ >
+ </File>
+ <File
+ RelativePath=".\InitDataArea.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\MainCom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\Mount.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Password.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Progress.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tcdefs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\ExpandVolume.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\Logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\Logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_background.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_mounted.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_Volume.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\VeraCryptExpander.manifest"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\Common.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Language.xml"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/ExpandVolume/ExpandVolume.vcxproj b/src/ExpandVolume/ExpandVolume.vcxproj
index de8f63b..773f611 100644
--- a/src/ExpandVolume/ExpandVolume.vcxproj
+++ b/src/ExpandVolume/ExpandVolume.vcxproj
@@ -100,8 +100,8 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>Sync</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -116,7 +116,7 @@
</BrowseInformationFile>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <DisableSpecificWarnings>4311;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4311;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -154,8 +154,8 @@ copy Debug\VeraCryptExpander.exe "..\Debug\Setup Files" &gt;NUL:
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>Sync</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -170,7 +170,7 @@ copy Debug\VeraCryptExpander.exe "..\Debug\Setup Files" &gt;NUL:
</BrowseInformationFile>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4311;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4311;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -204,8 +204,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -215,7 +215,7 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4311;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4311;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -250,8 +250,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\pkcs11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VCEXPANDER;TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -261,7 +261,7 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4311;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4311;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -309,8 +309,148 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
</ProjectReference>
</ItemGroup>
<ItemGroup>
- <ClCompile Include="..\Common\XUnzip.cpp" />
- <ClCompile Include="..\Common\XZip.cpp" />
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c" />
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c" />
+ <ClCompile Include="..\Common\libzip\zip_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_err_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c" />
+ <ClCompile Include="..\Common\libzip\zip_fclose.c" />
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fread.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c" />
+ <ClCompile Include="..\Common\libzip\zip_hash.c" />
+ <ClCompile Include="..\Common\libzip\zip_io_util.c" />
+ <ClCompile Include="..\Common\libzip\zip_memdup.c" />
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c" />
+ <ClCompile Include="..\Common\libzip\zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_call.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_function.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_read.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_window.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c" />
+ <ClCompile Include="..\Common\libzip\zip_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_string.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c" />
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c" />
+ <ClCompile Include="..\Common\zlib\adler32.c" />
+ <ClCompile Include="..\Common\zlib\crc32.c" />
+ <ClCompile Include="..\Common\zlib\deflate.c" />
+ <ClCompile Include="..\Common\zlib\inffast.c" />
+ <ClCompile Include="..\Common\zlib\inflate.c" />
+ <ClCompile Include="..\Common\zlib\inftrees.c" />
+ <ClCompile Include="..\Common\zlib\trees.c" />
+ <ClCompile Include="..\Common\zlib\zutil.c" />
<ClCompile Include="DlgExpandVolume.cpp" />
<ClCompile Include="ExpandVolume.c" />
<ClCompile Include="InitDataArea.c" />
@@ -370,6 +510,12 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
</ClCompile>
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="..\Common\libzip\compat.h" />
+ <ClInclude Include="..\Common\libzip\config.h" />
+ <ClInclude Include="..\Common\libzip\zconf.h" />
+ <ClInclude Include="..\Common\libzip\zip.h" />
+ <ClInclude Include="..\Common\libzip\zipint.h" />
+ <ClInclude Include="..\Common\libzip\zipwin32.h" />
<ClInclude Include="..\Common\Wipe.h" />
<ClInclude Include="..\Common\Apidrvr.h" />
<ClInclude Include="..\Common\BaseCom.h" />
@@ -385,6 +531,16 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCryptExpander-x64.exe" &gt;NUL:
<ClInclude Include="..\Common\Exception.h" />
<ClInclude Include="..\Common\XUnzip.h" />
<ClInclude Include="..\Common\XZip.h" />
+ <ClInclude Include="..\Common\zlib\crc32.h" />
+ <ClInclude Include="..\Common\zlib\deflate.h" />
+ <ClInclude Include="..\Common\zlib\inffast.h" />
+ <ClInclude Include="..\Common\zlib\inffixed.h" />
+ <ClInclude Include="..\Common\zlib\inflate.h" />
+ <ClInclude Include="..\Common\zlib\inftrees.h" />
+ <ClInclude Include="..\Common\zlib\trees.h" />
+ <ClInclude Include="..\Common\zlib\zconf.h" />
+ <ClInclude Include="..\Common\zlib\zlib.h" />
+ <ClInclude Include="..\Common\zlib\zutil.h" />
<ClInclude Include="ExpandVolume.h" />
<ClInclude Include="..\Common\GfMul.h" />
<ClInclude Include="Hotkeys.h" />
diff --git a/src/ExpandVolume/ExpandVolume.vcxproj.filters b/src/ExpandVolume/ExpandVolume.vcxproj.filters
index 9bd570a..34d2c57 100644
--- a/src/ExpandVolume/ExpandVolume.vcxproj.filters
+++ b/src/ExpandVolume/ExpandVolume.vcxproj.filters
@@ -22,6 +22,12 @@
<Filter Include="Resource Files\Common">
<UniqueIdentifier>{ece6c790-f488-400d-b92d-64f73ce9f990}</UniqueIdentifier>
</Filter>
+ <Filter Include="Source Files\Common\zlib">
+ <UniqueIdentifier>{044f5a5d-232b-4c85-b9ff-5b755d249450}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Common\libzip">
+ <UniqueIdentifier>{3431cd6c-72ca-4156-8311-37e469f29da9}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="DlgExpandVolume.cpp">
@@ -120,11 +126,341 @@
<ClCompile Include="..\Mount\Mount.c">
<Filter>Source Files\Mount</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XZip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\zlib\adler32.c">
+ <Filter>Source Files\Common\zlib</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XUnzip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\zlib\crc32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\deflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inffast.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inftrees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\trees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\zutil.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_err_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fclose.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fread.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_hash.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_io_util.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_memdup.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_call.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_function.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_read.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_window.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_string.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c">
+ <Filter>Source Files\Common\libzip</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -236,6 +572,54 @@
<ClInclude Include="..\Common\XUnzip.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Common\zlib\crc32.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\deflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffast.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffixed.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inftrees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\trees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zconf.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zlib.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zutil.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\compat.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\config.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zconf.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zip.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipint.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipwin32.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Midl Include="..\Mount\MainCom.idl">
diff --git a/src/Format/Format.rc b/src/Format/Format.rc
index d06d0ef..6d89f3a 100644
--- a/src/Format/Format.rc
+++ b/src/Format/Format.rc
@@ -1,747 +1,747 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-#include "..\\common\\resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,13,0
- PRODUCTVERSION 1,18,13,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "IDRIX"
- VALUE "FileDescription", "VeraCrypt Format"
- VALUE "FileVersion", "1.18"
- VALUE "LegalTrademarks", "VeraCrypt"
- VALUE "OriginalFilename", "VeraCrypt Format.exe"
- VALUE "ProductName", "VeraCrypt"
- VALUE "ProductVersion", "1.18"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HEADER
-//
-
-IDR_FORMAT_RSRC_HEADER HEADER "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// TYPELIB
-//
-
-IDR_FORMAT_TLB TYPELIB "Format.tlb"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_VOL_CREATION_WIZARD_DLG DIALOGEX 0, 0, 400, 229
-STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Volume Creation Wizard"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "&Help",IDHELP,176,209,50,14
- PUSHBUTTON "",IDC_PREV,235,209,50,14
- DEFPUSHBUTTON "",IDC_NEXT,285,209,50,14
- PUSHBUTTON "Cancel",IDCANCEL,343,209,50,14
- LTEXT "",IDC_BOX_TITLE,160,8,233,17
- GROUPBOX "",IDC_STATIC,4,0,392,203
- CONTROL 116,IDC_BITMAP_WIZARD,"Static",SS_BITMAP | SS_SUNKEN,10,9,137,169
- LTEXT "",IDC_POS_BOX,160,24,231,172
-END
-
-IDD_CIPHER_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_COMBO_BOX,7,23,137,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "&Test",IDC_CIPHER_TEST,149,22,59,14
- PUSHBUTTON "&Benchmark",IDC_BENCHMARK,149,100,59,14
- COMBOBOX IDC_COMBO_BOX_HASH_ALGO,7,137,83,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "",IDC_BOX_HELP,7,40,205,58
- GROUPBOX "Encryption Algorithm",IDT_ENCRYPTION_ALGO,0,10,217,111
- GROUPBOX "Hash Algorithm",IDT_HASH_ALGO,0,124,217,35
- LTEXT "More information",IDC_LINK_MORE_INFO_ABOUT_CIPHER,7,102,135,10,SS_NOTIFY
- LTEXT "Information on hash algorithms",IDC_LINK_HASH_INFO,97,139,115,8,SS_NOTIFY
-END
-
-IDD_PASSWORD_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_PASSWORD,53,3,170,14,ES_PASSWORD | ES_AUTOHSCROLL
- EDITTEXT IDC_VERIFY,53,19,170,14,ES_PASSWORD | ES_AUTOHSCROLL
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,35,95,10
- PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,152,36,71,14,WS_DISABLED
- CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,45,95,11,WS_EX_TRANSPARENT
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,56,97,10
- RTEXT "Password:",IDT_PASSWORD,1,6,50,8
- RTEXT "&Confirm:",IDT_CONFIRM,1,23,50,8
- LTEXT "",IDC_BOX_HELP,0,71,225,97
-END
-
-IDD_SIZE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_SIZEBOX,0,22,71,14,ES_AUTOHSCROLL | ES_NUMBER
- CONTROL "&KB",IDC_KB,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,25,27,10
- CONTROL "&MB",IDC_MB,"Button",BS_AUTORADIOBUTTON,115,25,27,10
- CONTROL "&GB",IDC_GB,"Button",BS_AUTORADIOBUTTON,150,25,27,10
- LTEXT "",IDC_BOX_HELP,0,84,214,75
- LTEXT "",IDC_SPACE_LEFT,0,44,214,33
- CONTROL "&TB",IDC_TB,"Button",BS_AUTORADIOBUTTON,185,25,27,10
-END
-
-IDD_VOLUME_LOCATION_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_COMBO_BOX,0,9,148,80,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "&Never save history",IDC_NO_HISTORY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,28,213,10
- PUSHBUTTON "",IDC_SELECT_VOLUME_LOCATION,155,9,62,14
- LTEXT "",IDC_BOX_HELP,0,42,219,125
-END
-
-IDD_FORMAT_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_FILESYS,43,13,36,90,CBS_DROPDOWNLIST | WS_TABSTOP
- COMBOBOX IDC_CLUSTERSIZE,112,13,42,90,CBS_DROPDOWNLIST | WS_TABSTOP
- CONTROL "Quick Format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,163,11,60,18
- CONTROL "",IDC_SHOW_KEYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,214,38,9,8
- PUSHBUTTON "Abort",IDC_ABORT_BUTTON,169,75,50,14
- RTEXT "Header Key: ",IDT_HEADER_KEY,2,47,54,8
- CONTROL "",IDC_HEADER_KEY,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,57,46,163,8,WS_EX_TRANSPARENT
- RTEXT "Master Key: ",IDT_MASTER_KEY,2,55,54,8
- LTEXT "",IDC_DISK_KEY,57,54,163,8,0,WS_EX_TRANSPARENT
- RTEXT "Cluster ",IDT_CLUSTER,80,15,32,8
- LTEXT "",IDC_BOX_HELP,1,112,224,40
- GROUPBOX "Options",IDT_FORMAT_OPTIONS,0,3,225,29
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,76,158,12
- RTEXT "",IDC_TIMEREMAIN,177,93,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_WRITESPEED,106,93,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- LTEXT "",IDC_BYTESWRITTEN,29,93,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "Done",IDT_DONE,5,94,22,8
- RTEXT "Speed",IDT_SPEED,70,94,34,8
- RTEXT "Left",IDT_LEFT,150,94,25,8
- GROUPBOX "",IDC_STATIC,0,67,225,41
- RTEXT "Filesystem ",IDT_FILESYSTEM,1,15,41,8,0,WS_EX_RIGHT
- RTEXT "Random Pool: ",IDT_RANDOM_POOL,2,39,54,8
- GROUPBOX "",IDC_STATIC,0,32,225,35
- CONTROL "",IDC_RANDOM_BYTES,"Static",SS_SIMPLE | WS_GROUP,57,38,155,8,WS_EX_TRANSPARENT
- GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,0,153,224,18
- CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,11,162,202,6
-END
-
-IDD_INTRO_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Create an encrypted file container",IDC_FILE_CONTAINER,
- "Button",BS_AUTORADIOBUTTON,0,7,217,10
- LTEXT "More information",IDC_MORE_INFO_ON_CONTAINERS,16,40,165,10,SS_NOTIFY
- CONTROL "Encrypt a non-system partition/drive",IDC_NONSYS_DEVICE,
- "Button",BS_AUTORADIOBUTTON,0,53,217,10
- CONTROL "Encrypt the system partition or entire system drive",IDC_SYS_DEVICE,
- "Button",BS_AUTORADIOBUTTON,0,89,217,10
- LTEXT "More information about system encryption",IDC_MORE_INFO_ON_SYS_ENCRYPTION,16,153,190,10,SS_NOTIFY
- LTEXT "Creates a virtual encrypted disk within a file. Recommended for inexperienced users.",IDT_FILE_CONTAINER,16,20,205,16
- LTEXT "Encrypts a non-system partition on any internal or external drive (e.g. a flash drive). Optionally, creates a hidden volume.",IDT_NON_SYS_DEVICE,16,66,205,20
- LTEXT "Encrypts the partition/drive where Windows is installed. Anyone who wants to gain access and use the system, read and write files, etc., will need to enter the correct password each time before Windows boots. Optionally, creates a hidden system.",IDT_SYS_DEVICE,16,102,205,47
-END
-
-IDD_INFO_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_BOX_HELP,0,10,225,155
-END
-
-IDD_HIDVOL_HOST_FILL_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_BOX_HELP,0,6,226,138
- PUSHBUTTON "Open Outer Volume",IDC_OPEN_OUTER_VOLUME,0,146,85,14
-END
-
-IDD_HIDDEN_VOL_WIZARD_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Normal mode",IDC_HIDVOL_WIZ_MODE_FULL,"Button",BS_AUTORADIOBUTTON,0,7,217,10
- CONTROL "Direct mode",IDC_HIDVOL_WIZ_MODE_DIRECT,"Button",BS_AUTORADIOBUTTON,0,87,217,10
- LTEXT "",IDC_BOX_HELP,16,20,205,63
- LTEXT "",IDC_BOX_HELP2,16,101,205,59
-END
-
-IDD_PASSWORD_ENTRY_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_PASSWORD_DIRECT,50,2,173,14,ES_PASSWORD | ES_AUTOHSCROLL
- COMBOBOX IDC_PKCS5_PRF_ID,50,17,104,90,CBS_DROPDOWNLIST | WS_TABSTOP
- EDITTEXT IDC_PIM,50,32,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,96,34,127,8,NOT WS_VISIBLE
- CONTROL "&Display password",IDC_SHOW_PASSWORD_SINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,46,84,11,WS_EX_TRANSPARENT
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,57,94,11
- PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,149,54,74,14
- LTEXT "",IDC_BOX_HELP,0,74,225,94
- RTEXT "Password:",IDT_PASSWORD,0,6,48,8
- RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,19,48,8
- RTEXT "Volume PIM:",IDT_PIM,0,35,48,8,NOT WS_VISIBLE
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,35,97,10
-END
-
-IDD_VOLUME_TYPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Standard VeraCrypt volume",IDC_STD_VOL,"Button",BS_AUTORADIOBUTTON,0,7,212,10
- CONTROL "Hi&dden VeraCrypt volume ",IDC_HIDDEN_VOL,"Button",BS_AUTORADIOBUTTON,0,68,212,10
- LTEXT "More information about hidden volumes",IDC_HIDDEN_VOL_HELP,16,151,205,10,SS_NOTIFY
- LTEXT "",IDC_BOX_HELP_NORMAL_VOL,16,20,205,41
- LTEXT "",IDC_BOX_HELP,16,83,205,62
-END
-
-IDD_SYSENC_SPAN_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Encrypt the Windows system partition",IDC_SYS_PARTITION,
- "Button",BS_AUTORADIOBUTTON,0,7,212,10
- CONTROL "Encrypt the whole drive",IDC_WHOLE_SYS_DRIVE,"Button",BS_AUTORADIOBUTTON,0,53,212,10
- LTEXT "Select this option to encrypt the partition where the currently running Windows operating system is installed.",IDT_SYS_PARTITION,16,20,205,32
- LTEXT "",IDT_WHOLE_SYS_DRIVE,16,70,205,95
-END
-
-IDD_SYSENC_RESCUE_DISK_CREATION_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_RESCUE_DISK_ISO_PATH,0,159,163,13,ES_AUTOHSCROLL
- PUSHBUTTON "Bro&wse...",IDC_BROWSE,166,158,59,14
- LTEXT "",IDT_RESCUE_DISK_INFO,0,1,225,137
- CONTROL "Skip Rescue Disk verification",IDC_SKIP_RESCUE_VERIFICATION,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,0,145,106,10
-END
-
-IDD_SYSENC_COLLECTING_RANDOM_DATA_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,1,98,122,10
- CONTROL "",IDC_SYS_POOL_CONTENTS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,8,14,205,72,WS_EX_TRANSPARENT
- LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the encryption keys. Then click Next to continue.",IDT_COLLECTING_RANDOM_DATA_NOTE,1,112,224,40
- GROUPBOX "Current pool content (partial)",IDT_PARTIAL_POOL_CONTENTS,0,5,222,88
- GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,0,154,224,18
- CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,11,163,202,6
-END
-
-IDD_SYSENC_MULTI_BOOT_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Single-boot",IDC_SINGLE_BOOT,"Button",BS_AUTORADIOBUTTON,0,7,212,10
- CONTROL "Multi-boot",IDC_MULTI_BOOT,"Button",BS_AUTORADIOBUTTON,0,53,217,10
- LTEXT "Select this option if there is only one operating system installed on this computer (even if it has multiple users).",IDT_SINGLE_BOOT,16,20,205,32
- LTEXT "Select this option if there are two or more operating systems installed on this computer.\n\nFor example:\n- Windows XP and Windows XP\n- Windows XP and Windows Vista\n- Windows and Mac OS X\n- Windows and Linux\n- Windows, Linux and Mac OS X",IDT_MULTI_BOOT,16,66,205,72
-END
-
-IDD_SYSENC_RESCUE_DISK_BURN_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "Download CD/DVD recording software",IDC_DOWNLOAD_CD_BURN_SOFTWARE,0,136,217,10,SS_NOTIFY
- LTEXT "",IDT_RESCUE_DISK_BURN_INFO,0,4,225,128
-END
-
-IDD_SYSENC_WIPE_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- COMBOBOX IDC_WIPE_MODE,61,0,127,90,CBS_DROPDOWNLIST | WS_TABSTOP
- RTEXT "Wipe mode:",IDT_WIPE_MODE,0,2,59,8,0,WS_EX_RIGHT
- LTEXT "",IDT_WIPE_MODE_INFO,0,19,225,128
-END
-
-IDD_INPLACE_ENCRYPTION_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- COMBOBOX IDC_WIPE_MODE,67,13,125,90,CBS_DROPDOWNLIST | WS_TABSTOP
- PUSHBUTTON "&Pause",IDC_PAUSE,169,40,50,14
- LTEXT "More information",IDC_MORE_INFO_SYS_ENCRYPTION,1,150,202,10,SS_NOTIFY
- LTEXT "",IDC_BYTESWRITTEN,29,58,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_WRITESPEED,103,58,46,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_TIMEREMAIN,177,58,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "Wipe mode:",IDT_WIPE_MODE,6,15,59,8,0,WS_EX_RIGHT
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,41,158,12
- RTEXT "Done",IDT_DONE,5,59,22,8
- RTEXT "Status",IDT_STATUS,72,59,29,8
- RTEXT "Left",IDT_LEFT,151,59,24,8
- LTEXT "",IDC_BOX_HELP,1,77,224,70
- GROUPBOX "Options",IDT_FORMAT_OPTIONS,0,3,225,29
- GROUPBOX "",IDC_STATIC,0,32,225,41
-END
-
-IDD_SYSENC_KEYS_GEN_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- CONTROL "Display generated keys (their portions)",IDC_DISPLAY_KEYS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,1,94,216,10
- CONTROL "",IDC_HEADER_KEY,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,57,71,163,8,WS_EX_TRANSPARENT
- LTEXT "",IDC_DISK_KEY,57,79,163,8,0,WS_EX_TRANSPARENT
- LTEXT "The keys, salt, and other data have been successfully generated. If you want to generate new keys, click Back and then Next. Otherwise, click Next to continue.",IDT_SYSENC_KEYS_GEN_INFO,1,23,224,41
- RTEXT "Header Key: ",IDT_HEADER_KEY,2,72,54,8
- RTEXT "Master Key: ",IDT_MASTER_KEY,2,80,54,8
- GROUPBOX "",-1,0,65,225,26
-END
-
-IDD_UNIVERSAL_DUAL_CHOICE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_CHOICE1,"Button",BS_AUTORADIOBUTTON,0,7,212,10
- CONTROL "",IDC_CHOICE2,"Button",BS_AUTORADIOBUTTON,0,17,217,10
- LTEXT "",IDC_BOX_HELP,1,34,220,112
-END
-
-IDD_SYSENC_DRIVE_ANALYSIS_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "",IDT_SYSENC_DRIVE_ANALYSIS_INFO,2,10,215,88
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,1,115,216,12
- LTEXT "Progress:",IDT_PROGRESS,2,104,57,8
-END
-
-IDD_SYSENC_TYPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Normal",IDC_SYSENC_NORMAL,"Button",BS_AUTORADIOBUTTON,0,7,212,10
- CONTROL "Hi&dden",IDC_SYSENC_HIDDEN,"Button",BS_AUTORADIOBUTTON,0,53,212,10
- LTEXT "More information",IDC_HIDDEN_SYSENC_INFO_LINK,16,148,205,10,SS_NOTIFY
- LTEXT "",IDC_BOX_HELP_SYSENC_NORMAL,16,20,205,25
- LTEXT "",IDC_BOX_HELP,16,67,205,72
-END
-
-IDD_SYSENC_HIDDEN_OS_REQ_CHECK_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "More information",IDC_HIDDEN_SYSENC_INFO_LINK,0,150,217,10,SS_NOTIFY
- LTEXT "",IDC_BOX_HELP,0,2,225,142
-END
-
-IDD_DEVICE_WIPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "Abort",IDC_ABORT_BUTTON,169,48,50,14
- LTEXT "",IDC_BYTESWRITTEN,29,66,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_WRITESPEED,103,66,46,11,SS_CENTERIMAGE | NOT WS_VISIBLE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "",IDC_TIMEREMAIN,177,66,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
- RTEXT "Wipe mode:",IDT_WIPE_MODE,6,22,59,8,0,WS_EX_RIGHT
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,49,158,12
- RTEXT "Done",IDT_DONE,5,67,22,8
- RTEXT "Pass",IDT_PASS,72,67,29,8,NOT WS_VISIBLE
- RTEXT "Left",IDT_LEFT,151,67,24,8
- LTEXT "",IDC_BOX_HELP,1,86,224,80
- GROUPBOX "",IDT_FORMAT_OPTIONS,0,10,225,29
- GROUPBOX "",IDC_STATIC,0,40,225,42
- LTEXT "",IDC_WIPE_MODE,67,21,125,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
-END
-
-IDD_DEVICE_WIPE_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- COMBOBOX IDC_WIPE_MODE,61,9,127,90,CBS_DROPDOWNLIST | WS_TABSTOP
- RTEXT "Wipe mode:",IDT_WIPE_MODE,0,11,59,8,0,WS_EX_RIGHT
- LTEXT "",IDT_WIPE_MODE_INFO,0,29,225,122
-END
-
-IDD_DEVICE_TRANSFORM_MODE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Create encrypted volume and format it",IDC_DEVICE_TRANSFORM_MODE_FORMAT,
- "Button",BS_AUTORADIOBUTTON,0,8,217,10
- CONTROL "Encrypt partition in place",IDC_DEVICE_TRANSFORM_MODE_INPLACE,
- "Button",BS_AUTORADIOBUTTON,0,98,217,10
- LTEXT "",IDC_BOX_HELP,16,21,205,74
- LTEXT "",IDC_BOX_HELP2,16,112,205,53
-END
-
-IDD_EXPANDED_LIST_SELECT_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_BOX_HELP,0,107,225,58
- LISTBOX IDC_LIST_BOX,0,3,222,100,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
-END
-
-IDD_DRIVE_LETTER_SELECTION_PAGE DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_BOX_HELP,0,40,225,118
- COMBOBOX IDC_DRIVE_LETTER_LIST,94,15,38,69,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- RTEXT "Drive letter:",IDT_DRIVE_LETTER,5,17,86,8
-END
-
-IDD_PIM_PAGE_DLG DIALOGEX 0, 0, 226, 172
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_PIM,53,0,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "",IDC_BOX_HELP,0,32,225,126
- RTEXT "Volume PIM:",IDT_PIM,1,3,50,8
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,97,3,126,8
- LTEXT "Information on PIM",IDC_LINK_PIM_INFO,0,161,213,8,SS_NOTIFY
- CONTROL "Display PIM",IDC_SHOW_PIM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,17,150,10
-END
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "#include ""..\\\\common\\\\resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#include ""..\\\\common\\\\common.rc""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_VOL_CREATION_WIZARD_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 393
- TOPMARGIN, 1
- BOTTOMMARGIN, 227
- HORZGUIDE, 216
- END
-
- IDD_CIPHER_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 161
- END
-
- IDD_PASSWORD_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 143
- END
-
- IDD_SIZE_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 165
- END
-
- IDD_VOLUME_LOCATION_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 167
- END
-
- IDD_FORMAT_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 153
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_INTRO_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_INFO_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_HIDVOL_HOST_FILL_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_HIDDEN_VOL_WIZARD_MODE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_PASSWORD_ENTRY_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 143
- END
-
- IDD_VOLUME_TYPE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_SYSENC_SPAN_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_SYSENC_RESCUE_DISK_CREATION_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 167
- END
-
- IDD_SYSENC_COLLECTING_RANDOM_DATA_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 153
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_SYSENC_MULTI_BOOT_MODE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_SYSENC_RESCUE_DISK_BURN_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 167
- END
-
- IDD_SYSENC_WIPE_MODE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_INPLACE_ENCRYPTION_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 166
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_SYSENC_KEYS_GEN_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 153
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_UNIVERSAL_DUAL_CHOICE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_SYSENC_DRIVE_ANALYSIS_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 153
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_SYSENC_TYPE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_SYSENC_HIDDEN_OS_REQ_CHECK_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 167
- END
-
- IDD_DEVICE_WIPE_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 217
- BOTTOMMARGIN, 166
- HORZGUIDE, 80
- HORZGUIDE, 96
- END
-
- IDD_DEVICE_WIPE_MODE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_DEVICE_TRANSFORM_MODE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_EXPANDED_LIST_SELECT_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_DRIVE_LETTER_SELECTION_PAGE, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 219
- TOPMARGIN, 7
- BOTTOMMARGIN, 165
- END
-
- IDD_PIM_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 223
- BOTTOMMARGIN, 171
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_WIZARD BITMAP "VeraCrypt_wizard.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_UACSTRING_FMT "VeraCrypt"
-END
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#include "..\\common\\common.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+#include "..\\common\\resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,19,4,0
+ PRODUCTVERSION 1,19,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "IDRIX"
+ VALUE "FileDescription", "VeraCrypt Format"
+ VALUE "FileVersion", "1.19"
+ VALUE "LegalTrademarks", "VeraCrypt"
+ VALUE "OriginalFilename", "VeraCrypt Format.exe"
+ VALUE "ProductName", "VeraCrypt"
+ VALUE "ProductVersion", "1.19"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HEADER
+//
+
+IDR_FORMAT_RSRC_HEADER HEADER "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// TYPELIB
+//
+
+IDR_FORMAT_TLB TYPELIB "Format.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_VOL_CREATION_WIZARD_DLG DIALOGEX 0, 0, 400, 229
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Volume Creation Wizard"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "&Help",IDHELP,176,209,50,14
+ PUSHBUTTON "",IDC_PREV,235,209,50,14
+ DEFPUSHBUTTON "",IDC_NEXT,285,209,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,343,209,50,14
+ LTEXT "",IDC_BOX_TITLE,160,8,233,17
+ GROUPBOX "",IDC_STATIC,4,0,392,203
+ CONTROL 116,IDC_BITMAP_WIZARD,"Static",SS_BITMAP | SS_SUNKEN,10,9,137,169
+ LTEXT "",IDC_POS_BOX,160,24,231,172
+END
+
+IDD_CIPHER_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_COMBO_BOX,7,23,137,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "&Test",IDC_CIPHER_TEST,149,22,59,14
+ PUSHBUTTON "&Benchmark",IDC_BENCHMARK,149,100,59,14
+ COMBOBOX IDC_COMBO_BOX_HASH_ALGO,7,137,83,126,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "",IDC_BOX_HELP,7,40,205,58
+ GROUPBOX "Encryption Algorithm",IDT_ENCRYPTION_ALGO,0,10,217,111
+ GROUPBOX "Hash Algorithm",IDT_HASH_ALGO,0,124,217,35
+ LTEXT "More information",IDC_LINK_MORE_INFO_ABOUT_CIPHER,7,102,135,10,SS_NOTIFY
+ LTEXT "Information on hash algorithms",IDC_LINK_HASH_INFO,97,139,115,8,SS_NOTIFY
+END
+
+IDD_PASSWORD_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_PASSWORD,53,3,170,14,ES_PASSWORD | ES_AUTOHSCROLL
+ EDITTEXT IDC_VERIFY,53,19,170,14,ES_PASSWORD | ES_AUTOHSCROLL
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,35,95,10
+ PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,152,36,71,14,WS_DISABLED
+ CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,45,95,11,WS_EX_TRANSPARENT
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,56,97,10
+ RTEXT "Password:",IDT_PASSWORD,1,6,50,8
+ RTEXT "&Confirm:",IDT_CONFIRM,1,23,50,8
+ LTEXT "",IDC_BOX_HELP,0,71,225,97
+END
+
+IDD_SIZE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_SIZEBOX,0,22,71,14,ES_AUTOHSCROLL | ES_NUMBER
+ CONTROL "&KB",IDC_KB,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,80,25,27,10
+ CONTROL "&MB",IDC_MB,"Button",BS_AUTORADIOBUTTON,115,25,27,10
+ CONTROL "&GB",IDC_GB,"Button",BS_AUTORADIOBUTTON,150,25,27,10
+ LTEXT "",IDC_BOX_HELP,0,84,214,75
+ LTEXT "",IDC_SPACE_LEFT,0,44,214,33
+ CONTROL "&TB",IDC_TB,"Button",BS_AUTORADIOBUTTON,185,25,27,10
+END
+
+IDD_VOLUME_LOCATION_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_COMBO_BOX,0,9,148,80,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ CONTROL "&Never save history",IDC_NO_HISTORY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,28,213,10
+ PUSHBUTTON "",IDC_SELECT_VOLUME_LOCATION,155,9,62,14
+ LTEXT "",IDC_BOX_HELP,0,42,219,125
+END
+
+IDD_FORMAT_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_FILESYS,43,13,36,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ COMBOBOX IDC_CLUSTERSIZE,112,13,42,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ CONTROL "Quick Format",IDC_QUICKFORMAT,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,163,11,60,18
+ CONTROL "",IDC_SHOW_KEYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,214,38,9,8
+ PUSHBUTTON "Abort",IDC_ABORT_BUTTON,169,75,50,14
+ RTEXT "Header Key: ",IDT_HEADER_KEY,2,47,54,8
+ CONTROL "",IDC_HEADER_KEY,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,57,46,163,8,WS_EX_TRANSPARENT
+ RTEXT "Master Key: ",IDT_MASTER_KEY,2,55,54,8
+ LTEXT "",IDC_DISK_KEY,57,54,163,8,0,WS_EX_TRANSPARENT
+ RTEXT "Cluster ",IDT_CLUSTER,80,15,32,8
+ LTEXT "",IDC_BOX_HELP,1,112,224,40
+ GROUPBOX "Options",IDT_FORMAT_OPTIONS,0,3,225,29
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,76,158,12
+ RTEXT "",IDC_TIMEREMAIN,177,93,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_WRITESPEED,106,93,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ LTEXT "",IDC_BYTESWRITTEN,29,93,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "Done",IDT_DONE,5,94,22,8
+ RTEXT "Speed",IDT_SPEED,70,94,34,8
+ RTEXT "Left",IDT_LEFT,150,94,25,8
+ GROUPBOX "",IDC_STATIC,0,67,225,41
+ RTEXT "Filesystem ",IDT_FILESYSTEM,1,15,41,8,0,WS_EX_RIGHT
+ RTEXT "Random Pool: ",IDT_RANDOM_POOL,2,39,54,8
+ GROUPBOX "",IDC_STATIC,0,32,225,35
+ CONTROL "",IDC_RANDOM_BYTES,"Static",SS_SIMPLE | WS_GROUP,57,38,155,8,WS_EX_TRANSPARENT
+ GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,0,153,224,18
+ CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,11,162,202,6
+END
+
+IDD_INTRO_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Create an encrypted file container",IDC_FILE_CONTAINER,
+ "Button",BS_AUTORADIOBUTTON,0,7,217,10
+ LTEXT "More information",IDC_MORE_INFO_ON_CONTAINERS,16,40,165,10,SS_NOTIFY
+ CONTROL "Encrypt a non-system partition/drive",IDC_NONSYS_DEVICE,
+ "Button",BS_AUTORADIOBUTTON,0,53,217,10
+ CONTROL "Encrypt the system partition or entire system drive",IDC_SYS_DEVICE,
+ "Button",BS_AUTORADIOBUTTON,0,89,217,10
+ LTEXT "More information about system encryption",IDC_MORE_INFO_ON_SYS_ENCRYPTION,16,153,190,10,SS_NOTIFY
+ LTEXT "Creates a virtual encrypted disk within a file. Recommended for inexperienced users.",IDT_FILE_CONTAINER,16,20,205,16
+ LTEXT "Encrypts a non-system partition on any internal or external drive (e.g. a flash drive). Optionally, creates a hidden volume.",IDT_NON_SYS_DEVICE,16,66,205,20
+ LTEXT "Encrypts the partition/drive where Windows is installed. Anyone who wants to gain access and use the system, read and write files, etc., will need to enter the correct password each time before Windows boots. Optionally, creates a hidden system.",IDT_SYS_DEVICE,16,102,205,47
+END
+
+IDD_INFO_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_BOX_HELP,0,10,225,155
+END
+
+IDD_HIDVOL_HOST_FILL_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_BOX_HELP,0,6,226,138
+ PUSHBUTTON "Open Outer Volume",IDC_OPEN_OUTER_VOLUME,0,146,85,14
+END
+
+IDD_HIDDEN_VOL_WIZARD_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Normal mode",IDC_HIDVOL_WIZ_MODE_FULL,"Button",BS_AUTORADIOBUTTON,0,7,217,10
+ CONTROL "Direct mode",IDC_HIDVOL_WIZ_MODE_DIRECT,"Button",BS_AUTORADIOBUTTON,0,87,217,10
+ LTEXT "",IDC_BOX_HELP,16,20,205,63
+ LTEXT "",IDC_BOX_HELP2,16,101,205,59
+END
+
+IDD_PASSWORD_ENTRY_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_PASSWORD_DIRECT,50,2,173,14,ES_PASSWORD | ES_AUTOHSCROLL
+ COMBOBOX IDC_PKCS5_PRF_ID,50,17,104,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ EDITTEXT IDC_PIM,50,32,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,96,34,127,8,NOT WS_VISIBLE
+ CONTROL "&Display password",IDC_SHOW_PASSWORD_SINGLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,46,84,11,WS_EX_TRANSPARENT
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,57,94,11
+ PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,149,54,74,14
+ LTEXT "",IDC_BOX_HELP,0,74,225,94
+ RTEXT "Password:",IDT_PASSWORD,0,6,48,8
+ RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,19,48,8
+ RTEXT "Volume PIM:",IDT_PIM,0,35,48,8,NOT WS_VISIBLE
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,50,35,97,10
+END
+
+IDD_VOLUME_TYPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Standard VeraCrypt volume",IDC_STD_VOL,"Button",BS_AUTORADIOBUTTON,0,7,212,10
+ CONTROL "Hi&dden VeraCrypt volume ",IDC_HIDDEN_VOL,"Button",BS_AUTORADIOBUTTON,0,68,212,10
+ LTEXT "More information about hidden volumes",IDC_HIDDEN_VOL_HELP,16,151,205,10,SS_NOTIFY
+ LTEXT "",IDC_BOX_HELP_NORMAL_VOL,16,20,205,41
+ LTEXT "",IDC_BOX_HELP,16,83,205,62
+END
+
+IDD_SYSENC_SPAN_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Encrypt the Windows system partition",IDC_SYS_PARTITION,
+ "Button",BS_AUTORADIOBUTTON,0,7,212,10
+ CONTROL "Encrypt the whole drive",IDC_WHOLE_SYS_DRIVE,"Button",BS_AUTORADIOBUTTON,0,53,212,10
+ LTEXT "Select this option to encrypt the partition where the currently running Windows operating system is installed.",IDT_SYS_PARTITION,16,20,205,32
+ LTEXT "",IDT_WHOLE_SYS_DRIVE,16,70,205,95
+END
+
+IDD_SYSENC_RESCUE_DISK_CREATION_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_RESCUE_DISK_ISO_PATH,0,159,163,13,ES_AUTOHSCROLL
+ PUSHBUTTON "Bro&wse...",IDC_BROWSE,166,158,59,14
+ LTEXT "",IDT_RESCUE_DISK_INFO,0,1,225,137
+ CONTROL "Skip Rescue Disk verification",IDC_SKIP_RESCUE_VERIFICATION,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,0,145,106,10
+END
+
+IDD_SYSENC_COLLECTING_RANDOM_DATA_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ CONTROL "Display pool content",IDC_DISPLAY_POOL_CONTENTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,1,98,122,10
+ CONTROL "",IDC_SYS_POOL_CONTENTS,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,8,14,205,72,WS_EX_TRANSPARENT
+ LTEXT "IMPORTANT: Move your mouse as randomly as possible within this window. The longer you move it, the better. This significantly increases the cryptographic strength of the encryption keys. Then click Next to continue.",IDT_COLLECTING_RANDOM_DATA_NOTE,1,112,224,40
+ GROUPBOX "Current pool content (partial)",IDT_PARTIAL_POOL_CONTENTS,0,5,222,88
+ GROUPBOX "Randomness Collected From Mouse Movements",IDT_ENTROPY_BAR,0,154,224,18
+ CONTROL "",IDC_ENTROPY_BAR,"msctls_progress32",WS_BORDER,11,163,202,6
+END
+
+IDD_SYSENC_MULTI_BOOT_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Single-boot",IDC_SINGLE_BOOT,"Button",BS_AUTORADIOBUTTON,0,7,212,10
+ CONTROL "Multi-boot",IDC_MULTI_BOOT,"Button",BS_AUTORADIOBUTTON,0,53,217,10
+ LTEXT "Select this option if there is only one operating system installed on this computer (even if it has multiple users).",IDT_SINGLE_BOOT,16,20,205,32
+ LTEXT "Select this option if there are two or more operating systems installed on this computer.\n\nFor example:\n- Windows XP and Windows XP\n- Windows XP and Windows Vista\n- Windows and Mac OS X\n- Windows and Linux\n- Windows, Linux and Mac OS X",IDT_MULTI_BOOT,16,66,205,72
+END
+
+IDD_SYSENC_RESCUE_DISK_BURN_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ LTEXT "Download CD/DVD recording software",IDC_DOWNLOAD_CD_BURN_SOFTWARE,0,136,217,10,SS_NOTIFY
+ LTEXT "",IDT_RESCUE_DISK_BURN_INFO,0,4,225,128
+END
+
+IDD_SYSENC_WIPE_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ COMBOBOX IDC_WIPE_MODE,61,0,127,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ RTEXT "Wipe mode:",IDT_WIPE_MODE,0,2,59,8,0,WS_EX_RIGHT
+ LTEXT "",IDT_WIPE_MODE_INFO,0,19,225,128
+END
+
+IDD_INPLACE_ENCRYPTION_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ COMBOBOX IDC_WIPE_MODE,67,13,125,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ PUSHBUTTON "&Pause",IDC_PAUSE,169,40,50,14
+ LTEXT "More information",IDC_MORE_INFO_SYS_ENCRYPTION,1,150,202,10,SS_NOTIFY
+ LTEXT "",IDC_BYTESWRITTEN,29,58,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_WRITESPEED,103,58,46,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_TIMEREMAIN,177,58,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "Wipe mode:",IDT_WIPE_MODE,6,15,59,8,0,WS_EX_RIGHT
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,41,158,12
+ RTEXT "Done",IDT_DONE,5,59,22,8
+ RTEXT "Status",IDT_STATUS,72,59,29,8
+ RTEXT "Left",IDT_LEFT,151,59,24,8
+ LTEXT "",IDC_BOX_HELP,1,77,224,70
+ GROUPBOX "Options",IDT_FORMAT_OPTIONS,0,3,225,29
+ GROUPBOX "",IDC_STATIC,0,32,225,41
+END
+
+IDD_SYSENC_KEYS_GEN_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ CONTROL "Display generated keys (their portions)",IDC_DISPLAY_KEYS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,1,94,216,10
+ CONTROL "",IDC_HEADER_KEY,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,57,71,163,8,WS_EX_TRANSPARENT
+ LTEXT "",IDC_DISK_KEY,57,79,163,8,0,WS_EX_TRANSPARENT
+ LTEXT "The keys, salt, and other data have been successfully generated. If you want to generate new keys, click Back and then Next. Otherwise, click Next to continue.",IDT_SYSENC_KEYS_GEN_INFO,1,23,224,41
+ RTEXT "Header Key: ",IDT_HEADER_KEY,2,72,54,8
+ RTEXT "Master Key: ",IDT_MASTER_KEY,2,80,54,8
+ GROUPBOX "",-1,0,65,225,26
+END
+
+IDD_UNIVERSAL_DUAL_CHOICE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_CHOICE1,"Button",BS_AUTORADIOBUTTON,0,7,212,10
+ CONTROL "",IDC_CHOICE2,"Button",BS_AUTORADIOBUTTON,0,17,217,10
+ LTEXT "",IDC_BOX_HELP,1,34,220,112
+END
+
+IDD_SYSENC_DRIVE_ANALYSIS_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ LTEXT "",IDT_SYSENC_DRIVE_ANALYSIS_INFO,2,10,215,88
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,1,115,216,12
+ LTEXT "Progress:",IDT_PROGRESS,2,104,57,8
+END
+
+IDD_SYSENC_TYPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Normal",IDC_SYSENC_NORMAL,"Button",BS_AUTORADIOBUTTON,0,7,212,10
+ CONTROL "Hi&dden",IDC_SYSENC_HIDDEN,"Button",BS_AUTORADIOBUTTON,0,53,212,10
+ LTEXT "More information",IDC_HIDDEN_SYSENC_INFO_LINK,16,148,205,10,SS_NOTIFY
+ LTEXT "",IDC_BOX_HELP_SYSENC_NORMAL,16,20,205,25
+ LTEXT "",IDC_BOX_HELP,16,67,205,72
+END
+
+IDD_SYSENC_HIDDEN_OS_REQ_CHECK_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ LTEXT "More information",IDC_HIDDEN_SYSENC_INFO_LINK,0,150,217,10,SS_NOTIFY
+ LTEXT "",IDC_BOX_HELP,0,2,225,142
+END
+
+IDD_DEVICE_WIPE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "Abort",IDC_ABORT_BUTTON,169,48,50,14
+ LTEXT "",IDC_BYTESWRITTEN,29,66,39,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_WRITESPEED,103,66,46,11,SS_CENTERIMAGE | NOT WS_VISIBLE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "",IDC_TIMEREMAIN,177,66,42,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_RIGHT | WS_EX_STATICEDGE
+ RTEXT "Wipe mode:",IDT_WIPE_MODE,6,22,59,8,0,WS_EX_RIGHT
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,6,49,158,12
+ RTEXT "Done",IDT_DONE,5,67,22,8
+ RTEXT "Pass",IDT_PASS,72,67,29,8,NOT WS_VISIBLE
+ RTEXT "Left",IDT_LEFT,151,67,24,8
+ LTEXT "",IDC_BOX_HELP,1,86,224,80
+ GROUPBOX "",IDT_FORMAT_OPTIONS,0,10,225,29
+ GROUPBOX "",IDC_STATIC,0,40,225,42
+ LTEXT "",IDC_WIPE_MODE,67,21,125,11,SS_CENTERIMAGE,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
+END
+
+IDD_DEVICE_WIPE_MODE_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ COMBOBOX IDC_WIPE_MODE,61,9,127,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ RTEXT "Wipe mode:",IDT_WIPE_MODE,0,11,59,8,0,WS_EX_RIGHT
+ LTEXT "",IDT_WIPE_MODE_INFO,0,29,225,122
+END
+
+IDD_DEVICE_TRANSFORM_MODE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Create encrypted volume and format it",IDC_DEVICE_TRANSFORM_MODE_FORMAT,
+ "Button",BS_AUTORADIOBUTTON,0,8,217,10
+ CONTROL "Encrypt partition in place",IDC_DEVICE_TRANSFORM_MODE_INPLACE,
+ "Button",BS_AUTORADIOBUTTON,0,98,217,10
+ LTEXT "",IDC_BOX_HELP,16,21,205,74
+ LTEXT "",IDC_BOX_HELP2,16,112,205,53
+END
+
+IDD_EXPANDED_LIST_SELECT_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_BOX_HELP,0,107,225,58
+ LISTBOX IDC_LIST_BOX,0,3,222,100,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_VSCROLL
+END
+
+IDD_DRIVE_LETTER_SELECTION_PAGE DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_BOX_HELP,0,40,225,118
+ COMBOBOX IDC_DRIVE_LETTER_LIST,94,15,38,69,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ RTEXT "Drive letter:",IDT_DRIVE_LETTER,5,17,86,8
+END
+
+IDD_PIM_PAGE_DLG DIALOGEX 0, 0, 226, 172
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_PIM,53,0,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "",IDC_BOX_HELP,0,32,225,126
+ RTEXT "Volume PIM:",IDT_PIM,1,3,50,8
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,97,3,126,8
+ LTEXT "Information on PIM",IDC_LINK_PIM_INFO,0,161,213,8,SS_NOTIFY
+ CONTROL "Display PIM",IDC_SHOW_PIM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,53,17,150,10
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "#include ""..\\\\common\\\\resource.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""..\\\\common\\\\common.rc""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_VOL_CREATION_WIZARD_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 393
+ TOPMARGIN, 1
+ BOTTOMMARGIN, 227
+ HORZGUIDE, 216
+ END
+
+ IDD_CIPHER_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 161
+ END
+
+ IDD_PASSWORD_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 143
+ END
+
+ IDD_SIZE_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_VOLUME_LOCATION_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 167
+ END
+
+ IDD_FORMAT_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 153
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_INTRO_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_INFO_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_HIDVOL_HOST_FILL_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_HIDDEN_VOL_WIZARD_MODE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_PASSWORD_ENTRY_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 143
+ END
+
+ IDD_VOLUME_TYPE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_SYSENC_SPAN_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_SYSENC_RESCUE_DISK_CREATION_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 167
+ END
+
+ IDD_SYSENC_COLLECTING_RANDOM_DATA_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 153
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_SYSENC_MULTI_BOOT_MODE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_SYSENC_RESCUE_DISK_BURN_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 167
+ END
+
+ IDD_SYSENC_WIPE_MODE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_INPLACE_ENCRYPTION_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 166
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_SYSENC_KEYS_GEN_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 153
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_UNIVERSAL_DUAL_CHOICE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_SYSENC_DRIVE_ANALYSIS_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 153
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_SYSENC_TYPE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_SYSENC_HIDDEN_OS_REQ_CHECK_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 167
+ END
+
+ IDD_DEVICE_WIPE_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 217
+ BOTTOMMARGIN, 166
+ HORZGUIDE, 80
+ HORZGUIDE, 96
+ END
+
+ IDD_DEVICE_WIPE_MODE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_DEVICE_TRANSFORM_MODE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_EXPANDED_LIST_SELECT_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_DRIVE_LETTER_SELECTION_PAGE, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 219
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 165
+ END
+
+ IDD_PIM_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 223
+ BOTTOMMARGIN, 171
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_WIZARD BITMAP "VeraCrypt_wizard.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_UACSTRING_FMT "VeraCrypt"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "..\\common\\common.rc"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Format/Format.vcproj b/src/Format/Format.vcproj
index 9fa108b..b8747ba 100644
--- a/src/Format/Format.vcproj
+++ b/src/Format/Format.vcproj
@@ -1,1028 +1,1028 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Format"
- ProjectGUID="{9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}"
- RootNamespace="Format"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptFormat.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/Format.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Format.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptFormat.exe &quot;..\Debug\Setup Files\VeraCrypt Format.exe&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="3"
- DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptFormat.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/Format.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Format.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCrypt Format-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptFormat.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Format.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy Release\VeraCryptFormat.exe &quot;..\Release\Setup Files\VeraCrypt Format.exe&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptFormat.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Format.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCrypt Format-x64.exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\FormatCom.cpp"
- >
- </File>
- <File
- RelativePath=".\FormatCom.idl"
- >
- </File>
- <File
- RelativePath=".\InPlace.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Tcformat.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\BaseCom.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\BootEncryption.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Cmdline.c"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.c"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Dlgcode.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.c"
- >
- </File>
- <File
- RelativePath="..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\Common\Fat.c"
- >
- </File>
- <File
- RelativePath="..\Common\Format.c"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.c"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Language.c"
- >
- </File>
- <File
- RelativePath="..\Common\Password.c"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.c"
- >
- </File>
- <File
- RelativePath="..\Common\Progress.c"
- >
- </File>
- <File
- RelativePath="..\Common\Random.c"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.c"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.c"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.c"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.c"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.c"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\Common\BaseCom.h"
- >
- </File>
- <File
- RelativePath="..\Common\Common.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dlgcode.h"
- >
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.h"
- >
- </File>
- <File
- RelativePath="..\Common\Endian.h"
- >
- </File>
- <File
- RelativePath="..\Common\Exception.h"
- >
- </File>
- <File
- RelativePath="..\Common\Fat.h"
- >
- </File>
- <File
- RelativePath="..\Common\Format.h"
- >
- </File>
- <File
- RelativePath=".\FormatCom.h"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.h"
- >
- </File>
- <File
- RelativePath=".\InPlace.h"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.h"
- >
- </File>
- <File
- RelativePath="..\Common\Language.h"
- >
- </File>
- <File
- RelativePath="..\Mount\Mount.h"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.h"
- >
- </File>
- <File
- RelativePath="..\Common\Progress.h"
- >
- </File>
- <File
- RelativePath="..\Common\Random.h"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.h"
- >
- </File>
- <File
- RelativePath=".\resource.h"
- >
- </File>
- <File
- RelativePath="..\Common\Resource.h"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tcdefs.h"
- >
- </File>
- <File
- RelativePath=".\Tcformat.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.h"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.h"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath=".\Format.manifest"
- >
- </File>
- <File
- RelativePath=".\Format.rc"
- >
- </File>
- <File
- RelativePath=".\Format.tlb"
- SubType="Designer"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_mounted.ico"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_Volume.ico"
- >
- </File>
- <File
- RelativePath=".\VeraCrypt_wizard.bmp"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Boot\Windows\Release_AES\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Common\Common.rc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\Decompressor.com"
- >
- </File>
- <File
- RelativePath="..\Common\Language.xml"
- >
- </File>
- <File
- RelativePath="..\Resources\Texts\License.rtf"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_background.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt.ico"
- >
- </File>
- </Filter>
- </Filter>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES_SHA2\BootLoader.com.gz"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Format"
+ ProjectGUID="{9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}"
+ RootNamespace="Format"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptFormat.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Format.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Format.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptFormat.exe &quot;..\Debug\Setup Files\VeraCrypt Format.exe&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptFormat.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Format.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Format.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCrypt Format-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptFormat.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Format.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\VeraCryptFormat.exe &quot;..\Release\Setup Files\VeraCrypt Format.exe&quot;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4057;4100;4127;4201;4204;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptFormat.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Format.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCrypt Format-x64.exe&quot;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\FormatCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\FormatCom.idl"
+ >
+ </File>
+ <File
+ RelativePath=".\InPlace.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Tcformat.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\BaseCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BootEncryption.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cmdline.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Fat.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Format.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Language.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Password.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Progress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.c"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Common\BaseCom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Endian.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Exception.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Fat.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Format.h"
+ >
+ </File>
+ <File
+ RelativePath=".\FormatCom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.h"
+ >
+ </File>
+ <File
+ RelativePath=".\InPlace.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Mount\Mount.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Progress.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tcdefs.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Tcformat.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath=".\Format.manifest"
+ >
+ </File>
+ <File
+ RelativePath=".\Format.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\Format.tlb"
+ SubType="Designer"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_mounted.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_Volume.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\VeraCrypt_wizard.bmp"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Boot\Windows\Release_AES\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\Decompressor.com"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\Resources\Texts\License.rtf"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_background.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt.ico"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Format/Format.vcxproj b/src/Format/Format.vcxproj
index 0b4a831..6665594 100644
--- a/src/Format/Format.vcxproj
+++ b/src/Format/Format.vcxproj
@@ -93,8 +93,8 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VOLFORMAT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -103,7 +103,7 @@
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -133,8 +133,8 @@ copy Debug\VeraCryptFormat.exe "..\Debug\Setup Files\VeraCrypt Format.exe" &gt;N
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VOLFORMAT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VOLFORMAT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -143,7 +143,7 @@ copy Debug\VeraCryptFormat.exe "..\Debug\Setup Files\VeraCrypt Format.exe" &gt;N
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -173,8 +173,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VOLFORMAT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -182,16 +182,15 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
<AssemblerOutput>All</AssemblerOutput>
<AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
<WarningLevel>Level4</WarningLevel>
- <DebugInformationFormat>
- </DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)VeraCryptFormat.exe</OutputFile>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<DelayLoadDLLs>mpr.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
- <GenerateDebugInformation>false</GenerateDebugInformation>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
@@ -215,8 +214,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>VOLFORMAT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>VOLFORMAT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -226,7 +225,7 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4204;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -250,8 +249,148 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="..\Common\XUnzip.cpp" />
- <ClCompile Include="..\Common\XZip.cpp" />
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c" />
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c" />
+ <ClCompile Include="..\Common\libzip\zip_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_err_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c" />
+ <ClCompile Include="..\Common\libzip\zip_fclose.c" />
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fread.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c" />
+ <ClCompile Include="..\Common\libzip\zip_hash.c" />
+ <ClCompile Include="..\Common\libzip\zip_io_util.c" />
+ <ClCompile Include="..\Common\libzip\zip_memdup.c" />
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c" />
+ <ClCompile Include="..\Common\libzip\zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_call.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_function.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_read.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_window.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c" />
+ <ClCompile Include="..\Common\libzip\zip_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_string.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c" />
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c" />
+ <ClCompile Include="..\Common\zlib\adler32.c" />
+ <ClCompile Include="..\Common\zlib\crc32.c" />
+ <ClCompile Include="..\Common\zlib\deflate.c" />
+ <ClCompile Include="..\Common\zlib\inffast.c" />
+ <ClCompile Include="..\Common\zlib\inflate.c" />
+ <ClCompile Include="..\Common\zlib\inftrees.c" />
+ <ClCompile Include="..\Common\zlib\trees.c" />
+ <ClCompile Include="..\Common\zlib\zutil.c" />
<ClCompile Include="FormatCom.cpp" />
<ClCompile Include="InPlace.c">
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsCpp</CompileAs>
@@ -322,8 +461,24 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt Format-x64.exe" &gt;NUL:
<ClInclude Include="..\Common\Exception.h" />
<ClInclude Include="..\Common\Fat.h" />
<ClInclude Include="..\Common\Format.h" />
+ <ClInclude Include="..\Common\libzip\compat.h" />
+ <ClInclude Include="..\Common\libzip\config.h" />
+ <ClInclude Include="..\Common\libzip\zconf.h" />
+ <ClInclude Include="..\Common\libzip\zip.h" />
+ <ClInclude Include="..\Common\libzip\zipint.h" />
+ <ClInclude Include="..\Common\libzip\zipwin32.h" />
<ClInclude Include="..\Common\XUnzip.h" />
<ClInclude Include="..\Common\XZip.h" />
+ <ClInclude Include="..\Common\zlib\crc32.h" />
+ <ClInclude Include="..\Common\zlib\deflate.h" />
+ <ClInclude Include="..\Common\zlib\inffast.h" />
+ <ClInclude Include="..\Common\zlib\inffixed.h" />
+ <ClInclude Include="..\Common\zlib\inflate.h" />
+ <ClInclude Include="..\Common\zlib\inftrees.h" />
+ <ClInclude Include="..\Common\zlib\trees.h" />
+ <ClInclude Include="..\Common\zlib\zconf.h" />
+ <ClInclude Include="..\Common\zlib\zlib.h" />
+ <ClInclude Include="..\Common\zlib\zutil.h" />
<ClInclude Include="FormatCom.h" />
<ClInclude Include="..\Common\GfMul.h" />
<ClInclude Include="InPlace.h" />
diff --git a/src/Format/Format.vcxproj.filters b/src/Format/Format.vcxproj.filters
index 03d2273..07e68e5 100644
--- a/src/Format/Format.vcxproj.filters
+++ b/src/Format/Format.vcxproj.filters
@@ -19,6 +19,12 @@
<Filter Include="Resource Files\Common">
<UniqueIdentifier>{881fda51-0ca5-4603-9de7-c618932554b4}</UniqueIdentifier>
</Filter>
+ <Filter Include="Source Files\Common\libzip">
+ <UniqueIdentifier>{89e6575e-aa9c-47e4-8280-47d282b11228}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Common\zlib">
+ <UniqueIdentifier>{1ebcc85d-1ce3-488c-89e5-f8605df170e2}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="FormatCom.cpp">
@@ -108,11 +114,341 @@
<ClCompile Include="..\Common\Xts.c">
<Filter>Source Files\Common</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XZip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <Filter>Source Files\Common\libzip</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XUnzip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\zip_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_err_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fclose.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fread.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_hash.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_io_util.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_memdup.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_call.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_function.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_read.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_window.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_string.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\adler32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\crc32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\deflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inffast.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inftrees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\trees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\zutil.c">
+ <Filter>Source Files\Common\zlib</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -220,6 +556,54 @@
<ClInclude Include="..\Common\XUnzip.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Common\libzip\compat.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\config.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zconf.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zip.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipint.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipwin32.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\crc32.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\deflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffast.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffixed.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inftrees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\trees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zconf.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zlib.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zutil.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\Boot\Windows\Release_Serpent_SHA2\BootSector.bin">
diff --git a/src/Format/InPlace.c b/src/Format/InPlace.c
index cfae573..f37cb8b 100644
--- a/src/Format/InPlace.c
+++ b/src/Format/InPlace.c
@@ -605,7 +605,7 @@ int EncryptPartitionInPlaceBegin (volatile FORMAT_VOL_PARAMETERS *volParams, vol
}
// Fill the reserved sectors of the backup header area with random data
- nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, dataAreaSize, FALSE, TRUE, TRUE);
+ nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, cryptoInfo, dataAreaSize, FALSE, TRUE);
if (nStatus != ERR_SUCCESS)
goto closing_seq;
@@ -1122,7 +1122,7 @@ inplace_enc_read:
}
// Fill the reserved sectors of the header area with random data
- nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, headerCryptoInfo, masterCryptoInfo->VolumeSize.Value, TRUE, FALSE, TRUE);
+ nStatus = WriteRandomDataToReservedHeaderAreas (hwndDlg, dev, headerCryptoInfo, masterCryptoInfo->VolumeSize.Value, TRUE, FALSE);
if (nStatus != ERR_SUCCESS)
goto closing_seq;
diff --git a/src/Format/Tcformat.c b/src/Format/Tcformat.c
index 66ec3ac..d83d9f4 100644
--- a/src/Format/Tcformat.c
+++ b/src/Format/Tcformat.c
@@ -8157,7 +8157,7 @@ retryCDDriveCheck:
try
{
- BootEncObj->RestartComputer ();
+ BootEncObj->RestartComputer (bSystemIsGPT);
}
catch (Exception &e)
{
@@ -10112,7 +10112,7 @@ static void AfterWMInitTasks (HWND hwndDlg)
try
{
- BootEncObj->RestartComputer ();
+ BootEncObj->RestartComputer (bSystemIsGPT);
}
catch (Exception &e)
{
diff --git a/src/License.html b/src/License.html
index c839cd0..333aa21 100644
--- a/src/License.html
+++ b/src/License.html
@@ -163,8 +163,7 @@ The free distribution and use of this software is allowed (with or without chang
This software is provided 'as is' with no explicit or implied warranties in respect of its properties, including, but not limited to, correctness and/or fitness for purpose.<br>
____________________________________________________________<br>
<br>
- Copyright (C) 2002-2004 Mark Adler, all rights reserved<br>
- version 1.8, 9 Jan 2004<br>
+ Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler.<br>
<br>
This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software.<br>
<br>
@@ -174,6 +173,48 @@ Permission is granted to anyone to use this software for any purpose, including
<li> Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.</li>
<li> This notice may not be removed or altered from any source distribution.</li>
</ol>
+ Jean-loup Gailly Mark Adler<br>
+ jloup@gzip.org madler@alumni.caltech.edu<br>
+____________________________________________________________<br>
+<br>
+ Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner<br>
+ <br>
+ The authors can be contacted at <libzip@nih.at><br>
+ <br>
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:<br>
+ <br>
+<ol>
+ <li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li>
+ <li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
+ <li>The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission.</li>
+</ol>
+<br>
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br>
+____________________________________________________________<br>
+<br>
+Copyright (c) 2013, Alexey Degtyarev. All rights reserved.<br>
+<br>
+________________________________________________________<br>
+<br>
+ Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov<br>
+ <br>
+ This program and the accompanying materials are licensed and made available under the terms and conditions of the GNU Lesser General Public License, version 3.0 (LGPL-3.0).<br>
+ <br>
+ The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0<br>
+____________________________________________________________<br>
+<br>
+ Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd. <br>
+ <br>
+ All rights reserved.<br>
+ <br>
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:<br>
+ <br>
+<ol>
+ <li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li>
+ <li>Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.</li>
+</ol>
+<br>
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<br>
____________________________________________________________<br>
</body>
</html>
diff --git a/src/License.txt b/src/License.txt
index 819e165..5a638ac 100644
--- a/src/License.txt
+++ b/src/License.txt
@@ -679,76 +679,58 @@ warranties in respect of its properties, including, but not
limited to, correctness and/or fitness for purpose.
____________________________________________________________
-Copyright (C) 2002-2004 Mark Adler, all rights reserved
-version 1.8, 9 Jan 2004
-
-This software is provided 'as-is', without any express or
-implied warranty. In no event will the author be held liable
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you
- must not claim that you wrote the original software. If you
- use this software in a product, an acknowledgment in the
- product documentation would be appreciated but is not
- required.
-2. Altered source versions must be plainly marked as such, and
- must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source
- distribution.
+Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
____________________________________________________________
-Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
-
-For the purposes of this copyright and license, "Info-ZIP" is defined as
-the following set of individuals:
-
-Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
-Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase,
-Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
-David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
-Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
-Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler,
-Antoine Verheijen, Paul von Behren, Rich Wales, Mike White
-
-This software is provided "as is", without warranty of any kind, express
-or implied. In no event shall Info-ZIP or its contributors be held liable
-for any direct, indirect, incidental, special or consequential damages
-arising out of the use of or inability to use this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
- 1. Redistributions of source code must retain the above copyright notice,
- definition, disclaimer, and this list of conditions.
-
- 2. Redistributions in binary form (compiled executables) must reproduce
- the above copyright notice, definition, disclaimer, and this list of
- conditions in documentation and/or other materials provided with the
- distribution. The sole exception to this condition is redistribution
- of a standard UnZipSFX binary as part of a self-extracting archive;
- that is permitted without inclusion of this license, as long as the
- normal UnZipSFX banner has not been removed from the binary or disabled.
-
- 3. Altered versions--including, but not limited to, ports to new
- operating systems, existing ports with new graphical interfaces, and
- dynamic, shared, or static library versions--must be plainly marked
- as such and must not be misrepresented as being the original source.
- Such altered versions also must not be misrepresented as being
- Info-ZIP releases--including, but not limited to, labeling of the
- altered versions with the names "Info-ZIP" (or any variation thereof,
- including, but not limited to, different capitalizations),
- "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of
- Info-ZIP. Such altered versions are further prohibited from
- misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or
- of the Info-ZIP URL(s).
-
- 4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip",
- "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its
- own source and binary releases.
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
____________________________________________________________
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
@@ -760,3 +742,31 @@ version 3.0 (LGPL-3.0).
The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0
____________________________________________________________
+Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+____________________________________________________________
diff --git a/src/Main/Forms/AboutDialog.cpp b/src/Main/Forms/AboutDialog.cpp
index 8949673..214dd27 100644
--- a/src/Main/Forms/AboutDialog.cpp
+++ b/src/Main/Forms/AboutDialog.cpp
@@ -51,14 +51,21 @@ namespace VeraCrypt
L"Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson, "
L"Lars Knudsen, Ross Anderson, Eli Biham, "
L"Joan Daemen, Vincent Rijmen, "
+ L"Jean-loup Gailly, Mark Adler, "
L"Phillip Rogaway, "
- L"Hans Dobbertin, Antoon Bosselaers, Bart Preneel, "
+ L"Hans Dobbertin, Antoon Bosselaers, Bart Preneel, Jack Lloyd"
L"Paulo Barreto, Brian Gladman, Wei Dai, Peter Gutmann, and many others.\n\n"
L"Portions of this software:\n"
+ L"Copyright \xA9 2013-2016 IDRIX. All rights reserved.\n"
L"Copyright \xA9 2003-2012 TrueCrypt Developers Association. All Rights Reserved.\n"
L"Copyright \xA9 1998-2000 Paul Le Roux. All Rights Reserved.\n"
L"Copyright \xA9 1998-2008 Brian Gladman. All Rights Reserved.\n"
+ L"Copyright \xA9 1995-2013 Jean-loup Gailly and Mark Adler.\n"
+ L"Copyright \xA9 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov.\n"
+ L"Copyright \xA9 Dieter Baron and Thomas Klausner.\n"
+ L"Copyright \xA9 2013, Alexey Degtyarev. All rights reserved.\n"
+ L"Copyright \xA9 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.\n\n"
L"\nThis software as a whole:\n"
L"Copyright \xA9 2013-2016 IDRIX. All rights reserved.\n\n"
diff --git a/src/Main/Forms/EncryptionOptionsWizardPage.cpp b/src/Main/Forms/EncryptionOptionsWizardPage.cpp
index f7216b8..c36c7ff 100644
--- a/src/Main/Forms/EncryptionOptionsWizardPage.cpp
+++ b/src/Main/Forms/EncryptionOptionsWizardPage.cpp
@@ -80,8 +80,6 @@ namespace VeraCrypt
EncryptionAlgorithmStaticText->SetLabel (LangString["TWOFISH_HELP"]);
else if (typeid (*ea) == typeid (Camellia))
EncryptionAlgorithmStaticText->SetLabel (LangString["CAMELLIA_HELP"]);
- else if (typeid (*ea) == typeid (GOST89))
- EncryptionAlgorithmStaticText->SetLabel (LangString["GOST89_HELP"]);
else if (typeid (*ea) == typeid (Kuznyechik))
EncryptionAlgorithmStaticText->SetLabel (LangString["KUZNYECHIK_HELP"]);
else
diff --git a/src/Main/Forms/VolumeCreationWizard.cpp b/src/Main/Forms/VolumeCreationWizard.cpp
index 05568f8..776e98e 100644
--- a/src/Main/Forms/VolumeCreationWizard.cpp
+++ b/src/Main/Forms/VolumeCreationWizard.cpp
@@ -807,6 +807,7 @@ namespace VeraCrypt
if (-1 == Pim)
{
// PIM invalid: don't go anywhere
+ Gui->ShowError ("PIM_TOO_BIG");
return GetCurrentStep();
}
diff --git a/src/Main/Forms/VolumePimWizardPage.cpp b/src/Main/Forms/VolumePimWizardPage.cpp
index 723ca8c..8ce2304 100644
--- a/src/Main/Forms/VolumePimWizardPage.cpp
+++ b/src/Main/Forms/VolumePimWizardPage.cpp
@@ -39,7 +39,8 @@ namespace VeraCrypt
if (pimStr.IsEmpty())
return 0;
if (((size_t) wxNOT_FOUND == pimStr.find_first_not_of (wxT("0123456789")))
- && pimStr.ToLong (&pim))
+ && pimStr.ToLong (&pim)
+ && pim <= MAX_PIM_VALUE)
return (int) pim;
else
return -1;
diff --git a/src/Main/GraphicUserInterface.cpp b/src/Main/GraphicUserInterface.cpp
index 77a9524..9ff259c 100644
--- a/src/Main/GraphicUserInterface.cpp
+++ b/src/Main/GraphicUserInterface.cpp
@@ -1163,11 +1163,7 @@ namespace VeraCrypt
{
url = L"https://veracrypt.codeplex.com/wikipage?title=Camellia";
}
- else if (linkId == L"GOST89")
- {
- url = L"https://veracrypt.codeplex.com/wikipage?title=GOST89";
- }
- else if (linkId == L"Kuznyechik")
+ else if (linkId == L"kuznyechik")
{
url = L"https://veracrypt.codeplex.com/wikipage?title=Kuznyechik";
}
diff --git a/src/Main/Main.make b/src/Main/Main.make
index f4f254e..92865ef 100644
--- a/src/Main/Main.make
+++ b/src/Main/Main.make
@@ -106,8 +106,11 @@ endif
#------ FUSE configuration ------
+ifeq "$(PLATFORM)" "MacOSX"
+FUSE_LIBS = $(shell pkg-config osxfuse --libs)
+else
FUSE_LIBS = $(shell pkg-config fuse --libs)
-
+endif
#------ Executable ------
diff --git a/src/Main/UserInterface.cpp b/src/Main/UserInterface.cpp
index 8d4b701..978a037 100644
--- a/src/Main/UserInterface.cpp
+++ b/src/Main/UserInterface.cpp
@@ -493,7 +493,7 @@ namespace VeraCrypt
EX2MSG (UnsupportedTrueCryptFormat, LangString["UNSUPPORTED_TRUECRYPT_FORMAT"]);
#ifdef TC_MACOSX
- EX2MSG (HigherFuseVersionRequired, _("VeraCrypt requires OSXFUSE 2.3 or later with MacFUSE compatibility layer installer.\nPlease ensure that you have selected this compatibility layer during OSXFUSE installation."));
+ EX2MSG (HigherFuseVersionRequired, _("VeraCrypt requires OSXFUSE 2.5 or above."));
#endif
#undef EX2MSG
diff --git a/src/Makefile b/src/Makefile
index 0f7ac32..7bfc5ad 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -129,6 +129,7 @@ export PLATFORM_ARCH := "Unknown"
export PLATFORM_UNSUPPORTED := 0
export CPU_ARCH ?= unknown
+export SIMD_SUPPORTED := 0
ARCH = $(shell uname -p)
ifeq "$(ARCH)" "unknown"
@@ -149,9 +150,11 @@ endif
ifeq "$(CPU_ARCH)" "x86"
PLATFORM_ARCH := i386
+ SIMD_SUPPORTED := 1
C_CXX_FLAGS += -D TC_ARCH_X86
else ifeq "$(CPU_ARCH)" "x64"
PLATFORM_ARCH := amd64
+ SIMD_SUPPORTED := 1
C_CXX_FLAGS += -D TC_ARCH_X64
endif
@@ -163,23 +166,27 @@ ifeq "$(shell uname -s)" "Linux"
PLATFORM := Linux
C_CXX_FLAGS += -DTC_UNIX -DTC_LINUX
- CFLAGS += -msse2
- CXXFLAGS += -msse2
-
- GCC_GTEQ_440 := $(shell expr `gcc -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 40400)
- GCC_GTEQ_430 := $(shell expr `gcc -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 40300)
- ifeq "$(GCC_GTEQ_440)" "1"
- CFLAGS += -maes
- CXXFLAGS += -maes
- endif
-
- ifeq "$(GCC_GTEQ_430)" "1"
- ifeq "$(origin SSSE3)" "command line"
- CFLAGS += -mssse3 -msse4.1
+ ifeq "$(SIMD_SUPPORTED)" "1"
+ CFLAGS += -msse2
+ CXXFLAGS += -msse2
+
+ GCC_GTEQ_440 := $(shell expr `gcc -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 40400)
+ GCC_GTEQ_430 := $(shell expr `gcc -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 40300)
+ ifeq "$(GCC_GTEQ_440)" "1"
+ CFLAGS += -maes
+ CXXFLAGS += -maes
endif
- ifeq "$(origin SSE41)" "command line"
- CXXFLAGS += -mssse3 -msse4.1
+ ifeq "$(GCC_GTEQ_430)" "1"
+ ifeq "$(origin SSSE3)" "command line"
+ CFLAGS += -mssse3
+ CXXFLAGS += -mssse3
+ endif
+
+ ifeq "$(origin SSE41)" "command line"
+ CFLAGS += -mssse3 -msse4.1
+ CXXFLAGS += -mssse3 -msse4.1
+ endif
endif
endif
@@ -233,6 +240,19 @@ ifeq "$(shell uname -s)" "Darwin"
CPU_ARCH = x86
endif
+ CFLAGS += -msse2
+ CXXFLAGS += -msse2
+
+ ifeq "$(origin SSSE3)" "command line"
+ CFLAGS += -mssse3
+ CXXFLAGS += -mssse3
+ endif
+
+ ifeq "$(origin SSE41)" "command line"
+ CFLAGS += -mssse3 -msse4.1
+ CXXFLAGS += -mssse3 -msse4.1
+ endif
+
AS := $(BASE_DIR)/Build/Tools/MacOSX/nasm
ASFLAGS += --prefix _
diff --git a/src/Mount/Mount.rc b/src/Mount/Mount.rc
index 8bd5f27..6c50094 100644
--- a/src/Mount/Mount.rc
+++ b/src/Mount/Mount.rc
@@ -1,739 +1,739 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-#include "..\\common\\resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HEADER
-//
-
-IDR_MOUNT_RSRC_HEADER HEADER "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// TYPELIB
-//
-
-IDR_MOUNT_TLB TYPELIB "Mount.tlb"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_PREFERENCES_DLG DIALOGEX 0, 0, 336, 333
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Preferences"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Mount volumes as read-only",IDC_PREF_MOUNT_READONLY,
- "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,11,11,150,16
- CONTROL "Mount volumes as removable media",IDC_PREF_MOUNT_REMOVABLE,
- "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,162,11,165,16
- CONTROL "Enabled",IDC_PREF_BKG_TASK_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,44,111,10
- CONTROL "Exit when there are no mounted volumes",IDC_CLOSE_BKG_TASK_WHEN_NOVOL,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,44,188,10
- CONTROL "Start VeraCrypt Background Task",IDC_PREF_LOGON_START,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,75,126,10
- CONTROL "Mount all device-hosted VeraCrypt volumes",IDC_PREF_LOGON_MOUNT_DEVICES,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,75,188,10
- CONTROL "User logs off",IDC_PREF_DISMOUNT_LOGOFF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,104,114,11
- CONTROL "User session locked",IDC_PREF_DISMOUNT_SESSION_LOCKED,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,105,130,11
- CONTROL "Screen saver is launched",IDC_PREF_DISMOUNT_SCREENSAVER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,116,114,10
- CONTROL "Entering power saving mode",IDC_PREF_DISMOUNT_POWERSAVING,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,115,130,11
- CONTROL "Auto-dismount volume after no data has been read/written to it for",IDC_PREF_DISMOUNT_INACTIVE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,128,246,11
- EDITTEXT IDC_PREF_DISMOUNT_INACTIVE_TIME,258,127,27,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
- CONTROL "Force auto-dismount even if volume contains open files or directories",IDC_PREF_FORCE_AUTO_DISMOUNT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,141,294,10
- CONTROL "Open Explorer window for successfully mounted volume",IDC_PREF_OPEN_EXPLORER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,171,316,11
- CONTROL "Use a different taskbar icon when there are mounted volumes",IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,184,314,10
- CONTROL "Preserve modification timestamp of file containers",IDC_PRESERVE_TIMESTAMPS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,196,316,10
- CONTROL "Make disconnected network drives available for mounting",IDC_SHOW_DISCONNECTED_NETWORK_DRIVES,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,208,316,10
- CONTROL "Cache passwords in driver memory",IDC_PREF_CACHE_PASSWORDS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,254,146,11
- CONTROL "Wipe cached passwords on exit",IDC_PREF_WIPE_CACHE_ON_EXIT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,254,165,11
- CONTROL "Temporary Cache password during ""Mount Favorite Volumes"" operations",IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,268,294,11
- CONTROL "Wipe cached passwords on auto-dismount",IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,282,296,11
- CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,296,296,10
- PUSHBUTTON "More Settings...",IDC_MORE_SETTINGS,5,317,85,14
- DEFPUSHBUTTON "OK",IDOK,225,317,50,14
- PUSHBUTTON "Cancel",IDCANCEL,281,317,50,14
- GROUPBOX "Windows",IDT_WINDOWS_RELATED_SETTING,4,160,328,76
- GROUPBOX "Default Mount Options",IDT_DEFAULT_MOUNT_OPTIONS,4,3,328,26
- GROUPBOX "VeraCrypt Background Task",IDT_TASKBAR_ICON,4,33,328,26
- GROUPBOX "Auto-Dismount",IDT_AUTO_DISMOUNT,4,94,328,62
- LTEXT "minutes",IDT_MINUTES,289,129,39,10
- LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,104,71,20
- GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,243,328,68
- GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28
- CONTROL "Don't show wait message dialog when performing operations",IDC_HIDE_WAITING_DIALOG,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,220,316,10
-END
-
-IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 224
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Volume Properties"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,114,203,55,14
- CONTROL "",IDC_VOLUME_PROPERTIES_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,6,269,192
-END
-
-IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 346, 245
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Change Password or Keyfiles"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_OLD_PASSWORD,89,14,181,13,ES_PASSWORD | ES_AUTOHSCROLL
- COMBOBOX IDC_PKCS5_OLD_PRF_ID,89,33,97,90,CBS_DROPDOWNLIST | WS_TABSTOP
- CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,35,83,10
- EDITTEXT IDC_OLD_PIM,89,51,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,59,115,10
- CONTROL "Use keyfiles",IDC_ENABLE_KEYFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,72,109,10
- PUSHBUTTON "Keyfiles...",IDC_KEYFILES,203,70,67,14
- CONTROL "Display password",IDC_SHOW_PASSWORD_CHPWD_ORI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,85,138,10,WS_EX_TRANSPARENT
- EDITTEXT IDC_PASSWORD,89,121,181,13,ES_PASSWORD | ES_AUTOHSCROLL
- EDITTEXT IDC_VERIFY,89,137,181,13,ES_PASSWORD | ES_AUTOHSCROLL
- EDITTEXT IDC_PIM,89,154,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Use PIM",IDC_NEW_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,161,97,10
- CONTROL "Use keyfiles",IDC_ENABLE_NEW_KEYFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,172,110,11
- PUSHBUTTON "Keyfiles...",IDC_NEW_KEYFILES,202,170,68,14
- CONTROL "Display password",IDC_SHOW_PASSWORD_CHPWD_NEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,184,180,11,WS_EX_TRANSPARENT
- COMBOBOX IDC_PKCS5_PRF_ID,89,199,181,90,CBS_DROPDOWNLIST | WS_TABSTOP
- COMBOBOX IDC_WIPE_MODE,89,218,181,90,CBS_DROPDOWNLIST | WS_TABSTOP
- DEFPUSHBUTTON "OK",IDOK,280,7,59,14
- PUSHBUTTON "Cancel",IDCANCEL,280,24,59,14
- RTEXT "Password:",IDT_PASSWORD,12,16,72,8
- RTEXT "Password:",IDT_NEW_PASSWORD,8,124,76,8
- RTEXT "Confirm Password:",IDT_CONFIRM_PASSWORD,9,140,75,16
- RTEXT "PKCS-5 PRF:",IDT_NEW_PKCS5_PRF,9,200,74,10,SS_CENTERIMAGE
- GROUPBOX "Current",IDT_CURRENT,6,3,270,97
- GROUPBOX "New",IDT_NEW,6,108,270,130
- RTEXT "Wipe mode:",IDT_WIPE_MODE,9,220,74,8,0,WS_EX_RIGHT
- RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,12,34,74,10,SS_CENTERIMAGE
- RTEXT "Volume PIM:",IDT_OLD_PIM,12,54,74,10,NOT WS_VISIBLE
- LTEXT "(Empty or 0 for default iterations)",IDC_OLD_PIM_HELP,135,54,196,8,NOT WS_VISIBLE
- RTEXT "Volume PIM:",IDT_PIM,9,157,75,16,NOT WS_VISIBLE
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,135,157,197,8,NOT WS_VISIBLE
-END
-
-IDD_MOUNT_DLG DIALOGEX 0, 0, 375, 271
-STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt"
-MENU IDR_MENU
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- CONTROL "",IDC_DRIVELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,5,360,135
- PUSHBUTTON "&Create Volume",IDC_CREATE_VOLUME,16,159,84,14
- PUSHBUTTON "&Volume Properties...",IDC_VOLUME_PROPERTIES,146,159,84,14
- PUSHBUTTON "&Wipe Cache",IDC_WIPE_CACHE,276,159,84,14
- COMBOBOX IDC_VOLUME,56,192,212,74,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
- CONTROL "&Never save history",IDC_NO_HISTORY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,56,213,122,10
- PUSHBUTTON "Volume &Tools...",IDC_VOLUME_TOOLS,184,211,84,14
- PUSHBUTTON "Select &File...",IDC_SELECT_FILE,276,192,84,14
- PUSHBUTTON "Select D&evice...",IDC_SELECT_DEVICE,276,211,84,14
- DEFPUSHBUTTON "OK",IDOK,8,243,84,18,WS_GROUP
- PUSHBUTTON "&Auto-Mount Devices",IDC_MOUNTALL,100,243,84,18
- PUSHBUTTON "Di&smount All",IDC_UNMOUNTALL,192,243,84,18,WS_GROUP
- PUSHBUTTON "E&xit",IDC_EXIT,284,243,84,18,WS_GROUP
- CONTROL 112,IDC_LOGO,"Static",SS_BITMAP | SS_NOTIFY | WS_BORDER,13,190,33,31
- GROUPBOX "Volume",IDT_VOLUME,8,179,360,53
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,2,0,372,147
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,282,242,88,20
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,190,242,88,20
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,6,242,88,20
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,98,242,88,20
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,2,151,372,119
-END
-
-IDD_PASSWORD_DLG DIALOGEX 0, 0, 330, 103
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
-CAPTION "Enter VeraCrypt Volume Password"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_PASSWORD,69,8,179,14,ES_PASSWORD | ES_AUTOHSCROLL
- COMBOBOX IDC_PKCS5_PRF_ID,69,26,96,90,CBS_DROPDOWNLIST | WS_TABSTOP
- CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,28,76,10
- EDITTEXT IDC_PIM,69,43,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
- CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,48,97,10
- CONTROL "Cache passwords and keyfil&es in memory",IDC_CACHE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,61,153,10
- CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,74,83,10
- CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,87,99,11
- PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,173,84,75,14
- PUSHBUTTON "Mount Opti&ons...",IDC_MOUNT_OPTIONS,252,84,69,14
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,115,46,199,8,NOT WS_VISIBLE
- DEFPUSHBUTTON "OK",IDOK,252,8,69,14
- PUSHBUTTON "Cancel",IDCANCEL,252,25,69,14
- RTEXT "Password:",IDT_PASSWORD,0,10,65,13
- RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,27,65,11
- RTEXT "Volume PIM:",IDT_PIM,0,46,65,8,NOT WS_VISIBLE
-END
-
-IDD_TRAVELER_DLG DIALOGEX 0, 0, 300, 299
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Traveler Disk Setup"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- EDITTEXT IDC_DIRECTORY,17,29,205,13,ES_AUTOHSCROLL | ES_READONLY
- PUSHBUTTON "Browse...",IDC_BROWSE_DIRS,228,28,57,14
- CONTROL "Include VeraCrypt Volume Creation Wizard",IDC_COPY_WIZARD,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,48,258,10
- CONTROL "Do nothing",IDC_AUTORUN_DISABLE,"Button",BS_AUTORADIOBUTTON,15,115,262,10
- CONTROL "&Start VeraCrypt",IDC_AUTORUN_START,"Button",BS_AUTORADIOBUTTON,15,126,262,11
- CONTROL "&Auto-mount VeraCrypt volume (specified below)",IDC_AUTORUN_MOUNT,
- "Button",BS_AUTORADIOBUTTON,15,138,262,11
- EDITTEXT IDC_VOLUME_NAME,21,175,194,13,ES_AUTOHSCROLL | WS_DISABLED
- PUSHBUTTON "Browse...",IDC_BROWSE_FILES,221,174,57,14,WS_DISABLED
- COMBOBOX IDC_DRIVELIST,120,193,96,69,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
- CONTROL "Open &Explorer window for mounted volume",IDC_TRAVEL_OPEN_EXPLORER,
- "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,211,256,10
- CONTROL "Mount volume as read-&only",IDC_MOUNT_READONLY,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,224,256,10
- CONTROL "&Cache password in driver memory",IDC_TRAV_CACHE_PASSWORDS,
- "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,237,256,10
- DEFPUSHBUTTON "Create",IDC_CREATE,173,278,57,14
- PUSHBUTTON "Close",IDCLOSE,236,278,57,14
- GROUPBOX "File Settings",IDT_FILE_SETTINGS,6,7,287,71
- GROUPBOX "AutoRun Configuration (autorun.inf)",IDT_AUTORUN,5,88,288,185
- LTEXT "VeraCrypt volume to mount (relative to traveler disk root):",IDT_TRAVELER_MOUNT,21,165,248,8,WS_DISABLED
- RTEXT "Mount volume as drive letter:",IDT_MOUNT_LETTER,18,195,99,8,WS_DISABLED
- LTEXT "Create traveler disk files at (traveler disk root directory):",IDT_TRAVEL_ROOT,18,19,259,8
- GROUPBOX "Mount Settings",IDT_MOUNT_SETTINGS,13,152,272,114,WS_DISABLED
- LTEXT "Upon insertion of traveler disk: ",IDT_TRAVEL_INSERTION,13,102,263,8
- CONTROL "Include VeraCrypt Volume Expander",IDC_COPY_EXPANDER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,62,258,10
- CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM,
- "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,250,256,10
-END
-
-IDD_HOTKEYS_DLG DIALOGEX 0, 0, 389, 257
-STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - System-Wide Hot Keys"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- CONTROL "",IDC_HOTKEY_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,375,115
- EDITTEXT IDC_HOTKEY_KEY,108,140,190,13,ES_AUTOHSCROLL
- PUSHBUTTON "Assign",IDC_HOTKEY_ASSIGN,304,140,59,14
- CONTROL "Ctrl",IDC_HK_MOD_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,158,46,10,WS_EX_TRANSPARENT
- CONTROL "Shift",IDC_HK_MOD_SHIFT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,158,49,10,WS_EX_TRANSPARENT
- CONTROL "Alt",IDC_HK_MOD_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,216,158,43,10,WS_EX_TRANSPARENT
- CONTROL "Win",IDC_HK_MOD_WIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,266,158,34,10,WS_EX_TRANSPARENT
- PUSHBUTTON "Remove",IDC_HOTKEY_REMOVE,304,158,59,14
- CONTROL "Play system notification sound after successful hot-key dismount",IDC_HK_DISMOUNT_PLAY_SOUND,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,201,348,10
- CONTROL "Display balloon tooltip after successful hot-key dismount",IDC_HK_DISMOUNT_BALLOON_TOOLTIP,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,213,351,10,WS_EX_TRANSPARENT
- DEFPUSHBUTTON "OK",IDOK,260,236,59,14
- PUSHBUTTON "Cancel",IDCANCEL,323,236,59,14
- PUSHBUTTON "Reset",IDC_RESET_HOTKEYS,7,236,59,14
- RTEXT "Key to assign:",IDT_HOTKEY_KEY,15,142,86,8
- GROUPBOX "Hot Key Options",IDT_DISMOUNT_ACTION,7,188,375,42
- GROUPBOX "Shortcut",IDT_ASSIGN_HOTKEY,7,127,375,53
-END
-
-IDD_TOKEN_PREFERENCES DIALOGEX 0, 0, 316, 199
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Security Token Preferences"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- EDITTEXT IDC_PKCS11_MODULE,16,23,204,13,ES_AUTOHSCROLL
- PUSHBUTTON "Select &Library...",IDC_SELECT_PKCS11_MODULE,226,22,75,14
- PUSHBUTTON "Auto-&Detect Library",IDC_AUTO_DETECT_PKCS11_MODULE,16,41,112,14
- CONTROL "&Close token session (log out) after a volume is successfully mounted",IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT,
- "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,16,154,284,9
- DEFPUSHBUTTON "OK",IDOK,205,178,50,14
- PUSHBUTTON "Cancel",IDCANCEL,259,178,50,14
- GROUPBOX "PKCS #11 Library Path",IDT_PKCS11_LIB_PATH,7,7,302,129
- GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,7,140,302,30
- LTEXT "",IDT_PKCS11_LIB_HELP,16,63,286,65
-END
-
-IDD_EFI_SYSENC_SETTINGS DIALOGEX 0, 0, 370, 139
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - System Encryption Settings"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "&Cache pre-boot authentication password in driver memory (for mounting of non-system volumes)",IDC_BOOT_LOADER_CACHE_PASSWORD,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,79,339,10
- DEFPUSHBUTTON "OK",IDOK,257,115,50,14
- PUSHBUTTON "Cancel",IDCANCEL,313,115,50,14
- GROUPBOX "Boot Loader Screen Options",IDT_BOOT_LOADER_SCREEN_OPTIONS,8,7,355,53
- GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,8,64,355,44
- CONTROL "Include PIM when caching pre-boot authentication password",IDC_BOOT_LOADER_CACHE_PIM,
- "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,18,94,340,10
- CONTROL "Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)",IDC_DISABLE_BOOT_LOADER_PIM_PROMPT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,20,339,9
- CONTROL "Do not request Hash algorithm in the pre-boot authentication screen",IDC_DISABLE_BOOT_LOADER_HASH_PROMPT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,35,339,9
-END
-
-IDD_PERFORMANCE_SETTINGS DIALOGEX 0, 0, 370, 248
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Performance Options"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_HW_AES_SUPPORTED_BY_CPU,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,294,21,57,12,WS_EX_CLIENTEDGE
- CONTROL "Accelerate AES encryption/decryption by using the AES instructions of the processor (if available)",IDC_ENABLE_HARDWARE_ENCRYPTION,
- "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,18,41,340,17
- LTEXT "More information",IDC_MORE_INFO_ON_HW_ACCELERATION,18,61,165,10,SS_NOTIFY
- CONTROL "Do not use the following number of processors for encryption/decryption:",IDC_LIMIT_ENC_THREAD_POOL,
- "Button",BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,18,103,283,11
- COMBOBOX IDC_ENCRYPTION_FREE_CPU_COUNT,304,101,48,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- LTEXT "More information",IDC_MORE_INFO_ON_THREAD_BASED_PARALLELIZATION,18,159,165,10,SS_NOTIFY
- PUSHBUTTON "&Benchmark",IDC_BENCHMARK,7,227,59,14
- DEFPUSHBUTTON "OK",IDOK,257,227,50,14
- PUSHBUTTON "Cancel",IDCANCEL,313,227,50,14
- LTEXT "Processor (CPU) in this computer supports hardware acceleration for AES:",IDT_HW_AES_SUPPORTED_BY_CPU,18,23,273,9
- GROUPBOX "Hardware Acceleration",IDT_ACCELERATION_OPTIONS,7,6,355,74
- GROUPBOX "Thread-Based Parallelization",IDT_PARALLELIZATION_OPTIONS,7,84,355,93
- LTEXT "",IDT_LIMIT_ENC_THREAD_POOL_NOTE,18,126,334,33
- GROUPBOX "Driver Configuration",IDT_DRIVER_OPTIONS,7,183,356,36
- CONTROL "Enable extended disk control codes support",IDC_ENABLE_EXTENDED_IOCTL_SUPPORT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,198,337,10
-END
-
-IDD_FAVORITE_VOLUMES DIALOGEX 0, 0, 380, 368
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Favorite Volumes"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_FAVORITE_VOLUMES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,366,92
- PUSHBUTTON "Move &Up",IDC_FAVORITE_MOVE_UP,7,104,63,14
- PUSHBUTTON "Move &Down",IDC_FAVORITE_MOVE_DOWN,74,104,63,14
- PUSHBUTTON "&Remove",IDC_FAVORITE_REMOVE,310,104,63,14
- EDITTEXT IDC_FAVORITE_LABEL,18,225,344,13,ES_AUTOHSCROLL
- CONTROL "Mount selected volume as read-o&nly",IDC_FAVORITE_MOUNT_READONLY,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,255,349,10
- CONTROL "Mount selected volume as remo&vable medium",IDC_FAVORITE_MOUNT_REMOVABLE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,269,349,10
- CONTROL "Mount selected volume upon log&on",IDC_FAVORITE_MOUNT_ON_LOGON,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,283,349,10
- CONTROL "Mount selected volume when its host device gets &connected",IDC_FAVORITE_MOUNT_ON_ARRIVAL,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,297,349,10
- CONTROL "Open &Explorer window for selected volume when successfully mounted",IDC_FAVORITE_OPEN_EXPLORER_WIN_ON_MOUNT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,311,349,11
- CONTROL "Do not mount selected volume when 'Mount Favorite Volumes' &hot key is pressed",IDC_FAVORITE_DISABLE_HOTKEY,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,326,349,11
- LTEXT "Help on favorite volumes",IDC_FAVORITES_HELP_LINK,17,351,237,10,SS_NOTIFY
- DEFPUSHBUTTON "OK",IDOK,269,347,50,14
- PUSHBUTTON "Cancel",IDCANCEL,323,347,50,14
- GROUPBOX "",IDC_FAV_VOL_OPTIONS_GROUP_BOX,7,123,366,219
- LTEXT "Label of selected favorite volume:",IDT_FAVORITE_LABEL,18,215,202,8
- GROUPBOX "Global Settings",IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX,7,300,366,42
- EDITTEXT IDC_PIM,18,183,42,13,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,64,185,189,8
- LTEXT "Volume PIM:",IDT_PIM,18,173,65,8
- CONTROL "Display PIM",IDC_SHOW_PIM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,199,150,10
- CONTROL "Use favorite label as Explorer drive label",IDC_FAVORITE_USE_LABEL_IN_EXPLORER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,242,349,10
- LTEXT "Volume ID:",IDT_VOLUME_ID,18,131,57,8
- EDITTEXT IDC_FAVORITE_VOLUME_ID,18,141,344,14,ES_AUTOHSCROLL | ES_READONLY
- CONTROL "Use Volume ID to mount favorite",IDC_FAVORITE_USE_VOLUME_ID,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,159,337,10
-END
-
-IDD_DEFAULT_MOUNT_PARAMETERS DIALOGEX 0, 0, 167, 65
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - Mount Parameters"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- DEFPUSHBUTTON "OK",IDOK,57,44,50,14
- PUSHBUTTON "Cancel",IDCANCEL,111,44,50,14
- COMBOBOX IDC_PKCS5_PRF_ID,57,24,103,90,CBS_DROPDOWNLIST | WS_TABSTOP
- LTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,8,26,44,11
- CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,76,10
-END
-
-IDD_SYSENC_SETTINGS DIALOGEX 0, 0, 370, 286
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt - System Encryption Settings"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "Do not &show any texts in the pre-boot authentication screen (except the below custom message)",IDC_DISABLE_BOOT_LOADER_OUTPUT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,20,339,9
- EDITTEXT IDC_CUSTOM_BOOT_LOADER_MESSAGE,18,50,216,14,ES_AUTOHSCROLL
- CONTROL "&Cache pre-boot authentication password in driver memory (for mounting of non-system volumes)",IDC_BOOT_LOADER_CACHE_PASSWORD,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,192,339,10
- CONTROL "Allow pre-boot &authentication to be bypassed by pressing the Esc key (enables boot manager)",IDC_ALLOW_ESC_PBA_BYPASS,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,222,340,10
- DEFPUSHBUTTON "OK",IDOK,257,262,50,14
- PUSHBUTTON "Cancel",IDCANCEL,313,262,50,14
- LTEXT "Display this custom message in the pre-boot authentication screen (24 characters maximum):",IDT_CUSTOM_BOOT_LOADER_MESSAGE,18,39,337,8
- GROUPBOX "Boot Loader Screen Options",IDT_BOOT_LOADER_SCREEN_OPTIONS,8,7,355,165
- GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,8,177,355,75
- LTEXT "",IDC_CUSTOM_BOOT_LOADER_MESSAGE_HELP,18,72,337,73
- CONTROL "Disable ""Evil Maid"" attack detection",IDC_DISABLE_EVIL_MAID_ATTACK_DETECTION,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,237,340,10
- CONTROL "Include PIM when caching pre-boot authentication password",IDC_BOOT_LOADER_CACHE_PIM,
- "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,18,207,340,10
- CONTROL "Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)",IDC_DISABLE_BOOT_LOADER_PIM_PROMPT,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,157,339,9
-END
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_PREFERENCES_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 329
- TOPMARGIN, 7
- BOTTOMMARGIN, 331
- END
-
- IDD_VOLUME_PROPERTIES, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 277
- TOPMARGIN, 7
- BOTTOMMARGIN, 217
- END
-
- IDD_PASSWORDCHANGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 238
- END
-
- IDD_MOUNT_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 369
- BOTTOMMARGIN, 269
- END
-
- IDD_PASSWORD_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 321
- BOTTOMMARGIN, 98
- END
-
- IDD_TRAVELER_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 293
- TOPMARGIN, 7
- BOTTOMMARGIN, 292
- END
-
- IDD_HOTKEYS_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 382
- TOPMARGIN, 7
- BOTTOMMARGIN, 250
- END
-
- IDD_TOKEN_PREFERENCES, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 309
- TOPMARGIN, 7
- BOTTOMMARGIN, 192
- END
-
- IDD_EFI_SYSENC_SETTINGS, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 363
- TOPMARGIN, 7
- BOTTOMMARGIN, 129
- END
-
- IDD_PERFORMANCE_SETTINGS, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 363
- TOPMARGIN, 7
- BOTTOMMARGIN, 241
- END
-
- IDD_FAVORITE_VOLUMES, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 373
- TOPMARGIN, 7
- BOTTOMMARGIN, 361
- END
-
- IDD_DEFAULT_MOUNT_PARAMETERS, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 160
- TOPMARGIN, 7
- BOTTOMMARGIN, 58
- END
-
- IDD_SYSENC_SETTINGS, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 363
- TOPMARGIN, 7
- BOTTOMMARGIN, 276
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,13,0
- PRODUCTVERSION 1,18,13,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "IDRIX"
- VALUE "FileDescription", "VeraCrypt"
- VALUE "FileVersion", "1.18"
- VALUE "LegalTrademarks", "VeraCrypt"
- VALUE "OriginalFilename", "VeraCrypt.exe"
- VALUE "ProductName", "VeraCrypt"
- VALUE "ProductVersion", "1.18"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "#include ""..\\\\common\\\\resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#include ""..\\\\common\\\\common.rc""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_DRIVEICON BITMAP "Drive_icon_96dpi.bmp"
-IDB_DRIVEICON_MASK BITMAP "Drive_icon_mask_96dpi.bmp"
-IDB_LOGO_96DPI BITMAP "Logo_96dpi.bmp"
-IDB_LOGO_288DPI BITMAP "Logo_288dpi.bmp"
-IDB_SYS_DRIVEICON BITMAP "System_drive_icon_96dpi.bmp"
-IDB_SYS_DRIVEICON_MASK BITMAP "System_drive_icon_mask_96dpi.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU MENU
-BEGIN
- POPUP "&Volumes"
- BEGIN
- MENUITEM "Select File...", IDM_SELECT_FILE
- MENUITEM "Select Device...", IDM_SELECT_DEVICE
- MENUITEM SEPARATOR
- MENUITEM "Create New Volume...", IDM_CREATE_VOLUME
- MENUITEM "Permanently Decrypt...", IDM_DECRYPT_NONSYS_VOL
- MENUITEM "Resume Interrupted Process", IDM_RESUME_INTERRUPTED_PROC
- MENUITEM SEPARATOR
- MENUITEM "Mount Volume", IDM_MOUNT_VOLUME
- MENUITEM "Mount Volume with Options", IDM_MOUNT_VOLUME_OPTIONS
- MENUITEM "Auto-Mount All Device-Hosted Volumes", IDM_MOUNTALL
- MENUITEM SEPARATOR
- MENUITEM "Dismount Volume", IDM_UNMOUNT_VOLUME
- MENUITEM "Dismount All Mounted Volumes", IDM_UNMOUNTALL
- MENUITEM SEPARATOR
- MENUITEM "Change Volume Password...", IDM_CHANGE_PASSWORD
- MENUITEM "Add/Remove Keyfiles to/from Volume...", IDM_ADD_REMOVE_VOL_KEYFILES
- MENUITEM "Remove All Keyfiles from Volume...", IDM_REMOVE_ALL_KEYFILES_FROM_VOL
- MENUITEM "Set Header Key Derivation Algorithm...", IDM_CHANGE_HEADER_KEY_DERIV_ALGO
- MENUITEM SEPARATOR
- MENUITEM "Volume Properties", IDM_VOLUME_PROPERTIES
- END
- POPUP "S&ystem"
- BEGIN
- MENUITEM "Encrypt System Partition/Drive...", IDM_ENCRYPT_SYSTEM_DEVICE
- MENUITEM "Permanently Decrypt System Partition/Drive", IDM_PERMANENTLY_DECRYPT_SYS
- MENUITEM "Resume Interrupted Process", IDM_SYSENC_RESUME
- MENUITEM SEPARATOR
- MENUITEM "Create Hidden Operating System...", IDM_CREATE_HIDDEN_OS
- MENUITEM SEPARATOR
- MENUITEM "Create Rescue Disk...", IDM_CREATE_RESCUE_DISK
- MENUITEM "Verify Rescue Disk", IDM_VERIFY_RESCUE_DISK
- MENUITEM "Verify Rescue Disk Image", IDM_VERIFY_RESCUE_DISK_ISO
- MENUITEM SEPARATOR
- MENUITEM "Mount Without Pre-Boot &Authentication...", IDM_MOUNT_SYSENC_PART_WITHOUT_PBA
- MENUITEM SEPARATOR
- MENUITEM "Change Password...", IDM_CHANGE_SYS_PASSWORD
- MENUITEM "Set Header Key Derivation Algorithm...", IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO
- MENUITEM SEPARATOR
- MENUITEM "Properties...", IDM_SYSTEM_ENCRYPTION_STATUS
- MENUITEM SEPARATOR
- MENUITEM "Settings...", IDM_SYS_ENC_SETTINGS
- END
- POPUP "Favor&ites"
- BEGIN
- MENUITEM "Add Mounted Volume to Favorites...", IDM_ADD_VOLUME_TO_FAVORITES
- MENUITEM "Add Mounted Volume to System Favorites...", IDM_ADD_VOLUME_TO_SYSTEM_FAVORITES
- MENUITEM SEPARATOR
- MENUITEM "Organize Favorite Volumes...", IDM_ORGANIZE_FAVORITES
- MENUITEM "Organize System Favorite Volumes...", IDM_ORGANIZE_SYSTEM_FAVORITES
- MENUITEM SEPARATOR
- MENUITEM "Mount Favorite Volumes", IDM_MOUNT_FAVORITE_VOLUMES
- END
- POPUP "T&ools"
- BEGIN
- MENUITEM "Benchmark...", IDM_BENCHMARK
- MENUITEM "Test Vectors...", IDM_TEST_VECTORS
- MENUITEM SEPARATOR
- MENUITEM "Traveler Disk Setup...", IDM_TRAVELER
- MENUITEM "Volume Expander", IDM_VOLUME_EXPANDER
- MENUITEM "Volume Creation Wizard", IDM_VOLUME_WIZARD
- MENUITEM SEPARATOR
- MENUITEM "Keyfile Generator", IDM_KEYFILE_GENERATOR
- MENUITEM "Manage Security Token Keyfiles...", IDM_MANAGE_TOKEN_KEYFILES
- MENUITEM "Close All Security Token Sessions", IDM_CLOSE_ALL_TOKEN_SESSIONS
- MENUITEM SEPARATOR
- MENUITEM "Backup Volume Header...", IDM_BACKUP_VOL_HEADER
- MENUITEM "Restore Volume Header...", IDM_RESTORE_VOL_HEADER
- MENUITEM SEPARATOR
- MENUITEM "Refresh Drive Letters", IDM_REFRESH_DRIVE_LETTERS
- MENUITEM SEPARATOR
- MENUITEM "Clear Volume History", IDM_CLEAR_HISTORY
- MENUITEM "Wipe Cached Passwords", IDM_WIPE_CACHE
- END
- POPUP "Settin&gs"
- BEGIN
- MENUITEM "Language...", IDM_LANGUAGE
- MENUITEM "Hot Keys...", IDM_HOTKEY_SETTINGS
- MENUITEM SEPARATOR
- MENUITEM "System Encryption...", IDM_SYSENC_SETTINGS
- MENUITEM "System Favorite Volumes...", IDM_SYS_FAVORITES_SETTINGS
- MENUITEM SEPARATOR
- MENUITEM "Performance/Driver Configuration", IDM_PERFORMANCE_SETTINGS
- MENUITEM SEPARATOR
- MENUITEM "Default Keyfiles...", IDM_DEFAULT_KEYFILES
- MENUITEM "Default Mount Parameters...", IDM_DEFAULT_MOUNT_PARAMETERS
- MENUITEM "Security Tokens...", IDM_TOKEN_PREFERENCES
- MENUITEM SEPARATOR
- MENUITEM "Preferences...", IDM_PREFERENCES
- END
- POPUP "Hel&p"
- BEGIN
- MENUITEM "User's Guide", IDM_HELP
- MENUITEM "Online Help", IDM_ONLINE_HELP
- MENUITEM "Beginner's Tutorial", IDM_ONLINE_TUTORIAL
- MENUITEM "Frequently Asked Questions", IDM_FAQ
- MENUITEM SEPARATOR
- MENUITEM "VeraCrypt Website", IDM_WEBSITE
- MENUITEM "Downloads", IDM_TC_DOWNLOADS
- MENUITEM "News", IDM_NEWS
- MENUITEM "Version History", IDM_VERSION_HISTORY
- MENUITEM SEPARATOR
- MENUITEM "Donate now...", IDM_DONATE
- MENUITEM "Contact", IDM_CONTACT
- MENUITEM "Legal Notices", IDM_LICENSE
- MENUITEM "About", IDM_ABOUT
- END
- MENUITEM "&Homepage ", IDM_HOMEPAGE
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_UACSTRING "VeraCrypt"
-END
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#include "..\\common\\common.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+#include "..\\common\\resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HEADER
+//
+
+IDR_MOUNT_RSRC_HEADER HEADER "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// TYPELIB
+//
+
+IDR_MOUNT_TLB TYPELIB "Mount.tlb"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_PREFERENCES_DLG DIALOGEX 0, 0, 336, 333
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Preferences"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Mount volumes as read-only",IDC_PREF_MOUNT_READONLY,
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,11,11,150,16
+ CONTROL "Mount volumes as removable media",IDC_PREF_MOUNT_REMOVABLE,
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,162,11,165,16
+ CONTROL "Enabled",IDC_PREF_BKG_TASK_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,44,111,10
+ CONTROL "Exit when there are no mounted volumes",IDC_CLOSE_BKG_TASK_WHEN_NOVOL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,44,188,10
+ CONTROL "Start VeraCrypt Background Task",IDC_PREF_LOGON_START,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,75,126,10
+ CONTROL "Mount all device-hosted VeraCrypt volumes",IDC_PREF_LOGON_MOUNT_DEVICES,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,75,188,10
+ CONTROL "User logs off",IDC_PREF_DISMOUNT_LOGOFF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,104,114,11
+ CONTROL "User session locked",IDC_PREF_DISMOUNT_SESSION_LOCKED,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,105,130,11
+ CONTROL "Screen saver is launched",IDC_PREF_DISMOUNT_SCREENSAVER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,116,114,10
+ CONTROL "Entering power saving mode",IDC_PREF_DISMOUNT_POWERSAVING,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,115,130,11
+ CONTROL "Auto-dismount volume after no data has been read/written to it for",IDC_PREF_DISMOUNT_INACTIVE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,128,246,11
+ EDITTEXT IDC_PREF_DISMOUNT_INACTIVE_TIME,258,127,27,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
+ CONTROL "Force auto-dismount even if volume contains open files or directories",IDC_PREF_FORCE_AUTO_DISMOUNT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,141,294,10
+ CONTROL "Open Explorer window for successfully mounted volume",IDC_PREF_OPEN_EXPLORER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,171,316,11
+ CONTROL "Use a different taskbar icon when there are mounted volumes",IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,184,314,10
+ CONTROL "Preserve modification timestamp of file containers",IDC_PRESERVE_TIMESTAMPS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,196,316,10
+ CONTROL "Make disconnected network drives available for mounting",IDC_SHOW_DISCONNECTED_NETWORK_DRIVES,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,208,316,10
+ CONTROL "Cache passwords in driver memory",IDC_PREF_CACHE_PASSWORDS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,254,146,11
+ CONTROL "Wipe cached passwords on exit",IDC_PREF_WIPE_CACHE_ON_EXIT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,254,165,11
+ CONTROL "Temporary Cache password during ""Mount Favorite Volumes"" operations",IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,268,294,11
+ CONTROL "Wipe cached passwords on auto-dismount",IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,282,296,11
+ CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,296,296,10
+ PUSHBUTTON "More Settings...",IDC_MORE_SETTINGS,5,317,85,14
+ DEFPUSHBUTTON "OK",IDOK,225,317,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,281,317,50,14
+ GROUPBOX "Windows",IDT_WINDOWS_RELATED_SETTING,4,160,328,76
+ GROUPBOX "Default Mount Options",IDT_DEFAULT_MOUNT_OPTIONS,4,3,328,26
+ GROUPBOX "VeraCrypt Background Task",IDT_TASKBAR_ICON,4,33,328,26
+ GROUPBOX "Auto-Dismount",IDT_AUTO_DISMOUNT,4,94,328,62
+ LTEXT "minutes",IDT_MINUTES,289,129,39,10
+ LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,104,71,20
+ GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,243,328,68
+ GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28
+ CONTROL "Don't show wait message dialog when performing operations",IDC_HIDE_WAITING_DIALOG,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,220,316,10
+END
+
+IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 224
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Volume Properties"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,114,203,55,14
+ CONTROL "",IDC_VOLUME_PROPERTIES_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,6,269,192
+END
+
+IDD_PASSWORDCHANGE_DLG DIALOGEX 0, 0, 346, 245
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Change Password or Keyfiles"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_OLD_PASSWORD,89,14,181,13,ES_PASSWORD | ES_AUTOHSCROLL
+ COMBOBOX IDC_PKCS5_OLD_PRF_ID,89,33,97,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,35,83,10
+ EDITTEXT IDC_OLD_PIM,89,51,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,59,115,10
+ CONTROL "Use keyfiles",IDC_ENABLE_KEYFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,72,109,10
+ PUSHBUTTON "Keyfiles...",IDC_KEYFILES,203,70,67,14
+ CONTROL "Display password",IDC_SHOW_PASSWORD_CHPWD_ORI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,85,138,10,WS_EX_TRANSPARENT
+ EDITTEXT IDC_PASSWORD,89,121,181,13,ES_PASSWORD | ES_AUTOHSCROLL
+ EDITTEXT IDC_VERIFY,89,137,181,13,ES_PASSWORD | ES_AUTOHSCROLL
+ EDITTEXT IDC_PIM,89,154,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Use PIM",IDC_NEW_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,161,97,10
+ CONTROL "Use keyfiles",IDC_ENABLE_NEW_KEYFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,172,110,11
+ PUSHBUTTON "Keyfiles...",IDC_NEW_KEYFILES,202,170,68,14
+ CONTROL "Display password",IDC_SHOW_PASSWORD_CHPWD_NEW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,89,184,180,11,WS_EX_TRANSPARENT
+ COMBOBOX IDC_PKCS5_PRF_ID,89,199,181,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ COMBOBOX IDC_WIPE_MODE,89,218,181,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ DEFPUSHBUTTON "OK",IDOK,280,7,59,14
+ PUSHBUTTON "Cancel",IDCANCEL,280,24,59,14
+ RTEXT "Password:",IDT_PASSWORD,12,16,72,8
+ RTEXT "Password:",IDT_NEW_PASSWORD,8,124,76,8
+ RTEXT "Confirm Password:",IDT_CONFIRM_PASSWORD,9,140,75,16
+ RTEXT "PKCS-5 PRF:",IDT_NEW_PKCS5_PRF,9,200,74,10,SS_CENTERIMAGE
+ GROUPBOX "Current",IDT_CURRENT,6,3,270,97
+ GROUPBOX "New",IDT_NEW,6,108,270,130
+ RTEXT "Wipe mode:",IDT_WIPE_MODE,9,220,74,8,0,WS_EX_RIGHT
+ RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,12,34,74,10,SS_CENTERIMAGE
+ RTEXT "Volume PIM:",IDT_OLD_PIM,12,54,74,10,NOT WS_VISIBLE
+ LTEXT "(Empty or 0 for default iterations)",IDC_OLD_PIM_HELP,135,54,196,8,NOT WS_VISIBLE
+ RTEXT "Volume PIM:",IDT_PIM,9,157,75,16,NOT WS_VISIBLE
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,135,157,197,8,NOT WS_VISIBLE
+END
+
+IDD_MOUNT_DLG DIALOGEX 0, 0, 375, 271
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt"
+MENU IDR_MENU
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ CONTROL "",IDC_DRIVELIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,8,5,360,135
+ PUSHBUTTON "&Create Volume",IDC_CREATE_VOLUME,16,159,84,14
+ PUSHBUTTON "&Volume Properties...",IDC_VOLUME_PROPERTIES,146,159,84,14
+ PUSHBUTTON "&Wipe Cache",IDC_WIPE_CACHE,276,159,84,14
+ COMBOBOX IDC_VOLUME,56,192,212,74,CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+ CONTROL "&Never save history",IDC_NO_HISTORY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,56,213,122,10
+ PUSHBUTTON "Volume &Tools...",IDC_VOLUME_TOOLS,184,211,84,14
+ PUSHBUTTON "Select &File...",IDC_SELECT_FILE,276,192,84,14
+ PUSHBUTTON "Select D&evice...",IDC_SELECT_DEVICE,276,211,84,14
+ DEFPUSHBUTTON "OK",IDOK,8,243,84,18,WS_GROUP
+ PUSHBUTTON "&Auto-Mount Devices",IDC_MOUNTALL,100,243,84,18
+ PUSHBUTTON "Di&smount All",IDC_UNMOUNTALL,192,243,84,18,WS_GROUP
+ PUSHBUTTON "E&xit",IDC_EXIT,284,243,84,18,WS_GROUP
+ CONTROL 112,IDC_LOGO,"Static",SS_BITMAP | SS_NOTIFY | WS_BORDER,13,190,33,31
+ GROUPBOX "Volume",IDT_VOLUME,8,179,360,53
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,2,0,372,147
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,282,242,88,20
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,190,242,88,20
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,6,242,88,20
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,98,242,88,20
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,2,151,372,119
+END
+
+IDD_PASSWORD_DLG DIALOGEX 0, 0, 330, 103
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION
+CAPTION "Enter VeraCrypt Volume Password"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_PASSWORD,69,8,179,14,ES_PASSWORD | ES_AUTOHSCROLL
+ COMBOBOX IDC_PKCS5_PRF_ID,69,26,96,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,28,76,10
+ EDITTEXT IDC_PIM,69,43,42,14,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER | NOT WS_VISIBLE
+ CONTROL "Use P&IM",IDC_PIM_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,48,97,10
+ CONTROL "Cache passwords and keyfil&es in memory",IDC_CACHE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,61,153,10
+ CONTROL "&Display password",IDC_SHOW_PASSWORD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,74,83,10
+ CONTROL "U&se keyfiles",IDC_KEYFILES_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,87,99,11
+ PUSHBUTTON "&Keyfiles...",IDC_KEY_FILES,173,84,75,14
+ PUSHBUTTON "Mount Opti&ons...",IDC_MOUNT_OPTIONS,252,84,69,14
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,115,46,199,8,NOT WS_VISIBLE
+ DEFPUSHBUTTON "OK",IDOK,252,8,69,14
+ PUSHBUTTON "Cancel",IDCANCEL,252,25,69,14
+ RTEXT "Password:",IDT_PASSWORD,0,10,65,13
+ RTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,0,27,65,11
+ RTEXT "Volume PIM:",IDT_PIM,0,46,65,8,NOT WS_VISIBLE
+END
+
+IDD_TRAVELER_DLG DIALOGEX 0, 0, 300, 299
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Traveler Disk Setup"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ EDITTEXT IDC_DIRECTORY,17,29,205,13,ES_AUTOHSCROLL | ES_READONLY
+ PUSHBUTTON "Browse...",IDC_BROWSE_DIRS,228,28,57,14
+ CONTROL "Include VeraCrypt Volume Creation Wizard",IDC_COPY_WIZARD,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,48,258,10
+ CONTROL "Do nothing",IDC_AUTORUN_DISABLE,"Button",BS_AUTORADIOBUTTON,15,115,262,10
+ CONTROL "&Start VeraCrypt",IDC_AUTORUN_START,"Button",BS_AUTORADIOBUTTON,15,126,262,11
+ CONTROL "&Auto-mount VeraCrypt volume (specified below)",IDC_AUTORUN_MOUNT,
+ "Button",BS_AUTORADIOBUTTON,15,138,262,11
+ EDITTEXT IDC_VOLUME_NAME,21,175,194,13,ES_AUTOHSCROLL | WS_DISABLED
+ PUSHBUTTON "Browse...",IDC_BROWSE_FILES,221,174,57,14,WS_DISABLED
+ COMBOBOX IDC_DRIVELIST,120,193,96,69,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
+ CONTROL "Open &Explorer window for mounted volume",IDC_TRAVEL_OPEN_EXPLORER,
+ "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,211,256,10
+ CONTROL "Mount volume as read-&only",IDC_MOUNT_READONLY,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,224,256,10
+ CONTROL "&Cache password in driver memory",IDC_TRAV_CACHE_PASSWORDS,
+ "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,237,256,10
+ DEFPUSHBUTTON "Create",IDC_CREATE,173,278,57,14
+ PUSHBUTTON "Close",IDCLOSE,236,278,57,14
+ GROUPBOX "File Settings",IDT_FILE_SETTINGS,6,7,287,71
+ GROUPBOX "AutoRun Configuration (autorun.inf)",IDT_AUTORUN,5,88,288,185
+ LTEXT "VeraCrypt volume to mount (relative to traveler disk root):",IDT_TRAVELER_MOUNT,21,165,248,8,WS_DISABLED
+ RTEXT "Mount volume as drive letter:",IDT_MOUNT_LETTER,18,195,99,8,WS_DISABLED
+ LTEXT "Create traveler disk files at (traveler disk root directory):",IDT_TRAVEL_ROOT,18,19,259,8
+ GROUPBOX "Mount Settings",IDT_MOUNT_SETTINGS,13,152,272,114,WS_DISABLED
+ LTEXT "Upon insertion of traveler disk: ",IDT_TRAVEL_INSERTION,13,102,263,8
+ CONTROL "Include VeraCrypt Volume Expander",IDC_COPY_EXPANDER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,62,258,10
+ CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM,
+ "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,22,250,256,10
+END
+
+IDD_HOTKEYS_DLG DIALOGEX 0, 0, 389, 257
+STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - System-Wide Hot Keys"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ CONTROL "",IDC_HOTKEY_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,375,115
+ EDITTEXT IDC_HOTKEY_KEY,108,140,190,13,ES_AUTOHSCROLL
+ PUSHBUTTON "Assign",IDC_HOTKEY_ASSIGN,304,140,59,14
+ CONTROL "Ctrl",IDC_HK_MOD_CTRL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,109,158,46,10,WS_EX_TRANSPARENT
+ CONTROL "Shift",IDC_HK_MOD_SHIFT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,158,49,10,WS_EX_TRANSPARENT
+ CONTROL "Alt",IDC_HK_MOD_ALT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,216,158,43,10,WS_EX_TRANSPARENT
+ CONTROL "Win",IDC_HK_MOD_WIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,266,158,34,10,WS_EX_TRANSPARENT
+ PUSHBUTTON "Remove",IDC_HOTKEY_REMOVE,304,158,59,14
+ CONTROL "Play system notification sound after successful hot-key dismount",IDC_HK_DISMOUNT_PLAY_SOUND,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,201,348,10
+ CONTROL "Display balloon tooltip after successful hot-key dismount",IDC_HK_DISMOUNT_BALLOON_TOOLTIP,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,213,351,10,WS_EX_TRANSPARENT
+ DEFPUSHBUTTON "OK",IDOK,260,236,59,14
+ PUSHBUTTON "Cancel",IDCANCEL,323,236,59,14
+ PUSHBUTTON "Reset",IDC_RESET_HOTKEYS,7,236,59,14
+ RTEXT "Key to assign:",IDT_HOTKEY_KEY,15,142,86,8
+ GROUPBOX "Hot Key Options",IDT_DISMOUNT_ACTION,7,188,375,42
+ GROUPBOX "Shortcut",IDT_ASSIGN_HOTKEY,7,127,375,53
+END
+
+IDD_TOKEN_PREFERENCES DIALOGEX 0, 0, 316, 199
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Security Token Preferences"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ EDITTEXT IDC_PKCS11_MODULE,16,23,204,13,ES_AUTOHSCROLL
+ PUSHBUTTON "Select &Library...",IDC_SELECT_PKCS11_MODULE,226,22,75,14
+ PUSHBUTTON "Auto-&Detect Library",IDC_AUTO_DETECT_PKCS11_MODULE,16,41,112,14
+ CONTROL "&Close token session (log out) after a volume is successfully mounted",IDC_CLOSE_TOKEN_SESSION_AFTER_MOUNT,
+ "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,16,154,284,9
+ DEFPUSHBUTTON "OK",IDOK,205,178,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,259,178,50,14
+ GROUPBOX "PKCS #11 Library Path",IDT_PKCS11_LIB_PATH,7,7,302,129
+ GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,7,140,302,30
+ LTEXT "",IDT_PKCS11_LIB_HELP,16,63,286,65
+END
+
+IDD_EFI_SYSENC_SETTINGS DIALOGEX 0, 0, 370, 139
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - System Encryption Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "&Cache pre-boot authentication password in driver memory (for mounting of non-system volumes)",IDC_BOOT_LOADER_CACHE_PASSWORD,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,79,339,10
+ DEFPUSHBUTTON "OK",IDOK,257,115,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,313,115,50,14
+ GROUPBOX "Boot Loader Screen Options",IDT_BOOT_LOADER_SCREEN_OPTIONS,8,7,355,53
+ GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,8,64,355,44
+ CONTROL "Include PIM when caching pre-boot authentication password",IDC_BOOT_LOADER_CACHE_PIM,
+ "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,18,94,340,10
+ CONTROL "Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)",IDC_DISABLE_BOOT_LOADER_PIM_PROMPT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,20,339,9
+ CONTROL "Do not request Hash algorithm in the pre-boot authentication screen",IDC_DISABLE_BOOT_LOADER_HASH_PROMPT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,35,339,9
+END
+
+IDD_PERFORMANCE_SETTINGS DIALOGEX 0, 0, 370, 248
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Performance Options"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_HW_AES_SUPPORTED_BY_CPU,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,294,21,57,12,WS_EX_CLIENTEDGE
+ CONTROL "Accelerate AES encryption/decryption by using the AES instructions of the processor (if available)",IDC_ENABLE_HARDWARE_ENCRYPTION,
+ "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,18,41,340,17
+ LTEXT "More information",IDC_MORE_INFO_ON_HW_ACCELERATION,18,61,165,10,SS_NOTIFY
+ CONTROL "Do not use the following number of processors for encryption/decryption:",IDC_LIMIT_ENC_THREAD_POOL,
+ "Button",BS_AUTOCHECKBOX | BS_TOP | WS_TABSTOP,18,103,283,11
+ COMBOBOX IDC_ENCRYPTION_FREE_CPU_COUNT,304,101,48,51,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "More information",IDC_MORE_INFO_ON_THREAD_BASED_PARALLELIZATION,18,159,165,10,SS_NOTIFY
+ PUSHBUTTON "&Benchmark",IDC_BENCHMARK,7,227,59,14
+ DEFPUSHBUTTON "OK",IDOK,257,227,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,313,227,50,14
+ LTEXT "Processor (CPU) in this computer supports hardware acceleration for AES:",IDT_HW_AES_SUPPORTED_BY_CPU,18,23,273,9
+ GROUPBOX "Hardware Acceleration",IDT_ACCELERATION_OPTIONS,7,6,355,74
+ GROUPBOX "Thread-Based Parallelization",IDT_PARALLELIZATION_OPTIONS,7,84,355,93
+ LTEXT "",IDT_LIMIT_ENC_THREAD_POOL_NOTE,18,126,334,33
+ GROUPBOX "Driver Configuration",IDT_DRIVER_OPTIONS,7,183,356,36
+ CONTROL "Enable extended disk control codes support",IDC_ENABLE_EXTENDED_IOCTL_SUPPORT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,198,337,10
+END
+
+IDD_FAVORITE_VOLUMES DIALOGEX 0, 0, 380, 368
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Favorite Volumes"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_FAVORITE_VOLUMES_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,7,366,92
+ PUSHBUTTON "Move &Up",IDC_FAVORITE_MOVE_UP,7,104,63,14
+ PUSHBUTTON "Move &Down",IDC_FAVORITE_MOVE_DOWN,74,104,63,14
+ PUSHBUTTON "&Remove",IDC_FAVORITE_REMOVE,310,104,63,14
+ EDITTEXT IDC_FAVORITE_LABEL,18,225,344,13,ES_AUTOHSCROLL
+ CONTROL "Mount selected volume as read-o&nly",IDC_FAVORITE_MOUNT_READONLY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,255,349,10
+ CONTROL "Mount selected volume as remo&vable medium",IDC_FAVORITE_MOUNT_REMOVABLE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,269,349,10
+ CONTROL "Mount selected volume upon log&on",IDC_FAVORITE_MOUNT_ON_LOGON,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,283,349,10
+ CONTROL "Mount selected volume when its host device gets &connected",IDC_FAVORITE_MOUNT_ON_ARRIVAL,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,297,349,10
+ CONTROL "Open &Explorer window for selected volume when successfully mounted",IDC_FAVORITE_OPEN_EXPLORER_WIN_ON_MOUNT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,311,349,11
+ CONTROL "Do not mount selected volume when 'Mount Favorite Volumes' &hot key is pressed",IDC_FAVORITE_DISABLE_HOTKEY,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,326,349,11
+ LTEXT "Help on favorite volumes",IDC_FAVORITES_HELP_LINK,17,351,237,10,SS_NOTIFY
+ DEFPUSHBUTTON "OK",IDOK,269,347,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,323,347,50,14
+ GROUPBOX "",IDC_FAV_VOL_OPTIONS_GROUP_BOX,7,123,366,219
+ LTEXT "Label of selected favorite volume:",IDT_FAVORITE_LABEL,18,215,202,8
+ GROUPBOX "Global Settings",IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX,7,300,366,42
+ EDITTEXT IDC_PIM,18,183,42,13,ES_RIGHT | ES_PASSWORD | ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "(Empty or 0 for default iterations)",IDC_PIM_HELP,64,185,189,8
+ LTEXT "Volume PIM:",IDT_PIM,18,173,65,8
+ CONTROL "Display PIM",IDC_SHOW_PIM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,199,150,10
+ CONTROL "Use favorite label as Explorer drive label",IDC_FAVORITE_USE_LABEL_IN_EXPLORER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,242,349,10
+ LTEXT "Volume ID:",IDT_VOLUME_ID,18,131,57,8
+ EDITTEXT IDC_FAVORITE_VOLUME_ID,18,141,344,14,ES_AUTOHSCROLL | ES_READONLY
+ CONTROL "Use Volume ID to mount favorite",IDC_FAVORITE_USE_VOLUME_ID,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,159,337,10
+END
+
+IDD_DEFAULT_MOUNT_PARAMETERS DIALOGEX 0, 0, 167, 65
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - Mount Parameters"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,57,44,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,111,44,50,14
+ COMBOBOX IDC_PKCS5_PRF_ID,57,24,103,90,CBS_DROPDOWNLIST | WS_TABSTOP
+ LTEXT "PKCS-5 PRF:",IDT_PKCS5_PRF,8,26,44,11
+ CONTROL "TrueCrypt Mode",IDC_TRUECRYPT_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,76,10
+END
+
+IDD_SYSENC_SETTINGS DIALOGEX 0, 0, 370, 286
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt - System Encryption Settings"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Do not &show any texts in the pre-boot authentication screen (except the below custom message)",IDC_DISABLE_BOOT_LOADER_OUTPUT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,20,339,9
+ EDITTEXT IDC_CUSTOM_BOOT_LOADER_MESSAGE,18,50,216,14,ES_AUTOHSCROLL
+ CONTROL "&Cache pre-boot authentication password in driver memory (for mounting of non-system volumes)",IDC_BOOT_LOADER_CACHE_PASSWORD,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,192,339,10
+ CONTROL "Allow pre-boot &authentication to be bypassed by pressing the Esc key (enables boot manager)",IDC_ALLOW_ESC_PBA_BYPASS,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,222,340,10
+ DEFPUSHBUTTON "OK",IDOK,257,262,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,313,262,50,14
+ LTEXT "Display this custom message in the pre-boot authentication screen (24 characters maximum):",IDT_CUSTOM_BOOT_LOADER_MESSAGE,18,39,337,8
+ GROUPBOX "Boot Loader Screen Options",IDT_BOOT_LOADER_SCREEN_OPTIONS,8,7,355,165
+ GROUPBOX "Security Options",IDT_SECURITY_OPTIONS,8,177,355,75
+ LTEXT "",IDC_CUSTOM_BOOT_LOADER_MESSAGE_HELP,18,72,337,73
+ CONTROL "Disable ""Evil Maid"" attack detection",IDC_DISABLE_EVIL_MAID_ATTACK_DETECTION,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,237,340,10
+ CONTROL "Include PIM when caching pre-boot authentication password",IDC_BOOT_LOADER_CACHE_PIM,
+ "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,18,207,340,10
+ CONTROL "Do not request PIM in the pre-boot authentication screen (PIM value is stored unencrypted on disk)",IDC_DISABLE_BOOT_LOADER_PIM_PROMPT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,157,339,9
+END
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_PREFERENCES_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 329
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 331
+ END
+
+ IDD_VOLUME_PROPERTIES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 277
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 217
+ END
+
+ IDD_PASSWORDCHANGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 238
+ END
+
+ IDD_MOUNT_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 369
+ BOTTOMMARGIN, 269
+ END
+
+ IDD_PASSWORD_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 321
+ BOTTOMMARGIN, 98
+ END
+
+ IDD_TRAVELER_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 293
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 292
+ END
+
+ IDD_HOTKEYS_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 382
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 250
+ END
+
+ IDD_TOKEN_PREFERENCES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 309
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 192
+ END
+
+ IDD_EFI_SYSENC_SETTINGS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 363
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 129
+ END
+
+ IDD_PERFORMANCE_SETTINGS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 363
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 241
+ END
+
+ IDD_FAVORITE_VOLUMES, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 373
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 361
+ END
+
+ IDD_DEFAULT_MOUNT_PARAMETERS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 160
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 58
+ END
+
+ IDD_SYSENC_SETTINGS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 363
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 276
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,19,4,0
+ PRODUCTVERSION 1,19,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "IDRIX"
+ VALUE "FileDescription", "VeraCrypt"
+ VALUE "FileVersion", "1.19"
+ VALUE "LegalTrademarks", "VeraCrypt"
+ VALUE "OriginalFilename", "VeraCrypt.exe"
+ VALUE "ProductName", "VeraCrypt"
+ VALUE "ProductVersion", "1.19"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "#include ""..\\\\common\\\\resource.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""..\\\\common\\\\common.rc""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_DRIVEICON BITMAP "Drive_icon_96dpi.bmp"
+IDB_DRIVEICON_MASK BITMAP "Drive_icon_mask_96dpi.bmp"
+IDB_LOGO_96DPI BITMAP "Logo_96dpi.bmp"
+IDB_LOGO_288DPI BITMAP "Logo_288dpi.bmp"
+IDB_SYS_DRIVEICON BITMAP "System_drive_icon_96dpi.bmp"
+IDB_SYS_DRIVEICON_MASK BITMAP "System_drive_icon_mask_96dpi.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MENU MENU
+BEGIN
+ POPUP "&Volumes"
+ BEGIN
+ MENUITEM "Select File...", IDM_SELECT_FILE
+ MENUITEM "Select Device...", IDM_SELECT_DEVICE
+ MENUITEM SEPARATOR
+ MENUITEM "Create New Volume...", IDM_CREATE_VOLUME
+ MENUITEM "Permanently Decrypt...", IDM_DECRYPT_NONSYS_VOL
+ MENUITEM "Resume Interrupted Process", IDM_RESUME_INTERRUPTED_PROC
+ MENUITEM SEPARATOR
+ MENUITEM "Mount Volume", IDM_MOUNT_VOLUME
+ MENUITEM "Mount Volume with Options", IDM_MOUNT_VOLUME_OPTIONS
+ MENUITEM "Auto-Mount All Device-Hosted Volumes", IDM_MOUNTALL
+ MENUITEM SEPARATOR
+ MENUITEM "Dismount Volume", IDM_UNMOUNT_VOLUME
+ MENUITEM "Dismount All Mounted Volumes", IDM_UNMOUNTALL
+ MENUITEM SEPARATOR
+ MENUITEM "Change Volume Password...", IDM_CHANGE_PASSWORD
+ MENUITEM "Add/Remove Keyfiles to/from Volume...", IDM_ADD_REMOVE_VOL_KEYFILES
+ MENUITEM "Remove All Keyfiles from Volume...", IDM_REMOVE_ALL_KEYFILES_FROM_VOL
+ MENUITEM "Set Header Key Derivation Algorithm...", IDM_CHANGE_HEADER_KEY_DERIV_ALGO
+ MENUITEM SEPARATOR
+ MENUITEM "Volume Properties", IDM_VOLUME_PROPERTIES
+ END
+ POPUP "S&ystem"
+ BEGIN
+ MENUITEM "Encrypt System Partition/Drive...", IDM_ENCRYPT_SYSTEM_DEVICE
+ MENUITEM "Permanently Decrypt System Partition/Drive", IDM_PERMANENTLY_DECRYPT_SYS
+ MENUITEM "Resume Interrupted Process", IDM_SYSENC_RESUME
+ MENUITEM SEPARATOR
+ MENUITEM "Create Hidden Operating System...", IDM_CREATE_HIDDEN_OS
+ MENUITEM SEPARATOR
+ MENUITEM "Create Rescue Disk...", IDM_CREATE_RESCUE_DISK
+ MENUITEM "Verify Rescue Disk", IDM_VERIFY_RESCUE_DISK
+ MENUITEM "Verify Rescue Disk Image", IDM_VERIFY_RESCUE_DISK_ISO
+ MENUITEM SEPARATOR
+ MENUITEM "Mount Without Pre-Boot &Authentication...", IDM_MOUNT_SYSENC_PART_WITHOUT_PBA
+ MENUITEM SEPARATOR
+ MENUITEM "Change Password...", IDM_CHANGE_SYS_PASSWORD
+ MENUITEM "Set Header Key Derivation Algorithm...", IDM_CHANGE_SYS_HEADER_KEY_DERIV_ALGO
+ MENUITEM SEPARATOR
+ MENUITEM "Properties...", IDM_SYSTEM_ENCRYPTION_STATUS
+ MENUITEM SEPARATOR
+ MENUITEM "Settings...", IDM_SYS_ENC_SETTINGS
+ END
+ POPUP "Favor&ites"
+ BEGIN
+ MENUITEM "Add Mounted Volume to Favorites...", IDM_ADD_VOLUME_TO_FAVORITES
+ MENUITEM "Add Mounted Volume to System Favorites...", IDM_ADD_VOLUME_TO_SYSTEM_FAVORITES
+ MENUITEM SEPARATOR
+ MENUITEM "Organize Favorite Volumes...", IDM_ORGANIZE_FAVORITES
+ MENUITEM "Organize System Favorite Volumes...", IDM_ORGANIZE_SYSTEM_FAVORITES
+ MENUITEM SEPARATOR
+ MENUITEM "Mount Favorite Volumes", IDM_MOUNT_FAVORITE_VOLUMES
+ END
+ POPUP "T&ools"
+ BEGIN
+ MENUITEM "Benchmark...", IDM_BENCHMARK
+ MENUITEM "Test Vectors...", IDM_TEST_VECTORS
+ MENUITEM SEPARATOR
+ MENUITEM "Traveler Disk Setup...", IDM_TRAVELER
+ MENUITEM "Volume Expander", IDM_VOLUME_EXPANDER
+ MENUITEM "Volume Creation Wizard", IDM_VOLUME_WIZARD
+ MENUITEM SEPARATOR
+ MENUITEM "Keyfile Generator", IDM_KEYFILE_GENERATOR
+ MENUITEM "Manage Security Token Keyfiles...", IDM_MANAGE_TOKEN_KEYFILES
+ MENUITEM "Close All Security Token Sessions", IDM_CLOSE_ALL_TOKEN_SESSIONS
+ MENUITEM SEPARATOR
+ MENUITEM "Backup Volume Header...", IDM_BACKUP_VOL_HEADER
+ MENUITEM "Restore Volume Header...", IDM_RESTORE_VOL_HEADER
+ MENUITEM SEPARATOR
+ MENUITEM "Refresh Drive Letters", IDM_REFRESH_DRIVE_LETTERS
+ MENUITEM SEPARATOR
+ MENUITEM "Clear Volume History", IDM_CLEAR_HISTORY
+ MENUITEM "Wipe Cached Passwords", IDM_WIPE_CACHE
+ END
+ POPUP "Settin&gs"
+ BEGIN
+ MENUITEM "Language...", IDM_LANGUAGE
+ MENUITEM "Hot Keys...", IDM_HOTKEY_SETTINGS
+ MENUITEM SEPARATOR
+ MENUITEM "System Encryption...", IDM_SYSENC_SETTINGS
+ MENUITEM "System Favorite Volumes...", IDM_SYS_FAVORITES_SETTINGS
+ MENUITEM SEPARATOR
+ MENUITEM "Performance/Driver Configuration", IDM_PERFORMANCE_SETTINGS
+ MENUITEM SEPARATOR
+ MENUITEM "Default Keyfiles...", IDM_DEFAULT_KEYFILES
+ MENUITEM "Default Mount Parameters...", IDM_DEFAULT_MOUNT_PARAMETERS
+ MENUITEM "Security Tokens...", IDM_TOKEN_PREFERENCES
+ MENUITEM SEPARATOR
+ MENUITEM "Preferences...", IDM_PREFERENCES
+ END
+ POPUP "Hel&p"
+ BEGIN
+ MENUITEM "User's Guide", IDM_HELP
+ MENUITEM "Online Help", IDM_ONLINE_HELP
+ MENUITEM "Beginner's Tutorial", IDM_ONLINE_TUTORIAL
+ MENUITEM "Frequently Asked Questions", IDM_FAQ
+ MENUITEM SEPARATOR
+ MENUITEM "VeraCrypt Website", IDM_WEBSITE
+ MENUITEM "Downloads", IDM_TC_DOWNLOADS
+ MENUITEM "News", IDM_NEWS
+ MENUITEM "Version History", IDM_VERSION_HISTORY
+ MENUITEM SEPARATOR
+ MENUITEM "Donate now...", IDM_DONATE
+ MENUITEM "Contact", IDM_CONTACT
+ MENUITEM "Legal Notices", IDM_LICENSE
+ MENUITEM "About", IDM_ABOUT
+ END
+ MENUITEM "&Homepage ", IDM_HOMEPAGE
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE
+BEGIN
+ IDS_UACSTRING "VeraCrypt"
+END
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "..\\common\\common.rc"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Mount/Mount.vcproj b/src/Mount/Mount.vcproj
index c9a6ebc..64163c7 100644
--- a/src/Mount/Mount.vcproj
+++ b/src/Mount/Mount.vcproj
@@ -1,1027 +1,1027 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Mount"
- ProjectGUID="{E4C40F94-E7F9-4981-86E4-186B46F993F3}"
- RootNamespace="Mount"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- ExceptionHandling="1"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- EnableFunctionLevelLinking="false"
- UsePrecompiledHeader="0"
- BrowseInformation="0"
- BrowseInformationFile=""
- WarningLevel="4"
- DebugInformationFormat="4"
- DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCrypt.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/Mount.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Mount.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCrypt.exe &quot;..\Debug\Setup Files&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- MinimalRebuild="true"
- ExceptionHandling="1"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- EnableFunctionLevelLinking="false"
- UsePrecompiledHeader="0"
- BrowseInformation="0"
- BrowseInformationFile=""
- WarningLevel="4"
- DebugInformationFormat="3"
- DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCrypt.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/Mount.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Mount.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCrypt-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCrypt.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Mount.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy Release\VeraCrypt.exe &quot;..\Release\Setup Files&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- AdditionalIncludeDirectories=""
- TargetEnvironment="3"
- TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
- OutputDirectory=""
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCrypt.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- IgnoreAllDefaultLibraries="false"
- DelayLoadDLLs="mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Mount.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCrypt-x64.exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\Favorites.cpp"
- >
- </File>
- <File
- RelativePath=".\Hotkeys.c"
- >
- </File>
- <File
- RelativePath=".\MainCom.cpp"
- >
- </File>
- <File
- RelativePath=".\MainCom.idl"
- >
- </File>
- <File
- RelativePath=".\Mount.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\BaseCom.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\BootEncryption.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Cmdline.c"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.c"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Dlgcode.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.c"
- >
- </File>
- <File
- RelativePath="..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.c"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Language.c"
- >
- </File>
- <File
- RelativePath="..\Common\Password.c"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.c"
- >
- </File>
- <File
- RelativePath="..\Common\Random.c"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.c"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.c"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.c"
- >
- </File>
- <File
- RelativePath="..\Common\Wipe.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.c"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.c"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\Common\Apidrvr.h"
- >
- </File>
- <File
- RelativePath="..\Common\BaseCom.h"
- >
- </File>
- <File
- RelativePath="..\Common\BootEncryption.h"
- >
- </File>
- <File
- RelativePath="..\Common\Cmdline.h"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.h"
- >
- </File>
- <File
- RelativePath="..\Common\Common.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crypto.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dlgcode.h"
- >
- </File>
- <File
- RelativePath="..\Common\EncryptionThreadPool.h"
- >
- </File>
- <File
- RelativePath="..\Common\Exception.h"
- >
- </File>
- <File
- RelativePath=".\Favorites.h"
- >
- </File>
- <File
- RelativePath="..\Common\GfMul.h"
- >
- </File>
- <File
- RelativePath=".\Hotkeys.h"
- >
- </File>
- <File
- RelativePath="..\Common\Keyfiles.h"
- >
- </File>
- <File
- RelativePath="..\Common\Language.h"
- >
- </File>
- <File
- RelativePath=".\MainCom.h"
- >
- </File>
- <File
- RelativePath=".\Mount.h"
- >
- </File>
- <File
- RelativePath="..\Common\Password.h"
- >
- </File>
- <File
- RelativePath="..\Common\Pkcs5.h"
- >
- </File>
- <File
- RelativePath="..\Common\Random.h"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.h"
- >
- </File>
- <File
- RelativePath="..\Common\Resource.h"
- >
- </File>
- <File
- RelativePath=".\resource.h"
- >
- </File>
- <File
- RelativePath="..\Common\SecurityToken.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tcdefs.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tests.h"
- >
- </File>
- <File
- RelativePath="..\Common\Volumes.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xml.h"
- >
- </File>
- <File
- RelativePath="..\Common\Xts.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootSector.bin"
- >
- </File>
- <File
- RelativePath=".\Drive_icon_96dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\Drive_icon_mask_96dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\Logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\Logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\Mount.manifest"
- >
- </File>
- <File
- RelativePath=".\Mount.rc"
- >
- </File>
- <File
- RelativePath=".\Mount.tlb"
- >
- </File>
- <File
- RelativePath=".\System_drive_icon_96dpi.bmp"
- >
- </File>
- <File
- RelativePath=".\System_drive_icon_mask_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_mounted.ico"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_volume.ico"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES\BootSector.bin"
- >
- </File>
- <File
- RelativePath="..\Common\Common.rc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Boot\Windows\Release\Decompressor.com"
- >
- </File>
- <File
- RelativePath="..\Common\Language.xml"
- >
- </File>
- <File
- RelativePath="..\Resources\Texts\License.rtf"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_background.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt.ico"
- >
- </File>
- </Filter>
- </Filter>
- <File
- RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_AES_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootLoader.com.gz"
- >
- </File>
- <File
- RelativePath="..\Boot\Windows\Rescue_SHA2\BootLoader.com.gz"
- >
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Mount"
+ ProjectGUID="{E4C40F94-E7F9-4981-86E4-186B46F993F3}"
+ RootNamespace="Mount"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ ExceptionHandling="1"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ EnableFunctionLevelLinking="false"
+ UsePrecompiledHeader="0"
+ BrowseInformation="0"
+ BrowseInformationFile=""
+ WarningLevel="4"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCrypt.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Mount.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Mount.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCrypt.exe &quot;..\Debug\Setup Files&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ MinimalRebuild="true"
+ ExceptionHandling="1"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ EnableFunctionLevelLinking="false"
+ UsePrecompiledHeader="0"
+ BrowseInformation="0"
+ BrowseInformationFile=""
+ WarningLevel="4"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Debug\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCrypt.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Mount.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Mount.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy $(TargetPath) &quot;..\Debug\Setup Files\VeraCrypt-x64.exe&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCrypt.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Mount.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\VeraCrypt.exe &quot;..\Release\Setup Files&quot;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ AdditionalIncludeDirectories=""
+ TargetEnvironment="3"
+ TypeLibraryName="$(SolutionDir)/$(ProjectName)/$(ProjectName).tlb"
+ OutputDirectory=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4057;4100;4127;4201;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\Crypto\x64\Release\crypto.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCrypt.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ DelayLoadDLLs="mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Mount.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(TargetPath) &quot;..\Release\Setup Files\VeraCrypt-x64.exe&quot;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\Favorites.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\Hotkeys.c"
+ >
+ </File>
+ <File
+ RelativePath=".\MainCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\MainCom.idl"
+ >
+ </File>
+ <File
+ RelativePath=".\Mount.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\BaseCom.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BootEncryption.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cmdline.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Language.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Password.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Wipe.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.c"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Common\Apidrvr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BaseCom.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\BootEncryption.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Cmdline.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crypto.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\EncryptionThreadPool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Exception.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Favorites.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\GfMul.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Hotkeys.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Keyfiles.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.h"
+ >
+ </File>
+ <File
+ RelativePath=".\MainCom.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Mount.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Password.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Pkcs5.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Random.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\SecurityToken.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tcdefs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tests.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Volumes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xml.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Xts.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath=".\Drive_icon_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\Drive_icon_mask_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\Logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\Logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\Mount.manifest"
+ >
+ </File>
+ <File
+ RelativePath=".\Mount.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\Mount.tlb"
+ >
+ </File>
+ <File
+ RelativePath=".\System_drive_icon_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\System_drive_icon_mask_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_mounted.ico"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_volume.ico"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES\BootSector.bin"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Common.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release\Decompressor.com"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\Resources\Texts\License.rtf"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_background.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt.ico"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_AES_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Serpent_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_Twofish_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_AES_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Serpent_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Release_Twofish_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ <File
+ RelativePath="..\Boot\Windows\Rescue_SHA2\BootLoader.com.gz"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Mount/Mount.vcxproj b/src/Mount/Mount.vcxproj
index 8e7d894..16edb51 100644
--- a/src/Mount/Mount.vcxproj
+++ b/src/Mount/Mount.vcxproj
@@ -96,8 +96,8 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>Sync</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -112,7 +112,7 @@
</BrowseInformationFile>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -145,8 +145,8 @@ copy Debug\VeraCrypt.exe "..\Debug\Setup Files" &gt;NUL:
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>TCMOUNT;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<ExceptionHandling>Sync</ExceptionHandling>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -161,7 +161,7 @@ copy Debug\VeraCrypt.exe "..\Debug\Setup Files" &gt;NUL:
</BrowseInformationFile>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Debug\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -194,8 +194,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -205,7 +205,7 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -239,8 +239,8 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>TCMOUNT;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>TCMOUNT;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -250,7 +250,7 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalDependencies>..\Crypto\x64\Release\crypto.lib;mpr.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -274,8 +274,148 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="..\Common\XUnzip.cpp" />
- <ClCompile Include="..\Common\XZip.cpp" />
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c" />
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c" />
+ <ClCompile Include="..\Common\libzip\zip_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_err_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c" />
+ <ClCompile Include="..\Common\libzip\zip_fclose.c" />
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fread.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c" />
+ <ClCompile Include="..\Common\libzip\zip_hash.c" />
+ <ClCompile Include="..\Common\libzip\zip_io_util.c" />
+ <ClCompile Include="..\Common\libzip\zip_memdup.c" />
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c" />
+ <ClCompile Include="..\Common\libzip\zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_call.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_function.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_read.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_window.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c" />
+ <ClCompile Include="..\Common\libzip\zip_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_string.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c" />
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c" />
+ <ClCompile Include="..\Common\zlib\adler32.c" />
+ <ClCompile Include="..\Common\zlib\crc32.c" />
+ <ClCompile Include="..\Common\zlib\deflate.c" />
+ <ClCompile Include="..\Common\zlib\inffast.c" />
+ <ClCompile Include="..\Common\zlib\inflate.c" />
+ <ClCompile Include="..\Common\zlib\inftrees.c" />
+ <ClCompile Include="..\Common\zlib\trees.c" />
+ <ClCompile Include="..\Common\zlib\zutil.c" />
<ClCompile Include="Favorites.cpp" />
<ClCompile Include="Hotkeys.c" />
<ClCompile Include="MainCom.cpp" />
@@ -328,6 +468,13 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<Midl Include="MainCom.idl" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="..\Common\libzip\compat.h" />
+ <ClInclude Include="..\Common\libzip\config.h" />
+ <ClInclude Include="..\Common\libzip\zconf.h" />
+ <ClInclude Include="..\Common\libzip\zip.h" />
+ <ClInclude Include="..\Common\libzip\zipconf.h" />
+ <ClInclude Include="..\Common\libzip\zipint.h" />
+ <ClInclude Include="..\Common\libzip\zipwin32.h" />
<ClInclude Include="..\Common\Wipe.h" />
<ClInclude Include="..\Common\Apidrvr.h" />
<ClInclude Include="..\Common\BaseCom.h" />
@@ -343,6 +490,16 @@ copy $(TargetPath) "..\Debug\Setup Files\VeraCrypt-x64.exe" &gt;NUL:
<ClInclude Include="..\Common\Exception.h" />
<ClInclude Include="..\Common\XUnzip.h" />
<ClInclude Include="..\Common\XZip.h" />
+ <ClInclude Include="..\Common\zlib\crc32.h" />
+ <ClInclude Include="..\Common\zlib\deflate.h" />
+ <ClInclude Include="..\Common\zlib\inffast.h" />
+ <ClInclude Include="..\Common\zlib\inffixed.h" />
+ <ClInclude Include="..\Common\zlib\inflate.h" />
+ <ClInclude Include="..\Common\zlib\inftrees.h" />
+ <ClInclude Include="..\Common\zlib\trees.h" />
+ <ClInclude Include="..\Common\zlib\zconf.h" />
+ <ClInclude Include="..\Common\zlib\zlib.h" />
+ <ClInclude Include="..\Common\zlib\zutil.h" />
<ClInclude Include="Favorites.h" />
<ClInclude Include="..\Common\GfMul.h" />
<ClInclude Include="Hotkeys.h" />
diff --git a/src/Mount/Mount.vcxproj.filters b/src/Mount/Mount.vcxproj.filters
index fcc9445..811b386 100644
--- a/src/Mount/Mount.vcxproj.filters
+++ b/src/Mount/Mount.vcxproj.filters
@@ -19,6 +19,12 @@
<Filter Include="Resource Files\Common">
<UniqueIdentifier>{f805ede6-c210-4210-95ce-e33edb12bc27}</UniqueIdentifier>
</Filter>
+ <Filter Include="Source Files\Common\libzip">
+ <UniqueIdentifier>{318128e2-1443-4dce-83e6-f3e1c92d6787}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Common\zlib">
+ <UniqueIdentifier>{21a4f879-0684-4016-ad89-f27c8ab96cf8}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Favorites.cpp">
@@ -102,11 +108,341 @@
<ClCompile Include="..\Common\Xts.c">
<Filter>Source Files\Common</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XZip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <Filter>Source Files\Common\libzip</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XUnzip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\zip_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fclose.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fread.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_io_util.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_function.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_read.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_window.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_string.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\adler32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\crc32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\deflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\trees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\zutil.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inftrees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inffast.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_err_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_hash.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_memdup.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_call.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c">
+ <Filter>Source Files\Common\libzip</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -217,6 +553,57 @@
<ClInclude Include="..\Common\XUnzip.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Common\libzip\compat.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\config.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zconf.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zip.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipint.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipwin32.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\crc32.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\deflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffast.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffixed.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inftrees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\trees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zconf.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zlib.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zutil.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipconf.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\Boot\Windows\Rescue_Serpent_SHA2\BootSector.bin">
diff --git a/src/Platform/Buffer.cpp b/src/Platform/Buffer.cpp
index 4948a87..a53fd3d 100644
--- a/src/Platform/Buffer.cpp
+++ b/src/Platform/Buffer.cpp
@@ -15,13 +15,13 @@
namespace VeraCrypt
{
- Buffer::Buffer () : DataPtr (nullptr), DataSize (0)
+ Buffer::Buffer () : DataPtr (nullptr), DataSize (0), DataAlignment (0)
{
}
- Buffer::Buffer (size_t size) : DataPtr (nullptr), DataSize (0)
+ Buffer::Buffer (size_t size, size_t alignment) : DataPtr (nullptr), DataSize (0), DataAlignment (0)
{
- Allocate (size);
+ Allocate (size, alignment);
}
Buffer::~Buffer ()
@@ -30,37 +30,42 @@ namespace VeraCrypt
Free ();
}
- void Buffer::Allocate (size_t size)
+ void Buffer::Allocate (size_t size, size_t alignment)
{
if (size < 1)
throw ParameterIncorrect (SRC_POS);
if (DataPtr != nullptr)
{
- if (DataSize == size)
+ if ((DataSize == size) && (DataAlignment == alignment))
return;
Free();
}
try
{
- DataPtr = static_cast<byte *> (Memory::Allocate (size));
+ DataPtr = static_cast<byte *> ((alignment > 0)? Memory::AllocateAligned (size, alignment) : Memory::Allocate (size));
DataSize = size;
+ DataAlignment = alignment;
}
catch (...)
{
DataPtr = nullptr;
DataSize = 0;
+ DataAlignment = 0;
throw;
}
}
- void Buffer::CopyFrom (const ConstBufferPtr &bufferPtr)
+ void Buffer::CopyFrom (const ConstBufferPtr &bufferPtr, size_t alignment)
{
- if (!IsAllocated ())
+ if (!IsAllocated () || ((bufferPtr.Size()) && (DataAlignment != alignment)))
{
+ if (IsAllocated ())
+ Free ();
+
if (bufferPtr.Size())
- Allocate (bufferPtr.Size());
+ Allocate (bufferPtr.Size(), alignment);
}
else if (bufferPtr.Size() > DataSize)
throw ParameterTooLarge (SRC_POS);
@@ -80,9 +85,13 @@ namespace VeraCrypt
if (DataPtr == nullptr)
throw NotInitialized (SRC_POS);
- Memory::Free (DataPtr);
+ if (DataAlignment > 0)
+ Memory::FreeAligned (DataPtr);
+ else
+ Memory::Free (DataPtr);
DataPtr = nullptr;
DataSize = 0;
+ DataAlignment = 0;
}
BufferPtr Buffer::GetRange (size_t offset, size_t size) const
@@ -99,9 +108,9 @@ namespace VeraCrypt
Memory::Zero (DataPtr, DataSize);
}
- SecureBuffer::SecureBuffer (size_t size)
+ SecureBuffer::SecureBuffer (size_t size, size_t alignment)
{
- Allocate (size);
+ Allocate (size, alignment);
}
SecureBuffer::~SecureBuffer ()
@@ -110,9 +119,9 @@ namespace VeraCrypt
Free ();
}
- void SecureBuffer::Allocate (size_t size)
+ void SecureBuffer::Allocate (size_t size, size_t alignment)
{
- Buffer::Allocate (size);
+ Buffer::Allocate (size, alignment);
}
void SecureBuffer::Free ()
diff --git a/src/Platform/Buffer.h b/src/Platform/Buffer.h
index b47907b..797cd7f 100644
--- a/src/Platform/Buffer.h
+++ b/src/Platform/Buffer.h
@@ -71,17 +71,18 @@ namespace VeraCrypt
{
public:
Buffer ();
- Buffer (size_t size);
- Buffer (const ConstBufferPtr &bufferPtr) { CopyFrom (bufferPtr); }
+ Buffer (size_t size, size_t alignment = 0);
+ Buffer (const ConstBufferPtr &bufferPtr, size_t alignment = 0) { CopyFrom (bufferPtr, alignment); }
virtual ~Buffer ();
- virtual void Allocate (size_t size);
- virtual void CopyFrom (const ConstBufferPtr &bufferPtr);
+ virtual void Allocate (size_t size, size_t alignment = 0);
+ virtual void CopyFrom (const ConstBufferPtr &bufferPtr, size_t alignment = 0);
virtual byte *Ptr () const { return DataPtr; }
virtual void Erase ();
virtual void Free ();
virtual BufferPtr GetRange (size_t offset, size_t size) const;
virtual size_t Size () const { return DataSize; }
+ virtual size_t Alignment () const { return DataAlignment; }
virtual bool IsAllocated () const { return DataSize != 0; }
virtual void Zero ();
@@ -92,6 +93,7 @@ namespace VeraCrypt
protected:
byte *DataPtr;
size_t DataSize;
+ size_t DataAlignment;
private:
Buffer (const Buffer &);
@@ -102,11 +104,11 @@ namespace VeraCrypt
{
public:
SecureBuffer () { }
- SecureBuffer (size_t size);
+ SecureBuffer (size_t size, size_t alignment = 0);
SecureBuffer (const ConstBufferPtr &bufferPtr) { CopyFrom (bufferPtr); }
virtual ~SecureBuffer ();
- virtual void Allocate (size_t size);
+ virtual void Allocate (size_t size, size_t alignment = 0);
virtual void Free ();
private:
diff --git a/src/Platform/Memory.cpp b/src/Platform/Memory.cpp
index c8c0476..1184d46 100644
--- a/src/Platform/Memory.cpp
+++ b/src/Platform/Memory.cpp
@@ -13,6 +13,7 @@
#include "Common/Tcdefs.h"
#include "Memory.h"
#include "Exception.h"
+#include <stdlib.h>
namespace VeraCrypt
{
@@ -27,6 +28,23 @@ namespace VeraCrypt
return bufPtr;
}
+
+ void *Memory::AllocateAligned (std::size_t size, std::size_t alignment)
+ {
+ if (size < 1)
+ throw ParameterIncorrect (SRC_POS);
+#ifdef TC_WINDOWS
+ void *bufPtr = _aligned_malloc (size, alignment);
+#else
+ void *bufPtr = NULL;
+ if (0 != posix_memalign (&bufPtr, alignment, size))
+ bufPtr = NULL;
+#endif
+ if (!bufPtr)
+ throw bad_alloc();
+
+ return bufPtr;
+ }
int Memory::Compare (const void *memory1, size_t size1, const void *memory2, size_t size2)
{
@@ -59,4 +77,14 @@ namespace VeraCrypt
assert (memory != nullptr);
free (memory);
}
+
+ void Memory::FreeAligned (void *memory)
+ {
+ assert (memory != nullptr);
+#ifdef TC_WINDOWS
+ _aligned_free (memory);
+#else
+ free (memory);
+#endif
+ }
}
diff --git a/src/Platform/Memory.h b/src/Platform/Memory.h
index 69ce221..d303c23 100644
--- a/src/Platform/Memory.h
+++ b/src/Platform/Memory.h
@@ -73,10 +73,12 @@ namespace VeraCrypt
{
public:
static void *Allocate (size_t size);
+ static void *AllocateAligned (size_t size, size_t alignment);
static int Compare (const void *memory1, size_t size1, const void *memory2, size_t size2);
static void Copy (void *memoryDestination, const void *memorySource, size_t size);
static void Erase (void *memory, size_t size);
static void Free (void *memory);
+ static void FreeAligned (void *memory);
static void Zero (void *memory, size_t size);
};
diff --git a/src/Readme.txt b/src/Readme.txt
index 2eb01c5..5280ac3 100644
--- a/src/Readme.txt
+++ b/src/Readme.txt
@@ -48,8 +48,6 @@ Requirements for Building VeraCrypt for Windows:
- Microsoft Windows SDK for Windows 7.1 (configured for Visual C++ 2010)
- Microsoft Windows SDK for Windows 8.1 (needed for SHA-256 code signing)
- Microsoft Windows Driver Kit 7.1.0 (build 7600.16385.1)
-- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
- header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20)
- NASM assembler 2.08 or compatible
- gzip compressor
- upx packer (available at http://upx.sourceforge.net/)
@@ -90,17 +88,13 @@ Instructions for Building VeraCrypt for Windows:
directory than '%SYSTEMDRIVE%\WinDDK', create an environment variable
'WINDDK_ROOT' pointing to the DDK installation directory.
-3) Copy the PKCS #11 header files to a standard include path or create an
- environment variable 'PKCS11_INC' pointing to the directory where
- the PKCS #11 header files are installed.
+3) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2010.
-4) Open the solution file 'VeraCrypt.sln' in Microsoft Visual Studio 2010.
+4) Select 'All' as the active solution configuration.
-5) Select 'All' as the active solution configuration.
+5) Build the solution.
-6) Build the solution.
-
-7) If successful, there should be newly built VeraCrypt binaries in the
+6) If successful, there should be newly built VeraCrypt binaries in the
'Release' folder.
Instructions for Signing and Packaging VeraCrypt for Windows:
@@ -141,10 +135,6 @@ Requirements for Building VeraCrypt for Linux and Mac OS X:
wxWidgets 3.0 library source code (available at http://www.wxwidgets.org)
- FUSE library and header files (available at https://github.com/libfuse/libfuse
and https://osxfuse.github.io/)
-- RSA Security Inc. PKCS #11 Cryptographic Token Interface (Cryptoki) 2.20
- header files (available at ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20).
- They are already included in the source tree under the directory PKCS11 but
- it is possible to override it using the environment variable 'PKCS11_INC'.
Instructions for Building VeraCrypt for Linux and Mac OS X:
@@ -255,10 +245,11 @@ Copyright (c) 2013-2016 IDRIX. All rights reserved.
Copyright (c) 2003-2012 TrueCrypt Developers Association. All rights reserved.
Copyright (c) 1998-2000 Paul Le Roux. All rights reserved.
Copyright (c) 1998-2008 Brian Gladman, Worcester, UK. All rights reserved.
-Copyright (c) 2002-2004 Mark Adler. All rights reserved.
+Copyright (c) 1995-2013 Jean-loup Gailly and Mark Adler.
Copyright (c) 2016 Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
-Copyright (c) 1990-2002 Info-ZIP. All rights reserved.
+Copyright (c) Dieter Baron and Thomas Klausner.
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
+Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.
For more information, please see the legal notices attached to parts of the
source code.
diff --git a/src/Release/Setup Files/License.txt b/src/Release/Setup Files/License.txt
index dc686dd..5a638ac 100644
--- a/src/Release/Setup Files/License.txt
+++ b/src/Release/Setup Files/License.txt
@@ -679,24 +679,94 @@ warranties in respect of its properties, including, but not
limited to, correctness and/or fitness for purpose.
____________________________________________________________
-Copyright (C) 2002-2004 Mark Adler, all rights reserved
-version 1.8, 9 Jan 2004
-
-This software is provided 'as-is', without any express or
-implied warranty. In no event will the author be held liable
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you
- must not claim that you wrote the original software. If you
- use this software in a product, an acknowledgment in the
- product documentation would be appreciated but is not
- required.
-2. Altered source versions must be plainly marked as such, and
- must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source
- distribution.
+Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+____________________________________________________________
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+____________________________________________________________
+Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
+
+____________________________________________________________
+Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
+This program and the accompanying materials are licensed and made available
+under the terms and conditions of the GNU Lesser General Public License,
+version 3.0 (LGPL-3.0).
+
+The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0
+____________________________________________________________
+Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
____________________________________________________________
diff --git a/src/Release/Setup Files/NOTICE b/src/Release/Setup Files/NOTICE
index 6c2416c..7ded056 100644
--- a/src/Release/Setup Files/NOTICE
+++ b/src/Release/Setup Files/NOTICE
@@ -111,24 +111,94 @@ warranties in respect of its properties, including, but not
limited to, correctness and/or fitness for purpose.
____________________________________________________________
-Copyright (C) 2002-2004 Mark Adler, all rights reserved
-version 1.8, 9 Jan 2004
-
-This software is provided 'as-is', without any express or
-implied warranty. In no event will the author be held liable
-for any damages arising from the use of this software.
-
-Permission is granted to anyone to use this software for any
-purpose, including commercial applications, and to alter it and
-redistribute it freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you
- must not claim that you wrote the original software. If you
- use this software in a product, an acknowledgment in the
- product documentation would be appreciated but is not
- required.
-2. Altered source versions must be plainly marked as such, and
- must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source
- distribution.
+Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+____________________________________________________________
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner
+
+The authors can be contacted at <libzip@nih.at>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+3. The names of the authors may not be used to endorse or promote
+ products derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+____________________________________________________________
+Copyright (c) 2013, Alexey Degtyarev. All rights reserved.
+
+____________________________________________________________
+Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov
+This program and the accompanying materials are licensed and made available
+under the terms and conditions of the GNU Lesser General Public License,
+version 3.0 (LGPL-3.0).
+
+The full text of the license may be found at https://opensource.org/licenses/LGPL-3.0
+____________________________________________________________
+Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd.
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
____________________________________________________________
diff --git a/src/Release/Setup Files/VeraCrypt User Guide.pdf b/src/Release/Setup Files/VeraCrypt User Guide.pdf
index b44a372..bfb9335 100644
--- a/src/Release/Setup Files/VeraCrypt User Guide.pdf
+++ b/src/Release/Setup Files/VeraCrypt User Guide.pdf
Binary files differ
diff --git a/src/Release/Setup Files/veracrypt-x64.sys b/src/Release/Setup Files/veracrypt-x64.sys
new file mode 100644
index 0000000..611f410
--- /dev/null
+++ b/src/Release/Setup Files/veracrypt-x64.sys
Binary files differ
diff --git a/src/Release/Setup Files/veracrypt.sys b/src/Release/Setup Files/veracrypt.sys
new file mode 100644
index 0000000..5def81a
--- /dev/null
+++ b/src/Release/Setup Files/veracrypt.sys
Binary files differ
diff --git a/src/Resources/Texts/License.rtf b/src/Resources/Texts/License.rtf
index 45e0639..1af5c90 100644
--- a/src/Resources/Texts/License.rtf
+++ b/src/Resources/Texts/License.rtf
@@ -41,23 +41,27 @@ c.\tab Phrase "\i Based on TrueCrypt, freely available at {\field{\*\fldinst{HYP
\pard\nowidctlpar\fi-283\li707\i0\scaps0\f0 1.\tab source code distributions include the above copyright notice, this list of conditions and the following disclaimer;\par
2.\tab binary distributions include the above copyright notice, this list of conditions and the following disclaimer in their documentation;\par
\pard\nowidctlpar\fi-283\li707\sa283 3.\tab the name of the copyright holder is not used to endorse products built using this software without specific written permission. \par
-\pard\nowidctlpar\sa283 DISCLAIMER\line\line This software is provided 'as is' with no explicit or implied warranties in respect of its properties, including, but not limited to, correctness and/or fitness for purpose.\line ____________________________________________________________\line\line Copyright (C) 2002-2004 Mark Adler, all rights reserved\line version 1.8, 9 Jan 2004\line\line This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software.\line\line Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\par
+\pard\nowidctlpar\sa283 DISCLAIMER\line\line This software is provided 'as is' with no explicit or implied warranties in respect of its properties, including, but not limited to, correctness and/or fitness for purpose.\line ____________________________________________________________\line\line Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler\line\line This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software.\line\line Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\par
\pard\nowidctlpar\fi-283\li707 1.\tab The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. \par
2.\tab Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. \par
\pard\nowidctlpar\fi-283\li707\sa283 3.\tab This notice may not be removed or altered from any source distribution. \par
\pard\nowidctlpar\sa283 ____________________________________________________________\f2\par
-Copyright (c) 1990-2002 Info-ZIP. All rights reserved.\par
-For the purposes of this copyright and license, "Info-ZIP" is defined as the following set of individuals:\par
-Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois, Jean-loup Gailly, Hunter Goatley, Ian Gorman, Chris Herborth, Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz, David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko, Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs, Kai Uwe Rommel, Steve Salisbury, Dave Smith, Christian Spieler, Antoine Verheijen, Paul von Behren, Rich Wales, Mike White\par
-This software is provided "as is", without warranty of any kind, express or implied. In no event shall Info-ZIP or its contributors be held liable for any direct, indirect, incidental, special or consequential damages arising out of the use of or inability to use this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:\par
-1. Redistributions of source code must retain the above copyright notice, definition, disclaimer, and this list of conditions.\par
-2. Redistributions in binary form (compiled executables) must reproduce the above copyright notice, definition, disclaimer, and this list of conditions in documentation and/or other materials provided with the distribution. The sole exception to this condition is redistribution of a standard UnZipSFX binary as part of a self-extracting archive; that is permitted without inclusion of this license, as long as the normal UnZipSFX banner has not been removed from the binary or disabled.\par
-3. Altered versions--including, but not limited to, ports to new operating systems, existing ports with new graphical interfaces, and dynamic, shared, or static library versions--must be plainly marked as such and must not be misrepresented as being the original source. Such altered versions also must not be misrepresented as being Info-ZIP releases--including, but not limited to, labeling of the altered versions with the names "Info-ZIP" (or any variation thereof, including, but not limited to, different capitalizations), "Pocket UnZip", "WiZ" or "MacZip" without the explicit permission of Info-ZIP. Such altered versions are further prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP e-mail addresses or of the Info-ZIP URL(s).\par
-4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip", "UnZip", "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and "MacZip" for its own source and binary releases.\par
-____________________________________________________________\par
+Copyright (C) 1999-2016 Dieter Baron and Thomas Klausner\par
+The authors can be contacted at <libzip@nih.at>\par
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par
+3. The names of the authors may not be used to endorse or promote products derived from this software without specific prior written permission.\par
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.____________________________________________________________\par
Copyright (c) 2013, Alexey Degtyarev. All rights reserved.\par
____________________________________________________________\par
Copyright (c) 2016. Disk Cryptography Services for EFI (DCS), Alex Kolotnikov\par
This program and the accompanying materials are licensed and made available under the terms and conditions of the GNU Lesser General Public License, version 3.0 (LGPL-3.0).\line\line The full text of the license may be found at {\field{\*\fldinst{HYPERLINK "https://opensource.org/licenses/LGPL-3.0"}}{\fldrslt{\ul\cf1 https://opensource.org/licenses/LGPL-3.0}}}\f0\fs16\par
+____________________________________________________________\f2\par
+Copyright (c) 1999-2013,2014,2015,2016 Jack Lloyd. All rights reserved.\par
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par
+THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\f0\par
}
diff --git a/src/Setup/MacOSX/veracrypt.pkgproj b/src/Setup/MacOSX/veracrypt.pkgproj
index 589c1fb..059f3d3 100755
--- a/src/Setup/MacOSX/veracrypt.pkgproj
+++ b/src/Setup/MacOSX/veracrypt.pkgproj
@@ -495,7 +495,7 @@
<key>OVERWRITE_PERMISSIONS</key>
<false/>
<key>VERSION</key>
- <string>1.18.13</string>
+ <string>1.19.4</string>
</dict>
<key>UUID</key>
<string>B14381D9-EC5F-43E4-B971-82AB3D132A64</string>
@@ -790,7 +790,7 @@
<key>SECONDARY_VALUE</key>
<string></string>
<key>VALUE</key>
- <string>OSXFuse seems to be missing on your machine. VeraCrypt requires OSXFuse 2.3 or above.
+ <string>OSXFuse seems to be missing on your machine. VeraCrypt requires OSXFuse 2.5 or above.
Please download the latest OSXFuse version from :
https://osxfuse.github.io/</string>
</dict>
@@ -800,7 +800,7 @@ https://osxfuse.github.io/</string>
<key>SECONDARY_VALUE</key>
<string></string>
<key>VALUE</key>
- <string>OSXFuse semble ne pas être installé sur votre machine. VeraCrypt nécessite OSXFuse 2.3 ou supérieur.
+ <string>OSXFuse semble ne pas être installé sur votre machine. VeraCrypt nécessite OSXFuse 2.5 ou supérieur.
Merci de télécharger la dernière version de OSXFuse à partir de :
https://osxfuse.github.io/
@@ -812,53 +812,6 @@ https://osxfuse.github.io/
<key>STATE</key>
<true/>
</dict>
- <dict>
- <key>BEHAVIOR</key>
- <integer>3</integer>
- <key>DICTIONARY</key>
- <dict>
- <key>IC_REQUIREMENT_FILES_CONDITION</key>
- <integer>0</integer>
- <key>IC_REQUIREMENT_FILES_DISK_TYPE</key>
- <integer>1</integer>
- <key>IC_REQUIREMENT_FILES_LIST</key>
- <array>
- <string>/Library/Frameworks/MacFUSE.framework/MacFUSE</string>
- <string>/usr/local/lib/libfuse.dylib</string>
- </array>
- <key>IC_REQUIREMENT_FILES_SELECTOR</key>
- <integer>1</integer>
- </dict>
- <key>IC_REQUIREMENT_CHECK_TYPE</key>
- <integer>0</integer>
- <key>IDENTIFIER</key>
- <string>fr.whitebox.Packages.requirement.files</string>
- <key>MESSAGE</key>
- <array>
- <dict>
- <key>LANGUAGE</key>
- <string>English</string>
- <key>SECONDARY_VALUE</key>
- <string></string>
- <key>VALUE</key>
- <string>VeraCrypt needs OSXFUSE to be installed with MacFUSE compatibility layer enabled.
-Please re-install OSXFUSE and check the MacFUSE compatibility layer in the installer.</string>
- </dict>
- <dict>
- <key>LANGUAGE</key>
- <string>French</string>
- <key>SECONDARY_VALUE</key>
- <string></string>
- <key>VALUE</key>
- <string>VeraCrypt nécessite que OSXFUSE soit installé avec l'option "MacFUSE compatibility layer".
-Merci de ré-installer OSXFUSE et de cocher l'option de compatibilité MacFUSE dans l'installeur.</string>
- </dict>
- </array>
- <key>NAME</key>
- <string>MacFUSE compatibility layer</string>
- <key>STATE</key>
- <true/>
- </dict>
</array>
<key>POSTINSTALL_PATH</key>
<dict/>
@@ -1051,7 +1004,7 @@ Merci de ré-installer OSXFUSE et de cocher l'option de compatibilité MacFUSE d
</dict>
</array>
<key>NAME</key>
- <string>VeraCrypt 1.18</string>
+ <string>VeraCrypt 1.19</string>
</dict>
</dict>
<key>SHARED_GLOBAL_DATA</key>
diff --git a/src/Setup/SelfExtract.c b/src/Setup/SelfExtract.c
index 5129e99..a2ad60d 100644
--- a/src/Setup/SelfExtract.c
+++ b/src/Setup/SelfExtract.c
@@ -12,7 +12,7 @@
#include "Tcdefs.h"
-#include "Inflate.h"
+#include "zlib.h"
#include "SelfExtract.h"
#include "Wizard.h"
#include "Setup.h"
@@ -84,144 +84,26 @@ static void PkgInfo (wchar_t *msg)
// Returns 0 if decompression fails or, if successful, returns the size of the decompressed data
-static int DecompressBuffer (char *out, char *in, int len)
+static int DecompressBuffer (unsigned char *out, int outSize, unsigned char *in, int len)
{
- return (DecompressDeflatedData (out, in, len)); // Inflate
-}
-
-
-static void __cdecl PipeWriteThread (void *len)
-{
- int sendBufSize = PIPE_BUFFER_LEN, bytesSent = 0;
- int bytesToSend = *((int *) len), bytesSentTotal = 0;
-
- if (PipeWriteBuf == NULL || (HANDLE) hChildStdinWrite == INVALID_HANDLE_VALUE)
- {
- PkgError (L"Failed sending data to the STDIN pipe");
- return;
- }
-
- while (bytesToSend > 0)
- {
- if (bytesToSend < PIPE_BUFFER_LEN)
- sendBufSize = bytesToSend;
-
- if (!WriteFile ((HANDLE) hChildStdinWrite, (char *) PipeWriteBuf + bytesSentTotal, sendBufSize, &bytesSent, NULL)
- || bytesSent == 0
- || bytesSent != sendBufSize)
- {
- PkgError (L"Failed sending data to the STDIN pipe");
- return;
- }
-
- bytesToSend -= bytesSent;
- bytesSentTotal += bytesSent;
- }
-
- // Closing the pipe causes the child process to stop reading from it
-
- if (!CloseHandle (hChildStdinWrite))
- {
- PkgError (L"Cannot close pipe");
- return;
- }
+ uLongf outlen = (uLongf) outSize;
+ int ret = uncompress (out, &outlen, in, (uLong) len);
+ if (Z_OK == ret)
+ return (int) outlen;
+ else
+ return 0;
}
// Returns 0 if compression fails or, if successful, the size of the compressed data
-static int CompressBuffer (char *out, char *in, int len)
+static int CompressBuffer (unsigned char *out, int outSize, unsigned char *in, int len)
{
- SECURITY_ATTRIBUTES securityAttrib;
- DWORD bytesReceived = 0;
- HANDLE hChildStdoutWrite = INVALID_HANDLE_VALUE;
- HANDLE hChildStdoutRead = INVALID_HANDLE_VALUE;
- HANDLE hChildStdinRead = INVALID_HANDLE_VALUE;
- STARTUPINFO startupInfo;
- PROCESS_INFORMATION procInfo;
- char pipeBuffer [PIPE_BUFFER_LEN];
- int res_len = 0;
- BOOL bGzipHeaderRead = FALSE;
- wchar_t szGzipCmd[64];
-
- ZeroMemory (&startupInfo, sizeof (startupInfo));
- ZeroMemory (&procInfo, sizeof (procInfo));
-
- // Pipe handle inheritance
- securityAttrib.bInheritHandle = TRUE;
- securityAttrib.nLength = sizeof (securityAttrib);
- securityAttrib.lpSecurityDescriptor = NULL;
-
- if (!CreatePipe (&hChildStdoutRead, &hChildStdoutWrite, &securityAttrib, 0))
- {
- PkgError (L"Cannot create STDOUT pipe.");
- return 0;
- }
- SetHandleInformation (hChildStdoutRead, HANDLE_FLAG_INHERIT, 0);
-
- if (!CreatePipe (&hChildStdinRead, &((HANDLE) hChildStdinWrite), &securityAttrib, 0))
- {
- PkgError (L"Cannot create STDIN pipe.");
- CloseHandle(hChildStdoutWrite);
- CloseHandle(hChildStdoutRead);
- return 0;
- }
- SetHandleInformation (hChildStdinWrite, HANDLE_FLAG_INHERIT, 0);
-
- // Create a child process that will compress the data
-
- startupInfo.wShowWindow = SW_HIDE;
- startupInfo.hStdInput = hChildStdinRead;
- startupInfo.hStdOutput = hChildStdoutWrite;
- startupInfo.cb = sizeof (startupInfo);
- startupInfo.hStdError = hChildStdoutWrite;
- startupInfo.dwFlags |= STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
-
- StringCchCopyW (szGzipCmd, ARRAYSIZE (szGzipCmd), L"gzip --best");
- if (!CreateProcess (NULL, szGzipCmd, NULL, NULL, TRUE, 0, NULL, NULL, &startupInfo, &procInfo))
- {
- PkgError (L"Error: Cannot run gzip.\n\nBefore you can create a self-extracting VeraCrypt package, you need to have the open-source 'gzip' compression tool placed in any directory in the search path for executable files (for example, in 'C:\\Windows\\').\n\nNote: gzip can be freely downloaded e.g. from www.gzip.org");
- CloseHandle(hChildStdoutWrite);
- CloseHandle(hChildStdoutRead);
- CloseHandle(hChildStdinRead);
- CloseHandle(hChildStdinWrite);
- return 0;
- }
-
- CloseHandle (procInfo.hProcess);
- CloseHandle (procInfo.hThread);
-
- // Start sending the uncompressed data to the pipe (STDIN)
- PipeWriteBuf = in;
- _beginthread (PipeWriteThread, PIPE_BUFFER_LEN * 2, (void *) &len);
-
- if (!CloseHandle (hChildStdoutWrite))
- {
- PkgError (L"Cannot close STDOUT write");
- CloseHandle(hChildStdoutRead);
- CloseHandle(hChildStdinRead);
+ uLongf outlen = (uLongf) outSize;
+ int ret = compress2 (out, &outlen, in, (uLong) len, Z_BEST_COMPRESSION);
+ if (Z_OK == ret)
+ return (int) outlen;
+ else
return 0;
- }
-
- bGzipHeaderRead = FALSE;
-
- // Read the compressed data from the pipe (sent by the child process to STDOUT)
- while (TRUE)
- {
- if (!ReadFile (hChildStdoutRead, pipeBuffer, bGzipHeaderRead ? PIPE_BUFFER_LEN : 10, &bytesReceived, NULL))
- break;
-
- if (bGzipHeaderRead)
- {
- memcpy (out + res_len, pipeBuffer, bytesReceived);
- res_len += bytesReceived;
- }
- else
- bGzipHeaderRead = TRUE; // Skip the 10-byte gzip header
- }
-
- CloseHandle(hChildStdoutRead);
- CloseHandle(hChildStdinRead);
- return res_len - 8; // A gzip stream ends with a CRC-32 hash and a 32-bit size (those 8 bytes need to be chopped off)
}
@@ -388,7 +270,8 @@ BOOL MakeSelfExtractingPackage (HWND hwndDlg, wchar_t *szDestDir)
goto err;
}
- compressedBuffer = malloc (uncompressedDataLen + 524288); // + 512K reserve
+ compressedDataLen = uncompressedDataLen + 524288; // + 512K reserve
+ compressedBuffer = malloc (compressedDataLen);
if (compressedBuffer == NULL)
{
if (_wremove (outputFile))
@@ -398,7 +281,7 @@ BOOL MakeSelfExtractingPackage (HWND hwndDlg, wchar_t *szDestDir)
goto err;
}
- compressedDataLen = CompressBuffer (compressedBuffer, buffer, uncompressedDataLen);
+ compressedDataLen = CompressBuffer (compressedBuffer, compressedDataLen, buffer, uncompressedDataLen);
if (compressedDataLen <= 0)
{
if (_wremove (outputFile))
@@ -597,6 +480,7 @@ BOOL SelfExtractInMemory (wchar_t *path)
int fileDataStartPos = 0;
int uncompressedLen = 0;
int compressedLen = 0;
+ int decompressedDataLen = 0;
unsigned char *compressedData = NULL;
unsigned char *bufPos = NULL, *bufEndPos = NULL;
@@ -645,7 +529,8 @@ BOOL SelfExtractInMemory (wchar_t *path)
Error ("DIST_PACKAGE_CORRUPTED", NULL);
}
- DecompressedData = malloc (uncompressedLen + 524288); // + 512K reserve
+ decompressedDataLen = uncompressedLen + 524288; // + 512K reserve
+ DecompressedData = malloc (decompressedDataLen);
if (DecompressedData == NULL)
{
Error ("ERR_MEM_ALLOC", NULL);
@@ -667,7 +552,7 @@ BOOL SelfExtractInMemory (wchar_t *path)
}
// Decompress the data
- if (DecompressBuffer (DecompressedData, compressedData, compressedLen) != uncompressedLen)
+ if (DecompressBuffer (DecompressedData, decompressedDataLen, compressedData, compressedLen) != uncompressedLen)
{
Error ("DIST_PACKAGE_CORRUPTED", NULL);
goto sem_end;
diff --git a/src/Setup/Setup.c b/src/Setup/Setup.c
index 331b8ea..6f35e28 100644
--- a/src/Setup/Setup.c
+++ b/src/Setup/Setup.c
@@ -128,23 +128,7 @@ BOOL StatRemoveDirectory (wchar_t *lpszDir)
if (_wstat64 (lpszDir, &st) == 0)
{
- BOOL bStatus = RemoveDirectory (lpszDir);
- if (!bStatus)
- {
- /* force removal of the non empty directory */
- wchar_t szOpPath[TC_MAX_PATH + 1] = {0};
- SHFILEOPSTRUCTW op;
-
- StringCchCopyW(szOpPath, ARRAYSIZE(szOpPath)-1, lpszDir);
- ZeroMemory(&op, sizeof(op));
- op.wFunc = FO_DELETE;
- op.pFrom = szOpPath;
- op.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
-
- if ((0 == SHFileOperation(&op)) && (!op.fAnyOperationsAborted))
- bStatus = TRUE;
- }
- return bStatus;
+ return DeleteDirectory (lpszDir);
}
else
return TRUE;
diff --git a/src/Setup/Setup.rc b/src/Setup/Setup.rc
index 8e30131..918b3e7 100644
--- a/src/Setup/Setup.rc
+++ b/src/Setup/Setup.rc
@@ -1,327 +1,327 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-#include "..\\common\\resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,18,13,0
- PRODUCTVERSION 1,18,13,0
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "IDRIX"
- VALUE "FileDescription", "VeraCrypt Setup"
- VALUE "FileVersion", "1.18"
- VALUE "LegalTrademarks", "VeraCrypt"
- VALUE "OriginalFilename", "VeraCrypt Setup.exe"
- VALUE "ProductName", "VeraCrypt"
- VALUE "ProductVersion", "1.18"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// HEADER
-//
-
-IDR_SETUP_RSRC_HEADER HEADER "resource.h"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// REGISTRY
-//
-
-IDR_COMREG REGISTRY "ComSetup.rgs"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_UNINSTALL DIALOGEX 0, 0, 349, 234
-STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Uninstall VeraCrypt"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- LTEXT "Click Uninstall to remove VeraCrypt from this system.",IDT_UNINSTALL_DIR,8,8,334,8
- LISTBOX IDC_LOG_WINDOW,7,21,335,179,LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL
- DEFPUSHBUTTON "&Uninstall",IDC_UNINSTALL,236,213,50,14
- PUSHBUTTON "Cancel",IDCANCEL,292,213,50,14
- CONTROL "Create System &Restore point",IDC_SYSTEM_RESTORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,215,194,10
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,206,347,1,WS_EX_STATICEDGE
- CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,1,348,1,WS_EX_STATICEDGE
-END
-
-IDD_INSTALL_OPTIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_DESTINATION,11,41,260,13,ES_AUTOHSCROLL
- PUSHBUTTON "Bro&wse...",IDC_BROWSE,278,40,59,14
- CONTROL "Install &for all users",IDC_ALL_USERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,77,168,11
- CONTROL "Associate the .hc file &extension with VeraCrypt",IDC_FILE_TYPE,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,113,232,11
- CONTROL "Add VeraCrypt to &Start menu",IDC_PROG_GROUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,89,168,11
- CONTROL "Create System &Restore point",IDC_SYSTEM_RESTORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,125,194,11
- CONTROL "Add VeraCrypt icon to &desktop",IDC_DESKTOP_ICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,101,168,11
- LTEXT "Please select or type the location where you want to install the VeraCrypt program files. If the specified folder does not exist, it will be automatically created.",IDT_INSTALL_DESTINATION,11,14,319,25
-END
-
-IDD_INFO_PAGE_DLG DIALOGEX 0, 0, 217, 156
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LTEXT "",IDC_BOX_HELP,0,10,217,146
-END
-
-IDD_INTRO_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "",IDC_LICENSE_TEXT,"RichEdit20A",ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,0,23,345,108
- CONTROL "",IDC_AGREE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,137,126,10
- LTEXT "",IDC_BOX_HELP,0,0,346,22
-END
-
-IDD_INSTL_DLG DIALOGEX 0, 0, 374, 231
-STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "VeraCrypt Setup Wizard"
-CLASS "VeraCryptCustomDlg"
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "&Help",IDHELP,150,211,50,14
- PUSHBUTTON "",IDC_PREV,209,211,50,14
- DEFPUSHBUTTON "",IDC_NEXT,259,211,50,14
- PUSHBUTTON "Cancel",IDCANCEL,317,211,50,14
- LTEXT "",IDC_BOX_TITLE,11,5,324,12,0,WS_EX_TRANSPARENT
- CONTROL 107,IDC_BITMAP_SETUP_WIZARD,"Static",SS_BITMAP | SS_NOTIFY,139,3,228,30
- CONTROL 109,IDC_SETUP_WIZARD_BKG,"Static",SS_BITMAP,0,0,11,10
- CONTROL "",IDC_SETUP_WIZARD_GFX_AREA,"Static",SS_GRAYRECT | NOT WS_VISIBLE,0,0,378,36,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
- CONTROL "",IDC_HR_BOTTOM,"Static",SS_ETCHEDHORZ,67,204,306,1,WS_EX_STATICEDGE
- CONTROL "",IDC_HR,"Static",SS_ETCHEDHORZ,0,35,399,1,WS_EX_STATICEDGE
- LTEXT "VeraCrypt Installer",IDC_STATIC,4,200,62,8,WS_DISABLED
- LTEXT "",IDC_BOX_INFO,18,18,317,13,0,WS_EX_TRANSPARENT
- LTEXT "",IDC_MAIN_CONTENT_CANVAS,0,36,374,164
- LTEXT "",IDC_POS_BOX,14,42,346,155,0,WS_EX_TRANSPARENT
-END
-
-IDD_EXTRACTION_OPTIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "Bro&wse...",IDC_BROWSE,277,32,62,14
- EDITTEXT IDC_DESTINATION,6,33,264,12,ES_AUTOHSCROLL
- LTEXT "Please select or type the location where you want to place the extracted files:",IDT_EXTRACT_DESTINATION,6,15,333,17
- CONTROL "&Open the destination location when finished",IDC_OPEN_CONTAINING_FOLDER,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,91,318,16
- LTEXT "",IDC_BOX_HELP,6,56,333,32
-END
-
-IDD_WIZARD_MODE_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- CONTROL "&Install",IDC_WIZARD_MODE_INSTALL,"Button",BS_AUTORADIOBUTTON,6,14,232,10
- CONTROL "&Extract",IDC_WIZARD_MODE_EXTRACT_ONLY,"Button",BS_AUTORADIOBUTTON,6,60,232,10
- LTEXT "",IDC_BOX_HELP,42,77,286,64
- LTEXT "",IDC_BOX_HELP2,42,30,286,29
-END
-
-IDD_PROGRESS_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
-BEGIN
- LISTBOX IDC_LOG_WINDOW,0,1,345,131,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL
- CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,0,139,345,12
-END
-
-IDD_DONATIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
-STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
-EXSTYLE WS_EX_TRANSPARENT
-FONT 8, "MS Shell Dlg", 0, 0, 0x0
-BEGIN
- PUSHBUTTON "Donate now...",IDC_DONATE,124,94,96,14
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_SETUP ICON "Setup.ico"
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "#include ""..\\\\common\\\\resource.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#include ""..\\\\common\\\\common.rc""\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_UNINSTALL, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 342
- TOPMARGIN, 7
- BOTTOMMARGIN, 229
- END
-
- IDD_INSTALL_OPTIONS_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 147
- END
-
- IDD_INFO_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 210
- TOPMARGIN, 7
- BOTTOMMARGIN, 149
- END
-
- IDD_INTRO_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 145
- END
-
- IDD_INSTL_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 367
- TOPMARGIN, 1
- BOTTOMMARGIN, 229
- HORZGUIDE, 196
- END
-
- IDD_EXTRACTION_OPTIONS_PAGE_DLG, DIALOG
- BEGIN
- RIGHTMARGIN, 343
- BOTTOMMARGIN, 147
- END
-
- IDD_WIZARD_MODE_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 145
- END
-
- IDD_PROGRESS_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 145
- END
-
- IDD_DONATIONS_PAGE_DLG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 339
- TOPMARGIN, 7
- BOTTOMMARGIN, 147
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Bitmap
-//
-
-IDB_SETUP_WIZARD BITMAP "VeraCrypt_setup.bmp"
-IDB_SETUP_WIZARD_BKG BITMAP "VeraCrypt_setup_background.bmp"
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#include "..\\common\\common.rc"
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+#include "..\\common\\resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,19,4,0
+ PRODUCTVERSION 1,19,4,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "IDRIX"
+ VALUE "FileDescription", "VeraCrypt Setup"
+ VALUE "FileVersion", "1.19"
+ VALUE "LegalTrademarks", "VeraCrypt"
+ VALUE "OriginalFilename", "VeraCrypt Setup.exe"
+ VALUE "ProductName", "VeraCrypt"
+ VALUE "ProductVersion", "1.19"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// HEADER
+//
+
+IDR_SETUP_RSRC_HEADER HEADER "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// REGISTRY
+//
+
+IDR_COMREG REGISTRY "ComSetup.rgs"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_UNINSTALL DIALOGEX 0, 0, 349, 234
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Uninstall VeraCrypt"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ LTEXT "Click Uninstall to remove VeraCrypt from this system.",IDT_UNINSTALL_DIR,8,8,334,8
+ LISTBOX IDC_LOG_WINDOW,7,21,335,179,LBS_NOINTEGRALHEIGHT | LBS_NOSEL | WS_VSCROLL
+ DEFPUSHBUTTON "&Uninstall",IDC_UNINSTALL,236,213,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,292,213,50,14
+ CONTROL "Create System &Restore point",IDC_SYSTEM_RESTORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,215,194,10
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,2,206,347,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,1,348,1,WS_EX_STATICEDGE
+END
+
+IDD_INSTALL_OPTIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ EDITTEXT IDC_DESTINATION,11,41,260,13,ES_AUTOHSCROLL
+ PUSHBUTTON "Bro&wse...",IDC_BROWSE,278,40,59,14
+ CONTROL "Install &for all users",IDC_ALL_USERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,77,168,11
+ CONTROL "Associate the .hc file &extension with VeraCrypt",IDC_FILE_TYPE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,113,232,11
+ CONTROL "Add VeraCrypt to &Start menu",IDC_PROG_GROUP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,89,168,11
+ CONTROL "Create System &Restore point",IDC_SYSTEM_RESTORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,125,194,11
+ CONTROL "Add VeraCrypt icon to &desktop",IDC_DESKTOP_ICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,101,168,11
+ LTEXT "Please select or type the location where you want to install the VeraCrypt program files. If the specified folder does not exist, it will be automatically created.",IDT_INSTALL_DESTINATION,11,14,319,25
+END
+
+IDD_INFO_PAGE_DLG DIALOGEX 0, 0, 217, 156
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "",IDC_BOX_HELP,0,10,217,146
+END
+
+IDD_INTRO_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "",IDC_LICENSE_TEXT,"RichEdit20A",ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_BORDER | WS_VSCROLL | WS_TABSTOP,0,23,345,108
+ CONTROL "",IDC_AGREE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,2,137,126,10
+ LTEXT "",IDC_BOX_HELP,0,0,346,22
+END
+
+IDD_INSTL_DLG DIALOGEX 0, 0, 374, 231
+STYLE DS_SETFONT | DS_SETFOREGROUND | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "VeraCrypt Setup Wizard"
+CLASS "VeraCryptCustomDlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "&Help",IDHELP,150,211,50,14
+ PUSHBUTTON "",IDC_PREV,209,211,50,14
+ DEFPUSHBUTTON "",IDC_NEXT,259,211,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,317,211,50,14
+ LTEXT "",IDC_BOX_TITLE,11,5,324,12,0,WS_EX_TRANSPARENT
+ CONTROL 107,IDC_BITMAP_SETUP_WIZARD,"Static",SS_BITMAP | SS_NOTIFY,139,3,228,30
+ CONTROL 109,IDC_SETUP_WIZARD_BKG,"Static",SS_BITMAP,0,0,11,10
+ CONTROL "",IDC_SETUP_WIZARD_GFX_AREA,"Static",SS_GRAYRECT | NOT WS_VISIBLE,0,0,378,36,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
+ CONTROL "",IDC_HR_BOTTOM,"Static",SS_ETCHEDHORZ,67,204,306,1,WS_EX_STATICEDGE
+ CONTROL "",IDC_HR,"Static",SS_ETCHEDHORZ,0,35,399,1,WS_EX_STATICEDGE
+ LTEXT "VeraCrypt Installer",IDC_STATIC,4,200,62,8,WS_DISABLED
+ LTEXT "",IDC_BOX_INFO,18,18,317,13,0,WS_EX_TRANSPARENT
+ LTEXT "",IDC_MAIN_CONTENT_CANVAS,0,36,374,164
+ LTEXT "",IDC_POS_BOX,14,42,346,155,0,WS_EX_TRANSPARENT
+END
+
+IDD_EXTRACTION_OPTIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "Bro&wse...",IDC_BROWSE,277,32,62,14
+ EDITTEXT IDC_DESTINATION,6,33,264,12,ES_AUTOHSCROLL
+ LTEXT "Please select or type the location where you want to place the extracted files:",IDT_EXTRACT_DESTINATION,6,15,333,17
+ CONTROL "&Open the destination location when finished",IDC_OPEN_CONTAINING_FOLDER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,91,318,16
+ LTEXT "",IDC_BOX_HELP,6,56,333,32
+END
+
+IDD_WIZARD_MODE_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "&Install",IDC_WIZARD_MODE_INSTALL,"Button",BS_AUTORADIOBUTTON,6,14,232,10
+ CONTROL "&Extract",IDC_WIZARD_MODE_EXTRACT_ONLY,"Button",BS_AUTORADIOBUTTON,6,60,232,10
+ LTEXT "",IDC_BOX_HELP,42,77,286,64
+ LTEXT "",IDC_BOX_HELP2,42,30,286,29
+END
+
+IDD_PROGRESS_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LISTBOX IDC_LOG_WINDOW,0,1,345,131,LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | LBS_NOSEL | WS_VSCROLL
+ CONTROL "",IDC_PROGRESS_BAR,"msctls_progress32",PBS_SMOOTH | WS_BORDER,0,139,345,12
+END
+
+IDD_DONATIONS_PAGE_DLG DIALOGEX 0, 0, 346, 152
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+EXSTYLE WS_EX_TRANSPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x0
+BEGIN
+ PUSHBUTTON "Donate now...",IDC_DONATE,124,94,96,14
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SETUP ICON "Setup.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "#include ""..\\\\common\\\\resource.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""..\\\\common\\\\common.rc""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_UNINSTALL, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 342
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 229
+ END
+
+ IDD_INSTALL_OPTIONS_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 147
+ END
+
+ IDD_INFO_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 210
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 149
+ END
+
+ IDD_INTRO_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 145
+ END
+
+ IDD_INSTL_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 367
+ TOPMARGIN, 1
+ BOTTOMMARGIN, 229
+ HORZGUIDE, 196
+ END
+
+ IDD_EXTRACTION_OPTIONS_PAGE_DLG, DIALOG
+ BEGIN
+ RIGHTMARGIN, 343
+ BOTTOMMARGIN, 147
+ END
+
+ IDD_WIZARD_MODE_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 145
+ END
+
+ IDD_PROGRESS_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 145
+ END
+
+ IDD_DONATIONS_PAGE_DLG, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 339
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 147
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_SETUP_WIZARD BITMAP "VeraCrypt_setup.bmp"
+IDB_SETUP_WIZARD_BKG BITMAP "VeraCrypt_setup_background.bmp"
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "..\\common\\common.rc"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/Setup/Setup.vcproj b/src/Setup/Setup.vcproj
index a1a6a81..05a67aa 100644
--- a/src/Setup/Setup.vcproj
+++ b/src/Setup/Setup.vcproj
@@ -1,484 +1,484 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9.00"
- Name="Setup"
- ProjectGUID="{DF5F654D-BD44-4E31-B92E-B68074DC37A8}"
- RootNamespace="Setup"
- Keyword="Win32Proj"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="SETUP;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- DebugInformationFormat="4"
- DisableSpecificWarnings="4057;4100;4127;4201;4505;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/NODEFAULTLIB:LIBCMTD"
- AdditionalDependencies="libcmtd.lib atlsd.lib mpr.lib"
- OutputFile="$(OutDir)/VeraCryptSetup.exe"
- LinkIncremental="2"
- GenerateManifest="false"
- UACExecutionLevel="2"
- DelayLoadDLLs="user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;mpr.dll"
- GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/Setup.pdb"
- SubSystem="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Setup.manifest"
- EmbedManifest="true"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptSetup.exe &quot;..\Debug\Setup Files\VeraCrypt Setup.exe&quot; &gt;NUL:&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/w34189"
- Optimization="2"
- AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
- PreprocessorDefinitions="SETUP;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS"
- RuntimeLibrary="0"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- AssemblerOutput="2"
- AssemblerListingLocation="$(IntDir)/"
- WarningLevel="4"
- DebugInformationFormat="0"
- DisableSpecificWarnings="4057;4100;4127;4201;4505;4701;4706"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalOptions="/IGNORE:4089"
- AdditionalDependencies="mpr.lib"
- OutputFile="$(OutDir)/VeraCryptSetup.exe"
- LinkIncremental="1"
- GenerateManifest="false"
- UACExecutionLevel="2"
- DelayLoadDLLs="user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;mpr.dll"
- GenerateDebugInformation="false"
- GenerateMapFile="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- RandomizedBaseAddress="1"
- DataExecutionPrevention="2"
- TargetMachine="1"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- AdditionalManifestFiles="Setup.manifest"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="copy Release\VeraCryptSetup.exe &quot;..\Release\Setup Files\VeraCrypt Setup.exe&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
- >
- <File
- RelativePath=".\ComSetup.cpp"
- >
- </File>
- <File
- RelativePath=".\ComSetup.rgs"
- >
- </File>
- <File
- RelativePath=".\Dir.c"
- >
- </File>
- <File
- RelativePath=".\SelfExtract.c"
- >
- </File>
- <File
- RelativePath=".\Setup.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Wizard.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Xml.c"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\BootEncryption.cpp"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.c"
- >
- </File>
- <File
- RelativePath="..\Common\Dictionary.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Dlgcode.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- CompileAs="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Endian.c"
- >
- </File>
- <File
- RelativePath="..\Common\Inflate.c"
- >
- </File>
- <File
- RelativePath="..\Common\Language.c"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.c"
- >
- </File>
- </Filter>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
- >
- <File
- RelativePath="..\Common\Apidrvr.h"
- >
- </File>
- <File
- RelativePath="..\Common\Combo.h"
- >
- </File>
- <File
- RelativePath=".\ComSetup.h"
- >
- </File>
- <File
- RelativePath="..\Common\Crc.h"
- >
- </File>
- <File
- RelativePath=".\Dir.h"
- >
- </File>
- <File
- RelativePath="..\Common\Dlgcode.h"
- >
- </File>
- <File
- RelativePath="..\Common\Exception.h"
- >
- </File>
- <File
- RelativePath="..\Common\Inflate.h"
- >
- </File>
- <File
- RelativePath="..\Common\Language.h"
- >
- </File>
- <File
- RelativePath="..\Common\Registry.h"
- >
- </File>
- <File
- RelativePath="..\Common\Resource.h"
- >
- </File>
- <File
- RelativePath=".\Resource.h"
- >
- </File>
- <File
- RelativePath=".\SelfExtract.h"
- >
- </File>
- <File
- RelativePath=".\Setup.h"
- >
- </File>
- <File
- RelativePath="..\Common\Tcdefs.h"
- >
- </File>
- <File
- RelativePath=".\Wizard.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
- >
- <File
- RelativePath=".\Setup.ico"
- >
- </File>
- <File
- RelativePath=".\Setup.manifest"
- >
- </File>
- <File
- RelativePath=".\Setup.rc"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt.ico"
- >
- </File>
- <File
- RelativePath=".\VeraCrypt_setup.bmp"
- >
- </File>
- <File
- RelativePath=".\VeraCrypt_setup_background.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\VeraCrypt_Volume.ico"
- >
- </File>
- <Filter
- Name="Common"
- >
- <File
- RelativePath="..\Common\Common.rc"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCResourceCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="..\Common\Language.xml"
- >
- </File>
- <File
- RelativePath="..\Resources\Texts\License.rtf"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_288dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_96dpi.bmp"
- >
- </File>
- <File
- RelativePath="..\Common\Textual_logo_background.bmp"
- >
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Setup"
+ ProjectGUID="{DF5F654D-BD44-4E31-B92E-B68074DC37A8}"
+ RootNamespace="Setup"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="SETUP;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4057;4100;4127;4201;4505;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NODEFAULTLIB:LIBCMTD"
+ AdditionalDependencies="libcmtd.lib atlsd.lib mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptSetup.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ UACExecutionLevel="2"
+ DelayLoadDLLs="user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;mpr.dll"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Setup.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Setup.manifest"
+ EmbedManifest="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="md &quot;..\Debug\Setup Files&quot; 2&gt;NUL:&#x0D;&#x0A;copy Debug\VeraCryptSetup.exe &quot;..\Debug\Setup Files\VeraCrypt Setup.exe&quot; &gt;NUL:&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/w34189"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\Common;..\Crypto;..\;..\PKCS11"
+ PreprocessorDefinitions="SETUP;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="true"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)/"
+ WarningLevel="4"
+ DebugInformationFormat="0"
+ DisableSpecificWarnings="4057;4100;4127;4201;4505;4701;4706"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/IGNORE:4089"
+ AdditionalDependencies="mpr.lib"
+ OutputFile="$(OutDir)/VeraCryptSetup.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ UACExecutionLevel="2"
+ DelayLoadDLLs="user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;mpr.dll"
+ GenerateDebugInformation="false"
+ GenerateMapFile="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ AdditionalManifestFiles="Setup.manifest"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\VeraCryptSetup.exe &quot;..\Release\Setup Files\VeraCrypt Setup.exe&quot;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\ComSetup.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\ComSetup.rgs"
+ >
+ </File>
+ <File
+ RelativePath=".\Dir.c"
+ >
+ </File>
+ <File
+ RelativePath=".\SelfExtract.c"
+ >
+ </File>
+ <File
+ RelativePath=".\Setup.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Wizard.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Xml.c"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\BootEncryption.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dictionary.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ CompileAs="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Endian.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.c"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.c"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\Common\Apidrvr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Combo.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ComSetup.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Crc.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Dir.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Dlgcode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Exception.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Inflate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Language.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Registry.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\SelfExtract.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Setup.h"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Tcdefs.h"
+ >
+ </File>
+ <File
+ RelativePath=".\Wizard.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\Setup.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\Setup.manifest"
+ >
+ </File>
+ <File
+ RelativePath=".\Setup.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\VeraCrypt_setup.bmp"
+ >
+ </File>
+ <File
+ RelativePath=".\VeraCrypt_setup_background.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\VeraCrypt_Volume.ico"
+ >
+ </File>
+ <Filter
+ Name="Common"
+ >
+ <File
+ RelativePath="..\Common\Common.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\Common\Language.xml"
+ >
+ </File>
+ <File
+ RelativePath="..\Resources\Texts\License.rtf"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_288dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_96dpi.bmp"
+ >
+ </File>
+ <File
+ RelativePath="..\Common\Textual_logo_background.bmp"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/Setup/Setup.vcxproj b/src/Setup/Setup.vcxproj
index c319dc1..843dc65 100644
--- a/src/Setup/Setup.vcxproj
+++ b/src/Setup/Setup.vcxproj
@@ -55,8 +55,8 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>SETUP;WIN32;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>SETUP;WIN32;HAVE_CONFIG_H;ZIP_STATIC;DEBUG;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -65,7 +65,7 @@
</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4505;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4505;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalOptions>/NODEFAULTLIB:LIBCMTD %(AdditionalOptions)</AdditionalOptions>
@@ -93,8 +93,8 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
<ClCompile>
<AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
<Optimization>MaxSpeed</Optimization>
- <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>SETUP;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>..\Common;..\Crypto;..\;..\PKCS11;..\Common\zlib;..\Common\libzip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>SETUP;WIN32;HAVE_CONFIG_H;ZIP_STATIC;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;_ATL_NO_DEFAULT_LIBS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<BufferSecurityCheck>true</BufferSecurityCheck>
<PrecompiledHeader>
@@ -104,7 +104,7 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>
</DebugInformationFormat>
- <DisableSpecificWarnings>4057;4100;4127;4201;4505;4701;4706;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DisableSpecificWarnings>4057;4100;4127;4201;4505;4701;4706;4131;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
<Link>
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
@@ -129,8 +129,138 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
- <ClCompile Include="..\Common\XUnzip.cpp" />
- <ClCompile Include="..\Common\XZip.cpp" />
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c" />
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c" />
+ <ClCompile Include="..\Common\libzip\zip_entry.c" />
+ <ClCompile Include="..\Common\libzip\zip_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_err_str.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c" />
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c" />
+ <ClCompile Include="..\Common\libzip\zip_fclose.c" />
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_add.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c" />
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c" />
+ <ClCompile Include="..\Common\libzip\zip_fread.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c" />
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c" />
+ <ClCompile Include="..\Common\libzip\zip_hash.c" />
+ <ClCompile Include="..\Common\libzip\zip_io_util.c" />
+ <ClCompile Include="..\Common\libzip\zip_memdup.c" />
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c" />
+ <ClCompile Include="..\Common\libzip\zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_rename.c" />
+ <ClCompile Include="..\Common\libzip\zip_replace.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c" />
+ <ClCompile Include="..\Common\libzip\zip_set_name.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_call.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_close.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_error.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_function.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_open.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_read.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_window.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_write.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c" />
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c" />
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c" />
+ <ClCompile Include="..\Common\libzip\zip_strerror.c" />
+ <ClCompile Include="..\Common\libzip\zip_string.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c" />
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c" />
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c" />
+ <ClCompile Include="..\Common\zlib\adler32.c" />
+ <ClCompile Include="..\Common\zlib\compress.c" />
+ <ClCompile Include="..\Common\zlib\crc32.c" />
+ <ClCompile Include="..\Common\zlib\deflate.c" />
+ <ClCompile Include="..\Common\zlib\inffast.c" />
+ <ClCompile Include="..\Common\zlib\inflate.c" />
+ <ClCompile Include="..\Common\zlib\inftrees.c" />
+ <ClCompile Include="..\Common\zlib\trees.c" />
+ <ClCompile Include="..\Common\zlib\uncompr.c" />
+ <ClCompile Include="..\Common\zlib\zutil.c" />
<ClCompile Include="ComSetup.cpp" />
<ClCompile Include="Dir.c" />
<ClCompile Include="SelfExtract.c" />
@@ -154,7 +284,6 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
<CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsCpp</CompileAs>
</ClCompile>
<ClCompile Include="..\Common\Endian.c" />
- <ClCompile Include="..\Common\Inflate.c" />
<ClCompile Include="..\Common\Language.c" />
<ClCompile Include="..\Common\Registry.c" />
</ItemGroup>
@@ -174,8 +303,24 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
<ItemGroup>
<ClInclude Include="..\Common\Apidrvr.h" />
<ClInclude Include="..\Common\Combo.h" />
+ <ClInclude Include="..\Common\libzip\compat.h" />
+ <ClInclude Include="..\Common\libzip\config.h" />
+ <ClInclude Include="..\Common\libzip\zconf.h" />
+ <ClInclude Include="..\Common\libzip\zip.h" />
+ <ClInclude Include="..\Common\libzip\zipint.h" />
+ <ClInclude Include="..\Common\libzip\zipwin32.h" />
<ClInclude Include="..\Common\XUnzip.h" />
<ClInclude Include="..\Common\XZip.h" />
+ <ClInclude Include="..\Common\zlib\crc32.h" />
+ <ClInclude Include="..\Common\zlib\deflate.h" />
+ <ClInclude Include="..\Common\zlib\inffast.h" />
+ <ClInclude Include="..\Common\zlib\inffixed.h" />
+ <ClInclude Include="..\Common\zlib\inflate.h" />
+ <ClInclude Include="..\Common\zlib\inftrees.h" />
+ <ClInclude Include="..\Common\zlib\trees.h" />
+ <ClInclude Include="..\Common\zlib\zconf.h" />
+ <ClInclude Include="..\Common\zlib\zlib.h" />
+ <ClInclude Include="..\Common\zlib\zutil.h" />
<ClInclude Include="ComSetup.h" />
<ClInclude Include="..\Common\Crc.h" />
<ClInclude Include="Dir.h" />
diff --git a/src/Setup/Setup.vcxproj.filters b/src/Setup/Setup.vcxproj.filters
index 6f28837..18728ab 100644
--- a/src/Setup/Setup.vcxproj.filters
+++ b/src/Setup/Setup.vcxproj.filters
@@ -19,6 +19,12 @@
<Filter Include="Resource Files\Common">
<UniqueIdentifier>{a540fb0a-850b-4cb9-85f9-ade0112ebb50}</UniqueIdentifier>
</Filter>
+ <Filter Include="Source Files\Common\libzip">
+ <UniqueIdentifier>{72792e98-38ea-4b68-a06e-140c3941d057}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Source Files\Common\zlib">
+ <UniqueIdentifier>{25bed244-7b06-46a3-8912-a3493143f281}</UniqueIdentifier>
+ </Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ComSetup.cpp">
@@ -54,20 +60,353 @@
<ClCompile Include="..\Common\Endian.c">
<Filter>Source Files\Common</Filter>
</ClCompile>
- <ClCompile Include="..\Common\Inflate.c">
- <Filter>Source Files\Common</Filter>
- </ClCompile>
<ClCompile Include="..\Common\Language.c">
<Filter>Source Files\Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\Registry.c">
<Filter>Source Files\Common</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XZip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\mkstemp.c">
+ <Filter>Source Files\Common\libzip</Filter>
</ClCompile>
- <ClCompile Include="..\Common\XUnzip.cpp">
- <Filter>Source Files\Common</Filter>
+ <ClCompile Include="..\Common\libzip\zip_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_dir.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_add_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_delete.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dir_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_dirent.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_discard.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_entry.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_err_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_get_sys_type.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_error_to_str.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_extra_field_api.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fclose.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fdopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_add.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_clear.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_error_get.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_get_offset.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_external_attributes.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_set_mtime.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_file_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_filerange_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fopen_index_encrypted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_fread.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_compression_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_encryption_implementation.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_entries.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_get_num_files.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_hash.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_io_util.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_memdup.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_name_locate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_rename.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_replace.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_archive_flag.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_default_password.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_comment.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_file_compression.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_set_name.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_begin_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_buffer.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_call.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_close.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_commit_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_crc.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_deflate.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_error.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_filep.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_free.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_function.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_is_deleted.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_layered.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_open.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_pkware.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_read.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_remove.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_rollback_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_seek_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_supports.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_tell_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32a.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32handle.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32utf8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_win32w.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_window.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_write.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_source_zip_new.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_index.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_stat_init.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_strerror.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_string.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_all.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_archive.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_unchange_data.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\libzip\zip_utf-8.c">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\adler32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\compress.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\crc32.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\deflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inffast.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inflate.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\inftrees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\trees.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\uncompr.c">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClCompile>
+ <ClCompile Include="..\Common\zlib\zutil.c">
+ <Filter>Source Files\Common\zlib</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
@@ -160,6 +499,54 @@
<ClInclude Include="..\Common\XUnzip.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Common\libzip\compat.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\config.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zconf.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zip.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipint.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\libzip\zipwin32.h">
+ <Filter>Source Files\Common\libzip</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\crc32.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\deflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffast.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inffixed.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inflate.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\inftrees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\trees.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zconf.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zlib.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
+ <ClInclude Include="..\Common\zlib\zutil.h">
+ <Filter>Source Files\Common\zlib</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Manifest Include="Setup.manifest">
diff --git a/src/Setup/Wizard.c b/src/Setup/Wizard.c
index 8c0f058..f6bb70a 100644
--- a/src/Setup/Wizard.c
+++ b/src/Setup/Wizard.c
@@ -180,15 +180,11 @@ static int GetDonVal (int minVal, int maxVal)
if (!prngInitialized)
{
- if (!CryptAcquireContext (&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0)
- && !CryptAcquireContext (&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
+ if (!CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
OsPrngAvailable = FALSE;
else
OsPrngAvailable = TRUE;
- srand ((unsigned int) time (NULL));
- rand(); // Generate and discard the inital value, as it always appears to be somewhat non-random.
-
prngInitialized = TRUE;
}
@@ -197,7 +193,7 @@ static int GetDonVal (int minVal, int maxVal)
return ((int) ((double) *((uint16 *) buffer) / (0xFFFF+1) * (maxVal + 1 - minVal)) + minVal);
}
else
- return ((int) ((double) rand() / (RAND_MAX+1) * (maxVal + 1 - minVal)) + minVal);
+ return maxVal;
}
@@ -1181,7 +1177,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
if (bRestartRequired
&& AskYesNo (bUpgrade ? "UPGRADE_OK_REBOOT_REQUIRED" : "CONFIRM_RESTART", hwndDlg) == IDYES)
{
- RestartComputer();
+ RestartComputer(FALSE);
}
}
diff --git a/src/Signing/sign.bat b/src/Signing/sign.bat
index 29d0455..a6e20cf 100644
--- a/src/Signing/sign.bat
+++ b/src/Signing/sign.bat
@@ -1,27 +1,27 @@
-PATH=%PATH%;%WSDK81%\bin\x86
-
-rem sign using SHA-1
-signtool sign /v /a /n IDRIX /i Thawte /ac thawte_Primary_MS_Cross_Cert.cer /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys"
-signtool sign /v /a /n IDRIX /i Thawte /ac Thawt_CodeSigning_CA.crt /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
-
-rem sign using SHA-256
-signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_Root_CA_MS_Cross_Cert.crt /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys"
-signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_SHA256_EV_CodeSigning_CA.cer /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
-
-
-cd "..\Release\Setup Files\"
-
-copy /V /Y ..\..\..\Translations\*.xml .
-
-"VeraCrypt Setup.exe" /p
-
-del *.xml
-
-cd "..\..\Signing"
-
-rem sign using SHA-1
-signtool sign /v /a /n IDRIX /i Thawte /ac Thawt_CodeSigning_CA.crt /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt Setup 1.18.exe"
-rem sign using SHA-256
-signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_SHA256_EV_CodeSigning_CA.cer /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt Setup 1.18.exe"
-
-pause
+PATH=%PATH%;%WSDK81%\bin\x86
+
+rem sign using SHA-1
+signtool sign /v /a /n IDRIX /i Thawte /ac thawte_Primary_MS_Cross_Cert.cer /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys"
+signtool sign /v /a /n IDRIX /i Thawte /ac Thawt_CodeSigning_CA.crt /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
+
+rem sign using SHA-256
+signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_Root_CA_MS_Cross_Cert.crt /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys"
+signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_SHA256_EV_CodeSigning_CA.cer /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
+
+
+cd "..\Release\Setup Files\"
+
+copy /V /Y ..\..\..\Translations\*.xml .
+
+"VeraCrypt Setup.exe" /p
+
+del *.xml
+
+cd "..\..\Signing"
+
+rem sign using SHA-1
+signtool sign /v /a /n IDRIX /i Thawte /ac Thawt_CodeSigning_CA.crt /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt Setup 1.19.exe"
+rem sign using SHA-256
+signtool sign /v /a /n "IDRIX SARL" /i GlobalSign /ac GlobalSign_SHA256_EV_CodeSigning_CA.cer /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt Setup 1.19.exe"
+
+pause
diff --git a/src/Signing/sign_test.bat b/src/Signing/sign_test.bat
index 02e6166..132c2fe 100644
--- a/src/Signing/sign_test.bat
+++ b/src/Signing/sign_test.bat
@@ -1,32 +1,32 @@
-PATH=%PATH%;%WSDK81%\bin\x86
-
-set PFXNAME=TestCertificate\idrix_codeSign.pfx
-set PFXPASSWORD=idrix
-set PFXCA=TestCertificate\idrix_TestRootCA.crt
-set SHA256PFXNAME=TestCertificate\idrix_Sha256CodeSign.pfx
-set SHA256PFXPASSWORD=idrix
-set SHA256PFXCA=TestCertificate\idrix_SHA256TestRootCA.crt
-
-rem sign using SHA-1
-signtool sign /v /a /f %PFXNAME% /p %PFXPASSWORD% /ac %PFXCA% /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys" "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
-
-rem sign using SHA-256
-signtool sign /v /a /f %SHA256PFXNAME% /p %SHA256PFXPASSWORD% /ac %SHA256PFXCA% /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys" "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
-
-cd "..\Release\Setup Files\"
-
-copy /V /Y ..\..\..\Translations\*.xml .
-
-"VeraCrypt Setup.exe" /p
-
-del *.xml
-
-cd "..\..\Signing"
-
-rem sign using SHA-1
-signtool sign /v /a /f %PFXNAME% /p %PFXPASSWORD% /ac %PFXCA% /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt Setup 1.18.exe"
-
-rem sign using SHA-256
-signtool sign /v /a /f %SHA256PFXNAME% /p %SHA256PFXPASSWORD% /ac %SHA256PFXCA% /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt Setup 1.18.exe"
-
+PATH=%PATH%;%WSDK81%\bin\x86
+
+set PFXNAME=TestCertificate\idrix_codeSign.pfx
+set PFXPASSWORD=idrix
+set PFXCA=TestCertificate\idrix_TestRootCA.crt
+set SHA256PFXNAME=TestCertificate\idrix_Sha256CodeSign.pfx
+set SHA256PFXPASSWORD=idrix
+set SHA256PFXCA=TestCertificate\idrix_SHA256TestRootCA.crt
+
+rem sign using SHA-1
+signtool sign /v /a /f %PFXNAME% /p %PFXPASSWORD% /ac %PFXCA% /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys" "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
+
+rem sign using SHA-256
+signtool sign /v /a /f %SHA256PFXNAME% /p %SHA256PFXPASSWORD% /ac %SHA256PFXCA% /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\veracrypt.sys" "..\Release\Setup Files\veracrypt-x64.sys" "..\Release\Setup Files\VeraCrypt.exe" "..\Release\Setup Files\VeraCrypt Format.exe" "..\Release\Setup Files\VeraCryptExpander.exe" "..\Release\Setup Files\VeraCrypt-x64.exe" "..\Release\Setup Files\VeraCrypt Format-x64.exe" "..\Release\Setup Files\VeraCryptExpander-x64.exe"
+
+cd "..\Release\Setup Files\"
+
+copy /V /Y ..\..\..\Translations\*.xml .
+
+"VeraCrypt Setup.exe" /p
+
+del *.xml
+
+cd "..\..\Signing"
+
+rem sign using SHA-1
+signtool sign /v /a /f %PFXNAME% /p %PFXPASSWORD% /ac %PFXCA% /fd sha1 /t http://timestamp.verisign.com/scripts/timestamp.dll "..\Release\Setup Files\VeraCrypt Setup 1.19.exe"
+
+rem sign using SHA-256
+signtool sign /v /a /f %SHA256PFXNAME% /p %SHA256PFXPASSWORD% /ac %SHA256PFXCA% /as /fd sha256 /tr http://timestamp.globalsign.com/?signature=sha2 /td SHA256 "..\Release\Setup Files\VeraCrypt Setup 1.19.exe"
+
pause \ No newline at end of file
diff --git a/src/VeraCrypt.sln b/src/VeraCrypt.sln
index 69731bd..343ccf1 100644
--- a/src/VeraCrypt.sln
+++ b/src/VeraCrypt.sln
@@ -1,445 +1,445 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Crypto", "Crypto\Crypto.vcxproj", "{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Driver", "Driver\Driver.vcxproj", "{EF5EF444-18D0-40D7-8DFA-775EC4448602}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Format", "Format\Format.vcxproj", "{9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mount", "Mount\Mount.vcxproj", "{E4C40F94-E7F9-4981-86E4-186B46F993F3}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Setup", "Setup\Setup.vcxproj", "{DF5F654D-BD44-4E31-B92E-B68074DC37A8}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Boot", "Boot\Windows\Boot.vcxproj", "{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ExpandVolume", "ExpandVolume\ExpandVolume.vcxproj", "{9715FF1D-599B-4BBC-AD96-BEF6E08FF827}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- All Debug|Win32 = All Debug|Win32
- All Debug|x64 = All Debug|x64
- All|Win32 = All|Win32
- All|x64 = All|x64
- Boot Loader|Win32 = Boot Loader|Win32
- Boot Loader|x64 = Boot Loader|x64
- Boot|Win32 = Boot|Win32
- Boot|x64 = Boot|x64
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Driver Debug|Win32 = Driver Debug|Win32
- Driver Debug|x64 = Driver Debug|x64
- Driver x64 Debug|Win32 = Driver x64 Debug|Win32
- Driver x64 Debug|x64 = Driver x64 Debug|x64
- Driver x64|Win32 = Driver x64|Win32
- Driver x64|x64 = Driver x64|x64
- Driver x86 Debug|Win32 = Driver x86 Debug|Win32
- Driver x86 Debug|x64 = Driver x86 Debug|x64
- Driver x86|Win32 = Driver x86|Win32
- Driver x86|x64 = Driver x86|x64
- Driver|Win32 = Driver|Win32
- Driver|x64 = Driver|x64
- Format Debug|Win32 = Format Debug|Win32
- Format Debug|x64 = Format Debug|x64
- Format|Win32 = Format|Win32
- Format|x64 = Format|x64
- Mount Debug|Win32 = Mount Debug|Win32
- Mount Debug|x64 = Mount Debug|x64
- Mount|Win32 = Mount|Win32
- Mount|x64 = Mount|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- Setup Debug|Win32 = Setup Debug|Win32
- Setup Debug|x64 = Setup Debug|x64
- Setup|Win32 = Setup|Win32
- Setup|x64 = Setup|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|Win32.Build.0 = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|Win32.Build.0 = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|Win32.Build.0 = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|Win32.Build.0 = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|Win32.Build.0 = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|Win32.Build.0 = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|Win32.Build.0 = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|Win32.Build.0 = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|x64.Build.0 = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|x64.ActiveCfg = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|x64.Build.0 = Debug|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|Win32.ActiveCfg = Release|Win32
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|x64.ActiveCfg = Release|x64
- {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|x64.Build.0 = Release|x64
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|Win32.Build.0 = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|Win32.Build.0 = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|x64.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot Loader|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|Win32.Build.0 = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|Win32.Build.0 = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|Win32.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|Win32.Build.0 = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|Win32.ActiveCfg = Release x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|Win32.Build.0 = Release x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|Win32.ActiveCfg = Debug x86|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|Win32.Build.0 = Debug x86|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|Win32.ActiveCfg = Release x86|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|Win32.Build.0 = Release x86|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|Win32.Build.0 = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount|x64.ActiveCfg = Debug x64|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|Win32.Build.0 = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|x64.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup Debug|x64.ActiveCfg = Debug|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup|Win32.ActiveCfg = Release|Win32
- {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup|x64.ActiveCfg = Debug x64|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|Win32.Build.0 = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|Win32.Build.0 = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|Win32.Build.0 = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|Win32.Build.0 = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|Win32.Build.0 = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|Win32.Build.0 = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|x64.Build.0 = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|x64.ActiveCfg = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|x64.Build.0 = Debug|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|Win32.ActiveCfg = Release|Win32
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|x64.ActiveCfg = Release|x64
- {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|Win32.Build.0 = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|Win32.Build.0 = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|Win32.Build.0 = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|Win32.Build.0 = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|Win32.Build.0 = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|Win32.Build.0 = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|x64.Build.0 = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|x64.ActiveCfg = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|x64.Build.0 = Debug|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|Win32.ActiveCfg = Release|Win32
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|x64.ActiveCfg = Release|x64
- {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|x64.Build.0 = Release|x64
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|Win32.Build.0 = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|Win32.Build.0 = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot Loader|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|Win32.Build.0 = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64 Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86 Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|Win32.Build.0 = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|x64.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|Win32.Build.0 = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|x64.ActiveCfg = Debug|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|Win32.ActiveCfg = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|Win32.Build.0 = Release|Win32
- {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|x64.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|Win32.Build.0 = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|Win32.Build.0 = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|x64.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|Win32.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|Win32.Build.0 = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|Win32.Build.0 = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|Win32.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|Win32.Build.0 = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64 Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64 Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86 Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86 Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|Win32.Build.0 = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|x64.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup Debug|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup Debug|x64.ActiveCfg = Release Loader|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup|Win32.ActiveCfg = Release|Win32
- {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup|x64.ActiveCfg = Release Loader|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|x64.Build.0 = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|Win32.ActiveCfg = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|Win32.Build.0 = Debug|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|x64.ActiveCfg = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|x64.Build.0 = Debug|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|Win32.ActiveCfg = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|Win32.Build.0 = Release|Win32
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|x64.ActiveCfg = Release|x64
- {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Crypto", "Crypto\Crypto.vcxproj", "{993245CF-6B70-47EE-91BB-39F8FC6DC0E7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Driver", "Driver\Driver.vcxproj", "{EF5EF444-18D0-40D7-8DFA-775EC4448602}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Format", "Format\Format.vcxproj", "{9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mount", "Mount\Mount.vcxproj", "{E4C40F94-E7F9-4981-86E4-186B46F993F3}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Setup", "Setup\Setup.vcxproj", "{DF5F654D-BD44-4E31-B92E-B68074DC37A8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Boot", "Boot\Windows\Boot.vcxproj", "{8B7F059F-E4C7-4E11-88F5-EE8B8433072E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ExpandVolume", "ExpandVolume\ExpandVolume.vcxproj", "{9715FF1D-599B-4BBC-AD96-BEF6E08FF827}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ All Debug|Win32 = All Debug|Win32
+ All Debug|x64 = All Debug|x64
+ All|Win32 = All|Win32
+ All|x64 = All|x64
+ Boot Loader|Win32 = Boot Loader|Win32
+ Boot Loader|x64 = Boot Loader|x64
+ Boot|Win32 = Boot|Win32
+ Boot|x64 = Boot|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Driver Debug|Win32 = Driver Debug|Win32
+ Driver Debug|x64 = Driver Debug|x64
+ Driver x64 Debug|Win32 = Driver x64 Debug|Win32
+ Driver x64 Debug|x64 = Driver x64 Debug|x64
+ Driver x64|Win32 = Driver x64|Win32
+ Driver x64|x64 = Driver x64|x64
+ Driver x86 Debug|Win32 = Driver x86 Debug|Win32
+ Driver x86 Debug|x64 = Driver x86 Debug|x64
+ Driver x86|Win32 = Driver x86|Win32
+ Driver x86|x64 = Driver x86|x64
+ Driver|Win32 = Driver|Win32
+ Driver|x64 = Driver|x64
+ Format Debug|Win32 = Format Debug|Win32
+ Format Debug|x64 = Format Debug|x64
+ Format|Win32 = Format|Win32
+ Format|x64 = Format|x64
+ Mount Debug|Win32 = Mount Debug|Win32
+ Mount Debug|x64 = Mount Debug|x64
+ Mount|Win32 = Mount|Win32
+ Mount|x64 = Mount|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ Setup Debug|Win32 = Setup Debug|Win32
+ Setup Debug|x64 = Setup Debug|x64
+ Setup|Win32 = Setup|Win32
+ Setup|x64 = Setup|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|Win32.Build.0 = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|Win32.Build.0 = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.All|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot Loader|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Boot|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|Win32.Build.0 = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64 Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x64|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86 Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver x86|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Driver|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|Win32.Build.0 = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|Win32.Build.0 = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Format|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|Win32.Build.0 = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|Win32.Build.0 = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Mount|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|Win32.Build.0 = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Release|x64.Build.0 = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|x64.ActiveCfg = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup Debug|x64.Build.0 = Debug|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|Win32.ActiveCfg = Release|Win32
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|x64.ActiveCfg = Release|x64
+ {993245CF-6B70-47EE-91BB-39F8FC6DC0E7}.Setup|x64.Build.0 = Release|x64
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|Win32.Build.0 = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|Win32.Build.0 = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.All|x64.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot Loader|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Boot|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|Win32.Build.0 = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|Win32.Build.0 = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|Win32.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|Win32.Build.0 = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64 Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|Win32.ActiveCfg = Release x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|Win32.Build.0 = Release x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x64|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|Win32.ActiveCfg = Debug x86|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|Win32.Build.0 = Debug x86|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86 Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|Win32.ActiveCfg = Release x86|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|Win32.Build.0 = Release x86|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver x86|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|Win32.Build.0 = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Driver|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Format|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Mount|x64.ActiveCfg = Debug x64|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|Win32.Build.0 = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Release|x64.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup Debug|x64.ActiveCfg = Debug|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup|Win32.ActiveCfg = Release|Win32
+ {EF5EF444-18D0-40D7-8DFA-775EC4448602}.Setup|x64.ActiveCfg = Debug x64|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|Win32.Build.0 = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|Win32.Build.0 = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.All|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot Loader|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Boot|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|Win32.Build.0 = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64 Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x64|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86 Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver x86|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Driver|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|Win32.Build.0 = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|Win32.Build.0 = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Format|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Mount|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|Win32.Build.0 = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Release|x64.Build.0 = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|x64.ActiveCfg = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup Debug|x64.Build.0 = Debug|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|Win32.ActiveCfg = Release|Win32
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|x64.ActiveCfg = Release|x64
+ {9DC1ABE2-D18B-48FB-81D2-8C50ADC57BCF}.Setup|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|Win32.Build.0 = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|Win32.Build.0 = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.All|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot Loader|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Boot|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|Win32.Build.0 = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64 Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x64|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86 Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver x86|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Driver|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Format|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|Win32.Build.0 = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|Win32.Build.0 = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Mount|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|Win32.Build.0 = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Release|x64.Build.0 = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|x64.ActiveCfg = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup Debug|x64.Build.0 = Debug|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|Win32.ActiveCfg = Release|Win32
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|x64.ActiveCfg = Release|x64
+ {E4C40F94-E7F9-4981-86E4-186B46F993F3}.Setup|x64.Build.0 = Release|x64
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|Win32.Build.0 = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|Win32.Build.0 = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.All|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot Loader|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Boot|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|Win32.Build.0 = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64 Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x64|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86 Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver x86|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Driver|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Format|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Mount|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|Win32.Build.0 = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Release|x64.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|Win32.Build.0 = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup Debug|x64.ActiveCfg = Debug|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|Win32.ActiveCfg = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|Win32.Build.0 = Release|Win32
+ {DF5F654D-BD44-4E31-B92E-B68074DC37A8}.Setup|x64.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|Win32.Build.0 = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|Win32.Build.0 = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.All|x64.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|Win32.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|Win32.Build.0 = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot Loader|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|Win32.Build.0 = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Boot|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|Win32.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|Win32.Build.0 = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64 Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64 Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x64|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86 Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86 Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver x86|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Driver|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Format|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Mount|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|Win32.Build.0 = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Release|x64.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup Debug|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup Debug|x64.ActiveCfg = Release Loader|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup|Win32.ActiveCfg = Release|Win32
+ {8B7F059F-E4C7-4E11-88F5-EE8B8433072E}.Setup|x64.ActiveCfg = Release Loader|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.All|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot Loader|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Boot|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64 Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x64|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86 Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver x86|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Driver|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Format|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Mount|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Release|x64.Build.0 = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|Win32.ActiveCfg = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|Win32.Build.0 = Debug|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|x64.ActiveCfg = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup Debug|x64.Build.0 = Debug|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|Win32.ActiveCfg = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|Win32.Build.0 = Release|Win32
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|x64.ActiveCfg = Release|x64
+ {9715FF1D-599B-4BBC-AD96-BEF6E08FF827}.Setup|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/Volume/Cipher.cpp b/src/Volume/Cipher.cpp
index 6944908..09c821b 100644
--- a/src/Volume/Cipher.cpp
+++ b/src/Volume/Cipher.cpp
@@ -13,7 +13,7 @@
#include "Platform/Platform.h"
#include "Cipher.h"
#include "Crypto/Aes.h"
-#include "Crypto/Serpent.h"
+#include "Crypto/SerpentFast.h"
#include "Crypto/Twofish.h"
#include "Crypto/Camellia.h"
#include "Crypto/GostCipher.h"
@@ -21,8 +21,8 @@
#ifdef TC_AES_HW_CPU
# include "Crypto/Aes_hw_cpu.h"
-# include "Crypto/cpu.h"
#endif
+#include "Crypto/cpu.h"
namespace VeraCrypt
{
@@ -224,6 +224,55 @@ namespace VeraCrypt
{
serpent_set_key (key, ScheduledKey);
}
+
+ void CipherSerpent::EncryptBlocks (byte *data, size_t blockCount) const
+ {
+ if (!Initialized)
+ throw NotInitialized (SRC_POS);
+
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+ if ((blockCount >= 4)
+ && IsHwSupportAvailable())
+ {
+ serpent_encrypt_blocks (data, data, blockCount, ScheduledKey.Ptr());
+ }
+ else
+#endif
+ Cipher::EncryptBlocks (data, blockCount);
+ }
+
+ void CipherSerpent::DecryptBlocks (byte *data, size_t blockCount) const
+ {
+ if (!Initialized)
+ throw NotInitialized (SRC_POS);
+
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+ if ((blockCount >= 4)
+ && IsHwSupportAvailable())
+ {
+ serpent_decrypt_blocks (data, data, blockCount, ScheduledKey.Ptr());
+ }
+ else
+#endif
+ Cipher::DecryptBlocks (data, blockCount);
+ }
+
+ bool CipherSerpent::IsHwSupportAvailable () const
+ {
+#if CRYPTOPP_BOOL_SSE2_INTRINSICS_AVAILABLE
+ static bool state = false;
+ static bool stateValid = false;
+
+ if (!stateValid)
+ {
+ state = HasSSE2() ? true : false;
+ stateValid = true;
+ }
+ return state;
+#else
+ return false;
+#endif
+ }
// Twofish
@@ -286,7 +335,28 @@ namespace VeraCrypt
void CipherGost89::SetCipherKey (const byte *key)
{
- gost_set_key (key, (gost_kds *) ScheduledKey.Ptr());
+ gost_set_key (key, (gost_kds *) ScheduledKey.Ptr(), 1);
+ }
+
+ // GOST89 with static SBOX
+ void CipherGost89StaticSBOX::Decrypt (byte *data) const
+ {
+ gost_decrypt (data, data, (gost_kds *) ScheduledKey.Ptr(), 1);
+ }
+
+ void CipherGost89StaticSBOX::Encrypt (byte *data) const
+ {
+ gost_encrypt (data, data, (gost_kds *) ScheduledKey.Ptr(), 1);
+ }
+
+ size_t CipherGost89StaticSBOX::GetScheduledKeySize () const
+ {
+ return GOST_KS;
+ }
+
+ void CipherGost89StaticSBOX::SetCipherKey (const byte *key)
+ {
+ gost_set_key (key, (gost_kds *) ScheduledKey.Ptr(), 0);
}
// Kuznyechik
diff --git a/src/Volume/Cipher.h b/src/Volume/Cipher.h
index 28e0bd7..7aefbfc 100644
--- a/src/Volume/Cipher.h
+++ b/src/Volume/Cipher.h
@@ -100,14 +100,15 @@ namespace VeraCrypt
virtual bool IsHwSupportAvailable () const;
TC_CIPHER (AES, 16, 32);
+ TC_CIPHER (Serpent, 16, 32);
#undef TC_CIPHER_ADD_METHODS
#define TC_CIPHER_ADD_METHODS
- TC_CIPHER (Serpent, 16, 32);
TC_CIPHER (Twofish, 16, 32);
TC_CIPHER (Camellia, 16, 32);
TC_CIPHER (Gost89, 16, 32);
+ TC_CIPHER (Gost89StaticSBOX, 16, 32);
TC_CIPHER (Kuznyechik, 16, 32);
#undef TC_CIPHER
diff --git a/src/Volume/EncryptionAlgorithm.cpp b/src/Volume/EncryptionAlgorithm.cpp
index 119b553..79e27fe 100644
--- a/src/Volume/EncryptionAlgorithm.cpp
+++ b/src/Volume/EncryptionAlgorithm.cpp
@@ -300,6 +300,8 @@ namespace VeraCrypt
// GOST89
GOST89::GOST89 ()
{
+ Deprecated = true;
+
Ciphers.push_back (shared_ptr <Cipher> (new CipherGost89()));
SupportedModes.push_back (shared_ptr <EncryptionMode> (new EncryptionModeXTS ()));
diff --git a/src/Volume/EncryptionTest.cpp b/src/Volume/EncryptionTest.cpp
index eed8bd1..9b68bb3 100644
--- a/src/Volume/EncryptionTest.cpp
+++ b/src/Volume/EncryptionTest.cpp
@@ -123,6 +123,50 @@ namespace VeraCrypt
}
}
};
+
+ static const CipherTestVector GOST89TestVectors[] =
+ {
+ {
+ {
+ 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
+ },
+ {
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88
+ },
+ {
+ 0x8F, 0xC6, 0xFE, 0xB8, 0x91, 0x51, 0x4C, 0x37, 0x4D, 0x51, 0x46, 0xEF, 0x02, 0x9D, 0xBD, 0x9F
+ }
+ }
+ };
+
+ static const CipherTestVector KuznyechikTestVectors[] =
+ {
+ {
+ {
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
+ },
+ {
+ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88
+ },
+ {
+ 0x7F, 0x67, 0x9D, 0x90, 0xBE, 0xBC, 0x24, 0x30, 0x5A, 0x46, 0x8D, 0x42, 0xB9, 0xD4, 0xED, 0xCD
+ }
+ },
+ {
+ {
+ 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
+ },
+ {
+ 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A
+ },
+ {
+ 0xB4, 0x29, 0x91, 0x2C, 0x6E, 0x00, 0x32, 0xF9, 0x28, 0x54, 0x52, 0xD7, 0x67, 0x18, 0xD0, 0x8B
+ }
+ }
+ };
static void TestCipher (Cipher &cipher, const CipherTestVector *testVector, size_t testVectorCount)
{
@@ -170,6 +214,12 @@ namespace VeraCrypt
CipherCamellia camellia;
TestCipher (camellia, CamelliaTestVectors, array_capacity (CamelliaTestVectors));
+
+ CipherGost89StaticSBOX gost89;
+ TestCipher (gost89, GOST89TestVectors, array_capacity (GOST89TestVectors));
+
+ CipherKuznyechik kuznyechik;
+ TestCipher (kuznyechik, KuznyechikTestVectors, array_capacity (KuznyechikTestVectors));
}
const EncryptionTest::XtsTestVector EncryptionTest::XtsTestVectors[] =
@@ -603,6 +653,58 @@ namespace VeraCrypt
break;
}
}
+ else if (typeid (ea) == typeid (GOST89))
+ {
+ switch (testCase)
+ {
+ case 0:
+ if (crc != 0x12194ef5)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 1:
+ if (crc != 0xda8d429b)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 2:
+ if (crc != 0xdbf0b12e)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 3:
+ if (crc != 0xb986eb4a)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ }
+ }
+ else if (typeid (ea) == typeid (Kuznyechik))
+ {
+ switch (testCase)
+ {
+ case 0:
+ if (crc != 0x6b86e72e)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 1:
+ if (crc != 0xa4f8637d)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 2:
+ if (crc != 0xfd83e76d)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ case 3:
+ if (crc != 0xb24fc47b)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ break;
+ }
+ }
else if (typeid (ea) == typeid (AESTwofish))
{
switch (testCase)
@@ -805,6 +907,18 @@ namespace VeraCrypt
throw TestFailed (SRC_POS);
nTestsPerformed++;
}
+ else if (typeid (ea) == typeid (GOST89))
+ {
+ if (crc != 0x9e8653cb)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ }
+ else if (typeid (ea) == typeid (Kuznyechik))
+ {
+ if (crc != 0xd6d39cdb)
+ throw TestFailed (SRC_POS);
+ nTestsPerformed++;
+ }
else if (typeid (ea) == typeid (AESTwofish))
{
if (crc != 0x14ce7385)
@@ -847,7 +961,7 @@ namespace VeraCrypt
nTestsPerformed++;
}
- if (nTestsPerformed != 100)
+ if (nTestsPerformed != 110)
throw TestFailed (SRC_POS);
}
diff --git a/src/Volume/Volume.make b/src/Volume/Volume.make
index 855e5f6..fa3a420 100644
--- a/src/Volume/Volume.make
+++ b/src/Volume/Volume.make
@@ -47,7 +47,8 @@ OBJS += ../Crypto/Aeskey.o
OBJS += ../Crypto/Aestab.o
OBJS += ../Crypto/cpu.o
OBJS += ../Crypto/Rmd160.o
-OBJS += ../Crypto/Serpent.o
+OBJS += ../Crypto/SerpentFast.o
+OBJS += ../Crypto/SerpentFast_simd.o
OBJS += ../Crypto/Sha2.o
OBJS += ../Crypto/Twofish.o
OBJS += ../Crypto/Whirlpool.o