compiling the zip2 crate to wasm with the goal of compiling to luau through wasynth
Find a file
Johannes Löthberg 97ddf84546
Don't try to encrypt directories
Not overriding this works fine for ZipCrypto since it doesn't need to
write any extra data, but AES encrypted files need to store more
metadata even for zero-byte files.

Signed-off-by: Johannes Löthberg <johannes.loethberg@elokon.com>
2024-05-06 16:37:05 +02:00
.github chore: Fix: cargo doc doesn't have a -D warnings option 2024-05-03 11:55:02 -07:00
benches style: Remove unnecessary "mut"s in merge_archive benchmarks 2024-05-05 19:39:13 -07:00
examples Add support for writing AES-encrypted files 2024-05-06 16:37:05 +02:00
fuzz Don't try to encrypt directories 2024-05-06 16:37:05 +02:00
security-advisories in-source vulnerability tracking 2023-09-19 18:55:01 +01:00
src Don't try to encrypt directories 2024-05-06 16:37:05 +02:00
tests Add support for writing AES-encrypted files 2024-05-06 16:37:05 +02:00
.gitignore Ignore .DS_Store files 2024-04-17 19:19:54 -07:00
.whitesource Add .whitesource configuration file 2023-04-23 21:33:22 +00:00
Cargo.toml Add AesWriter 2024-05-06 16:37:05 +02:00
CHANGELOG.md chore: release 2024-05-06 08:20:05 +00:00
cliff.toml doc: exclude doc updates from CHANGELOG 2024-04-22 19:18:15 -07:00
CODE_OF_CONDUCT.md doc: veeeery small fix to CoC 2022-01-23 17:35:39 +03:00
CONTRIBUTING.md doc: Add requirement for Conventional Commits 2024-04-22 18:19:24 -07:00
LICENSE Added Travis support, README and LICENSE 2014-09-11 10:50:41 +02:00
README.md Merge remote-tracking branch 'zenomat/master' into oldpr443 2024-05-01 09:52:14 -07:00
release-plz.toml doc: exclude doc updates from CHANGELOG 2024-04-22 19:18:15 -07:00

zip

Build Status Crates.io version

Documentation

Info

A zip library for rust which supports reading and writing of simple ZIP files. Formerly hosted at https://github.com/zip-rs/zip2.

Supported compression formats:

  • stored (i.e. none)
  • deflate
  • deflate64 (decompression only)
  • bzip2
  • zstd
  • lzma (decompression only)

Currently unsupported zip extensions:

  • Multi-disk

Features

The features available are:

  • aes-crypto: Enables decryption of files which were encrypted with AES. Supports AE-1 and AE-2 methods.
  • deflate: Enables decompressing the deflate compression algorithm, which is the default for zip files.
  • deflate-zlib: Enables deflating files with the zlib library (used when compression quality is 0..=9).
  • deflate-zlib-ng: Enables deflating files with the zlib-ng library (used when compression quality is 0..=9). This is the fastest deflate implementation available.
  • deflate-zopfli: Enables deflating files with the zopfli library (used when compression quality is 10..=264). This is the most effective deflate implementation available.
  • deflate64: Enables the deflate64 compression algorithm. Only decompression is supported.
  • lzma: Enables the LZMA compression algorithm. Only decompression is supported.
  • bzip2: Enables the BZip2 compression algorithm.
  • time: Enables features using the time crate.
  • chrono: Enables converting last-modified zip::DateTime to and from chrono::NaiveDateTime.
  • zstd: Enables the Zstandard compression algorithm.

By default aes-crypto, deflate, deflate-zlib-ng, deflate-zopfli, bzip2, time and zstd are enabled.

The following feature flags are deprecated:

  • deflate-miniz: Use flate2's default backend for compression. Currently the same as deflate.

MSRV

Our current Minimum Supported Rust Version is 1.70. When adding features, we will follow these guidelines:

  • We will always support the latest four minor Rust versions. This gives you a 6 month window to upgrade your compiler.
  • Any change to the MSRV will be accompanied with a minor version bump.

Examples

See the examples directory for:

  • How to write a file to a zip.
  • How to write a directory of files to a zip (using walkdir).
  • How to extract a zip file.
  • How to extract a single file from a zip.
  • How to read a zip from the standard input.
  • How to append a directory to an existing archive

Fuzzing

Fuzzing support is through cargo fuzz. To install cargo fuzz:

cargo install cargo-fuzz

To list fuzz targets:

cargo +nightly fuzz list

To start fuzzing zip extraction:

cargo +nightly fuzz run fuzz_read

To start fuzzing zip creation:

cargo +nightly fuzz run fuzz_write