VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform
AgeCommit message (Expand)AuthorFilesLines
2023-10-01Linux: use "-std=c++11" for gcc 4.8 and adapt code to old compilersMounir IDRASSI1-1/+1
2023-08-19Linux: try use IOCTL BLKGETSIZE64 to get size of device instead of lseekMounir IDRASSI1-0/+11
2023-07-24Linux/macOS: Remove TrueCrypt supportMounir IDRASSI1-2/+0
2023-06-01Fix issues launching fsck via terminal on Linux (#1086)Jertzukka1-0/+1
2022-02-18Linux: Fix code dump when built with -D_GLIBCXX_ASSERTIONS caused by an asser...Mounir IDRASSI1-1/+0
2021-07-14Make system devices work under FreeBSD (#777)MrLightningBolt2-2/+34
2021-07-14Add support for OpenBSD (#779)kokokodak3-1/+18
2020-06-28Linux/MacOSX: Erase sensitive memory explicitly instead of relying on the com...Mounir IDRASSI4-9/+3
2020-06-26Linux/MacOSX: use standard std::shared_ptr instead of our custom implementati...Mounir IDRASSI1-0/+17
2020-06-26Linux/MacOSX: fix warning reported by static code analysis tool about possibl...Mounir IDRASSI1-1/+5
2020-06-11Switch from auto_ptr to unique_ptr (#638)Christopher Bergqvist1-1/+1
2019-12-01UNIX: make sector size mismatch error more verbose (#552) (#561)alt3r 3go1-0/+1
2019-11-12Fix off by one overflow with 31 args (#541)Hanno Böck1-1/+1
2019-06-06Some cleanup related to "Invalid characters..." on mount issue. (#453)Alexander Karzhenkov1-23/+3
2018-04-04FreeBSD/MacOSX: fix for missing <sys/sysmacros.h> headerMounir IDRASSI1-0/+2
2018-04-04Platform/Unix: include <sys/sysmacros.h> for major/minor macros (#303)Gokturk Yuksek1-0/+1
2017-12-09Linux: fix compilation error with older versions of gcc (e.g. 4.x)Mounir IDRASSI1-3/+3
2017-11-28Linux: autodetect host drive name using sysfs (closes #233)gv54701-0/+23
2017-06-23Update IDRIX copyright yearMounir IDRASSI62-62/+62
2016-10-17Use properly aligned memory in code using Streebog hash implementation that u...Mounir IDRASSI4-20/+61
2016-05-10Remove trailing whitespaceDavid Foerster62-114/+114
2016-05-10Normalize all line terminatorsDavid Foerster45-3580/+3580
2016-03-18Linux: Completely fix gcc-5 "Invalid characters encountered" issue on mount. ...Mounir IDRASSI1-2/+22
2016-01-20Copyright: update dates to include 2016.Mounir IDRASSI62-62/+62
2015-11-30Linux/MacOSX: Implement Unicode passwords suppport. Make validation of parame...Mounir IDRASSI1-2/+6
2015-08-06Update license information to reflect the use of a dual license Apache 2.0 an...Mounir IDRASSI62-344/+592
2015-06-24Linux/MacOSX: first dynamic mode implementationMounir IDRASSI2-2/+54
2014-12-30Linux/MacOSX: Implement TrueCrypt conversion and loading support. Correct man...Mounir IDRASSI1-1/+3
2014-11-08Change namespace from TrueCrypt to VeraCrypt. Rename method from Resources Re...Mounir IDRASSI57-59/+59
2014-11-08Replace TrueCrypt from Linux/MacOSX mount point namesMounir IDRASSI1-1/+1
2014-11-08Replace TrueCrypt references in added sources and resources by VeraCrypt ones.Mounir IDRASSI2-3/+3
2014-11-08Add TrueCrypt 7.1a MacOSX/Linux specific source files.Mounir IDRASSI17-0/+1322
2014-11-08Add original TrueCrypt 7.1a sourcesMounir IDRASSI45-0/+3790
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" static void _zip_file_attributes_from_dirent(zip_file_attributes_t *attributes, zip_dirent_t *de); zip_source_t *_zip_source_zip_new(zip_t *srcza, zip_uint64_t srcidx, zip_flags_t flags, zip_uint64_t start, zip_uint64_t len, const char *password, zip_error_t *error) { zip_source_t *src, *s2; zip_stat_t st; zip_file_attributes_t attributes; zip_dirent_t *de; bool partial_data, needs_crc, needs_decrypt, needs_decompress; if (srcza == NULL || srcidx >= srcza->nentry || len > ZIP_INT64_MAX) { zip_error_set(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(error, ZIP_ER_CHANGED, 0); return NULL; } if (zip_stat_index(srcza, srcidx, flags | ZIP_FL_UNCHANGED, &st) < 0) { zip_error_set(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(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(error, ZIP_ER_INVAL, 0); return NULL; } if (len == 0) { len = st.size - start; } partial_data = len < st.size; needs_decrypt = ((flags & ZIP_FL_ENCRYPTED) == 0) && (st.encryption_method != ZIP_EM_NONE); needs_decompress = ((flags & ZIP_FL_COMPRESSED) == 0) && (st.comp_method != ZIP_CM_STORE); /* when reading the whole file, check for CRC errors */ needs_crc = ((flags & ZIP_FL_COMPRESSED) == 0 || st.comp_method == ZIP_CM_STORE) && !partial_data; if (needs_decrypt) { if (password == NULL) { password = srcza->default_password; } if (password == NULL) { zip_error_set(error, ZIP_ER_NOPASSWD, 0); return NULL; } } if ((de = _zip_get_dirent(srcza, srcidx, flags, error)) == NULL) { return NULL; } _zip_file_attributes_from_dirent(&attributes, de); if (st.comp_size == 0) { return zip_source_buffer_with_attributes_create(NULL, 0, 0, &attributes, error); } if (partial_data && !needs_decrypt && !needs_decompress) { struct zip_stat st2; st2.size = len; st2.comp_size = len; 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, start, (zip_int64_t)len, &st2, &attributes, srcza, srcidx, error)) == NULL) { return NULL; } } else { if (st.comp_size > ZIP_INT64_MAX) { zip_error_set(error, ZIP_ER_INVAL, 0); return NULL; } if ((src = _zip_source_window_new(srcza->src, 0, (zip_int64_t)st.comp_size, &st, &attributes, srcza, srcidx, 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 (needs_decrypt) { zip_encryption_implementation enc_impl; if ((enc_impl = _zip_get_encryption_implementation(st.encryption_method, ZIP_CODEC_DECODE)) == NULL) { zip_error_set(error, ZIP_ER_ENCRNOTSUPP, 0); return NULL; } s2 = enc_impl(srcza, src, st.encryption_method, 0, password); zip_source_free(src); if (s2 == NULL) { return NULL; } src = s2; } if (needs_decompress) { s2 = zip_source_decompress(srcza, src, st.comp_method); zip_source_free(src); if (s2 == NULL) { return NULL; } src = s2; } if (needs_crc) { s2 = zip_source_crc_create(src, 1, error); zip_source_free(src); if (s2 == NULL) { return NULL; } src = s2; } if (partial_data && (needs_decrypt || needs_decompress)) { s2 = zip_source_window_create(src, start, (zip_int64_t)len, error); zip_source_free(src); if (s2 == NULL) { return NULL; } src = s2; } return src; } static void _zip_file_attributes_from_dirent(zip_file_attributes_t *attributes, zip_dirent_t *de) { zip_file_attributes_init(attributes); attributes->valid = ZIP_FILE_ATTRIBUTES_ASCII | ZIP_FILE_ATTRIBUTES_HOST_SYSTEM | ZIP_FILE_ATTRIBUTES_EXTERNAL_FILE_ATTRIBUTES | ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS; attributes->ascii = de->int_attrib & 1; attributes->host_system = de->version_madeby >> 8; attributes->external_file_attributes = de->ext_attrib; attributes->general_purpose_bit_flags = de->bitflags; attributes->general_purpose_bit_mask = ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS_ALLOWED_MASK; }