/sevenz-rust

A 7z decompressor/compressor lib written in pure rust

Primary LanguageRustApache License 2.0Apache-2.0

Crate Documentation

This project is a 7z compressor/decompressor written in pure rust.
And it's very much inspired by the apache commons-compress project.

The LZMA/LZMA2 decoder and all filters code was ported from tukaani xz for java

Decompression

Supported codecs:

  • BZIP2 (require feature 'bzip2')
  • COPY
  • LZMA
  • LZMA2
  • ZSTD (require feature 'zstd')

Supported filters:

  • BCJ X86
  • BCJ PPC
  • BCJ IA64
  • BCJ ARM
  • BCJ ARM_THUMB
  • BCJ SPARC
  • DELTA

Usage

[dependencies]
sevenz-rust={version="0.2"}

Decompress source file "data/sample.7z" to dest path "data/sample"

sevenz_rust::decompress_file("data/sample.7z", "data/sample").expect("complete");

Decompress a encrypted 7z file

Add 'aes256' feature

[dependencies]
sevenz-rust={version="0.2", features=["aes256"]}
sevenz_rust::decompress_file_with_password("path/to/encrypted.7z", "path/to/output", "password".into()).expect("complete");

Compression

Currently only support LZMA2 method.

[dependencies]
sevenz-rust={version="0.2", features=["compress"]}

Use the helper function to create a 7z file with source path.

sevenz_rust::compress_to_path("examples/data/sample", "examples/data/sample.7z").expect("compress ok");

With AES encryption

require version>=0.3.0

[dependencies]
sevenz-rust={version="0.3", features=["compress","aes256"]}

Use the helper function to create a 7z file with source path and password.

sevenz_rust::compress_to_path_encrypted("examples/data/sample", "examples/data/sample.7z", "password".into()).expect("compress ok");

Advance

[dependencies]
sevenz-rust={version="0.3", features=["compress","aes256"]}

Solid compression

use sevenz_rust::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");

sz.push_source_path("path/to/compress", |_| true).expect("pack ok");

sz.finish().expect("compress ok");

Compression methods

with encryption and lzma2 options

use sevenz_rust::*;

let mut sz = SevenZWriter::create("dest.7z").expect("create writer ok");
sz.set_content_methods(vec![
    sevenz_rust::AesEncoderOptions::new("sevenz-rust".into()).into(),
    lzma::LZMA2Options::with_preset(9).into(),
]);
sz.push_source_path("path/to/compress", |_| true).expect("pack ok");

sz.finish().expect("compress ok");

Changelog

0.4.2 - 2023-06-10

  • Removed unsafe code
  • Changed SevenZWriter.finish method return inner writer
  • Added wasm compress function
  • Updates bzip dependency to the patch version of 0.4.4(#23)

0.4.1 - 2023-06-07

  • Fixed unable to build without default features

0.4.0 - 2023-06-03 - Solid compression

0.3.0 - 2023-06-02 - Encrypted compression

  • Added Encrypted compression

0.2.11 - 2023-05-24

  • Fixed numerical overflow

0.2.10 - 2023-04-18

  • Change to use nt-time crate(#20)
  • Fix typo(#18)
  • make function generics less restrictive (#17)
  • Solve warnings (#16)
  • run rustfmt on code (#15)

0.2.9 - 2023-03-16

  • Added bzip2 support(#14)

0.2.8 - 2023-03-06

  • Fixed write bitset bugs

0.2.7 - 2023-03-05

  • Fixed bug while read files info

0.2.6 - 2023-02-23

  • Added zstd support and use enhanced filetime lib(#11)
  • Fixed lzma encoder bugs

0.2.4 - 2023-02-16

  • Changed return entry ref when pushing to writer(#10)

0.2.3 - 2023-02-07

  • Fixed incorrect handling of 7z time

0.2.2 - 2023-01-31 - Create sub crate lzma-rust

  • Move mod lzma to sub crate lzma-rust
  • Modify Github Actions to run tests with --all-features

0.2.0 - 2023-01-08 - Added compression supporting

  • Added compression supporting

0.1.5 - 2022-11-01 - Encrypted 7z files decompression supported

  • Added aes256sha256 decode method
  • Added wasm support
  • Added new tests (for Delta and Copy) and Github Actions CI(#5) by bfrazho

0.1.4 - 2022-09-20 - Replace lzma/lzma2 decoder

  • Chnaged new lzma/lzma2 decoder

0.1.3 - 2022-09-18 - add more bcj filters

  • Added bcj arm/ppc/sparc and delta filters
  • Added test for bcj x86 (#3) by bfrazho

0.1.2 - 2022-09-14 - bcj x86 filter supported

  • Added bcj x86 filter
  • Added LZMA tests (#2) by bfrazho
  • Fixed extract empty file

0.1.1 - 2022-08-10 - Modify decompression function

0.1.0 - 2022-08-10 - Decompression