omnizip 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +32 -0
- data/.rubocop_todo.yml +754 -0
- data/COPYING +502 -0
- data/Gemfile +17 -0
- data/LICENSE +12 -0
- data/README.adoc +1045 -0
- data/Rakefile +12 -0
- data/benchmark/README.md +260 -0
- data/benchmark/benchmark_suite.rb +125 -0
- data/benchmark/compression_bench.rb +181 -0
- data/benchmark/filter_bench.rb +180 -0
- data/benchmark/models/benchmark_result.rb +59 -0
- data/benchmark/models/comparison_result.rb +69 -0
- data/benchmark/profile_suite.rb +167 -0
- data/benchmark/reporter.rb +150 -0
- data/benchmark/run_benchmarks.rb +66 -0
- data/benchmark/test_data.rb +137 -0
- data/config/formats/rar3_spec.yml +91 -0
- data/config/formats/rar5_spec.yml +102 -0
- data/docs/.github/workflows/docs.yml +142 -0
- data/docs/.gitignore +21 -0
- data/docs/.lychee.toml +67 -0
- data/docs/Gemfile +13 -0
- data/docs/RAR_WRITE_SUPPORT.md +26 -0
- data/docs/README.md +101 -0
- data/docs/_config.yml +112 -0
- data/docs/assets/logo.svg +1 -0
- data/docs/assets/omnizip-logo.pdf +1540 -11
- data/docs/comparison/feature-matrix.adoc +694 -0
- data/docs/comparison/index.adoc +113 -0
- data/docs/comparison/vs-7zip.adoc +309 -0
- data/docs/comparison/vs-peazip.adoc +77 -0
- data/docs/comparison/vs-rubyzip.adoc +342 -0
- data/docs/comparison/vs-winrar.adoc +100 -0
- data/docs/compatibility.adoc +579 -0
- data/docs/concepts/index.adoc +129 -0
- data/docs/developer/architecture.adoc +256 -0
- data/docs/developer/contributing.adoc +158 -0
- data/docs/developer/index.adoc +25 -0
- data/docs/developer/testing.adoc +212 -0
- data/docs/getting-started/basic-usage.adoc +271 -0
- data/docs/getting-started/index.adoc +42 -0
- data/docs/getting-started/installation.adoc +138 -0
- data/docs/getting-started/quick-start.adoc +185 -0
- data/docs/getting-started/your-first-archive.adoc +218 -0
- data/docs/guides/advanced-features/encryption.adoc +300 -0
- data/docs/guides/advanced-features/index.adoc +49 -0
- data/docs/guides/advanced-features/parallel-processing.adoc +246 -0
- data/docs/guides/advanced-features/progress-tracking.adoc +320 -0
- data/docs/guides/advanced-features/streaming.adoc +212 -0
- data/docs/guides/archive-formats/gzip-format.adoc +107 -0
- data/docs/guides/archive-formats/index.adoc +130 -0
- data/docs/guides/archive-formats/rar-format.adoc +104 -0
- data/docs/guides/archive-formats/rar5.adoc +521 -0
- data/docs/guides/archive-formats/seven-zip-format.adoc +35 -0
- data/docs/guides/archive-formats/tar-format.adoc +106 -0
- data/docs/guides/archive-formats/xz-format.adoc +118 -0
- data/docs/guides/archive-formats/zip-format.adoc +35 -0
- data/docs/guides/compression-algorithms/bzip2.adoc +113 -0
- data/docs/guides/compression-algorithms/deflate.adoc +319 -0
- data/docs/guides/compression-algorithms/index.adoc +190 -0
- data/docs/guides/compression-algorithms/lzma.adoc +398 -0
- data/docs/guides/compression-algorithms/lzma2.adoc +327 -0
- data/docs/guides/compression-algorithms/ppmd.adoc +316 -0
- data/docs/guides/compression-algorithms/zstandard.adoc +361 -0
- data/docs/guides/creating-archives.adoc +354 -0
- data/docs/guides/extracting-archives.adoc +53 -0
- data/docs/guides/format-conversion.adoc +64 -0
- data/docs/guides/index.adoc +49 -0
- data/docs/guides/migration-rubyzip.adoc +217 -0
- data/docs/guides/parity-archives.adoc +605 -0
- data/docs/guides/performance-tuning.adoc +88 -0
- data/docs/index.adoc +218 -0
- data/docs/lychee.toml +67 -0
- data/docs/reference/api/overview.adoc +188 -0
- data/docs/reference/cli/compress-command.adoc +114 -0
- data/docs/reference/cli/overview.adoc +140 -0
- data/docs/reference/index.adoc +26 -0
- data/docs/resources/faq.adoc +185 -0
- data/docs/resources/quick-reference.adoc +222 -0
- data/docs/troubleshooting/index.adoc +208 -0
- data/examples/api_comparison.rb +205 -0
- data/examples/deflate64_example.rb +96 -0
- data/examples/par2_demo.rb +121 -0
- data/examples/quick_start_native.rb +150 -0
- data/examples/quick_start_rubyzip.rb +115 -0
- data/examples/rubyzip_compatibility_demo.rb +194 -0
- data/exe/omnizip +27 -0
- data/lib/omnizip/algorithm.rb +130 -0
- data/lib/omnizip/algorithm_registry.rb +86 -0
- data/lib/omnizip/algorithms/.keep +0 -0
- data/lib/omnizip/algorithms/bzip2/bwt.rb +225 -0
- data/lib/omnizip/algorithms/bzip2/decoder.rb +193 -0
- data/lib/omnizip/algorithms/bzip2/encoder.rb +237 -0
- data/lib/omnizip/algorithms/bzip2/huffman.rb +206 -0
- data/lib/omnizip/algorithms/bzip2/mtf.rb +101 -0
- data/lib/omnizip/algorithms/bzip2/rle.rb +151 -0
- data/lib/omnizip/algorithms/bzip2.rb +130 -0
- data/lib/omnizip/algorithms/deflate/constants.rb +28 -0
- data/lib/omnizip/algorithms/deflate/decoder.rb +38 -0
- data/lib/omnizip/algorithms/deflate/encoder.rb +46 -0
- data/lib/omnizip/algorithms/deflate.rb +128 -0
- data/lib/omnizip/algorithms/deflate64/constants.rb +45 -0
- data/lib/omnizip/algorithms/deflate64/decoder.rb +153 -0
- data/lib/omnizip/algorithms/deflate64/encoder.rb +98 -0
- data/lib/omnizip/algorithms/deflate64/huffman_coder.rb +354 -0
- data/lib/omnizip/algorithms/deflate64/lz77_encoder.rb +142 -0
- data/lib/omnizip/algorithms/deflate64.rb +109 -0
- data/lib/omnizip/algorithms/lzma/bit_model.rb +120 -0
- data/lib/omnizip/algorithms/lzma/constants.rb +112 -0
- data/lib/omnizip/algorithms/lzma/decoder.rb +148 -0
- data/lib/omnizip/algorithms/lzma/dictionary.rb +69 -0
- data/lib/omnizip/algorithms/lzma/distance_coder.rb +415 -0
- data/lib/omnizip/algorithms/lzma/encoder.rb +142 -0
- data/lib/omnizip/algorithms/lzma/length_coder.rb +260 -0
- data/lib/omnizip/algorithms/lzma/literal_decoder.rb +320 -0
- data/lib/omnizip/algorithms/lzma/literal_encoder.rb +210 -0
- data/lib/omnizip/algorithms/lzma/lzip_decoder.rb +341 -0
- data/lib/omnizip/algorithms/lzma/lzma_alone_decoder.rb +192 -0
- data/lib/omnizip/algorithms/lzma/lzma_state.rb +128 -0
- data/lib/omnizip/algorithms/lzma/match.rb +32 -0
- data/lib/omnizip/algorithms/lzma/match_finder.rb +205 -0
- data/lib/omnizip/algorithms/lzma/match_finder_config.rb +142 -0
- data/lib/omnizip/algorithms/lzma/match_finder_factory.rb +88 -0
- data/lib/omnizip/algorithms/lzma/optimal_encoder.rb +130 -0
- data/lib/omnizip/algorithms/lzma/probability_models.rb +72 -0
- data/lib/omnizip/algorithms/lzma/range_coder.rb +85 -0
- data/lib/omnizip/algorithms/lzma/range_decoder.rb +434 -0
- data/lib/omnizip/algorithms/lzma/range_encoder.rb +194 -0
- data/lib/omnizip/algorithms/lzma/state.rb +127 -0
- data/lib/omnizip/algorithms/lzma/xz_buffered_range_encoder.rb +325 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder.rb +426 -0
- data/lib/omnizip/algorithms/lzma/xz_encoder_fast.rb +645 -0
- data/lib/omnizip/algorithms/lzma/xz_match_finder_adapter.rb +227 -0
- data/lib/omnizip/algorithms/lzma/xz_price_calculator.rb +169 -0
- data/lib/omnizip/algorithms/lzma/xz_probability_models.rb +261 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder.rb +223 -0
- data/lib/omnizip/algorithms/lzma/xz_range_encoder_exact.rb +331 -0
- data/lib/omnizip/algorithms/lzma/xz_state.rb +116 -0
- data/lib/omnizip/algorithms/lzma/xz_utils_decoder.rb +2055 -0
- data/lib/omnizip/algorithms/lzma.rb +238 -0
- data/lib/omnizip/algorithms/lzma2/chunk_manager.rb +182 -0
- data/lib/omnizip/algorithms/lzma2/constants.rb +41 -0
- data/lib/omnizip/algorithms/lzma2/encoder.rb +147 -0
- data/lib/omnizip/algorithms/lzma2/lzma2_chunk.rb +161 -0
- data/lib/omnizip/algorithms/lzma2/properties.rb +179 -0
- data/lib/omnizip/algorithms/lzma2/simple_lzma2_encoder.rb +127 -0
- data/lib/omnizip/algorithms/lzma2/xz_encoder_adapter.rb +85 -0
- data/lib/omnizip/algorithms/lzma2.rb +141 -0
- data/lib/omnizip/algorithms/ppmd7/constants.rb +74 -0
- data/lib/omnizip/algorithms/ppmd7/context.rb +154 -0
- data/lib/omnizip/algorithms/ppmd7/decoder.rb +126 -0
- data/lib/omnizip/algorithms/ppmd7/encoder.rb +163 -0
- data/lib/omnizip/algorithms/ppmd7/model.rb +248 -0
- data/lib/omnizip/algorithms/ppmd7/symbol_state.rb +57 -0
- data/lib/omnizip/algorithms/ppmd7.rb +116 -0
- data/lib/omnizip/algorithms/ppmd8/constants.rb +61 -0
- data/lib/omnizip/algorithms/ppmd8/context.rb +34 -0
- data/lib/omnizip/algorithms/ppmd8/decoder.rb +107 -0
- data/lib/omnizip/algorithms/ppmd8/encoder.rb +138 -0
- data/lib/omnizip/algorithms/ppmd8/model.rb +250 -0
- data/lib/omnizip/algorithms/ppmd8/restoration_method.rb +78 -0
- data/lib/omnizip/algorithms/ppmd8.rb +82 -0
- data/lib/omnizip/algorithms/ppmd_base.rb +138 -0
- data/lib/omnizip/algorithms/sevenzip_lzma2.rb +123 -0
- data/lib/omnizip/algorithms/xz_lzma2.rb +118 -0
- data/lib/omnizip/algorithms/zstandard/constants.rb +25 -0
- data/lib/omnizip/algorithms/zstandard/decoder.rb +46 -0
- data/lib/omnizip/algorithms/zstandard/encoder.rb +51 -0
- data/lib/omnizip/algorithms/zstandard.rb +138 -0
- data/lib/omnizip/buffer/memory_archive.rb +251 -0
- data/lib/omnizip/buffer/memory_extractor.rb +224 -0
- data/lib/omnizip/buffer.rb +176 -0
- data/lib/omnizip/checksum_registry.rb +114 -0
- data/lib/omnizip/checksums/crc32.rb +100 -0
- data/lib/omnizip/checksums/crc64.rb +101 -0
- data/lib/omnizip/checksums/crc_base.rb +158 -0
- data/lib/omnizip/checksums/verifier.rb +131 -0
- data/lib/omnizip/chunked/memory_manager.rb +194 -0
- data/lib/omnizip/chunked/reader.rb +78 -0
- data/lib/omnizip/chunked/writer.rb +120 -0
- data/lib/omnizip/chunked.rb +129 -0
- data/lib/omnizip/cli/output_formatter.rb +104 -0
- data/lib/omnizip/cli.rb +572 -0
- data/lib/omnizip/commands/.keep +0 -0
- data/lib/omnizip/commands/archive_create_command.rb +427 -0
- data/lib/omnizip/commands/archive_extract_command.rb +272 -0
- data/lib/omnizip/commands/archive_list_command.rb +218 -0
- data/lib/omnizip/commands/archive_repair_command.rb +131 -0
- data/lib/omnizip/commands/archive_verify_command.rb +117 -0
- data/lib/omnizip/commands/compress_command.rb +117 -0
- data/lib/omnizip/commands/decompress_command.rb +120 -0
- data/lib/omnizip/commands/list_command.rb +53 -0
- data/lib/omnizip/commands/metadata_command.rb +153 -0
- data/lib/omnizip/commands/parity_create_command.rb +122 -0
- data/lib/omnizip/commands/parity_repair_command.rb +122 -0
- data/lib/omnizip/commands/parity_verify_command.rb +124 -0
- data/lib/omnizip/commands/profile_list_command.rb +56 -0
- data/lib/omnizip/commands/profile_show_command.rb +44 -0
- data/lib/omnizip/convenience.rb +359 -0
- data/lib/omnizip/converter/conversion_registry.rb +49 -0
- data/lib/omnizip/converter/conversion_strategy.rb +121 -0
- data/lib/omnizip/converter/seven_zip_to_zip_strategy.rb +97 -0
- data/lib/omnizip/converter/zip_to_seven_zip_strategy.rb +112 -0
- data/lib/omnizip/converter.rb +105 -0
- data/lib/omnizip/crypto/aes256/cipher.rb +100 -0
- data/lib/omnizip/crypto/aes256/constants.rb +28 -0
- data/lib/omnizip/crypto/aes256/key_derivation.rb +101 -0
- data/lib/omnizip/crypto/aes256.rb +102 -0
- data/lib/omnizip/error.rb +106 -0
- data/lib/omnizip/eta/exponential_smoothing_estimator.rb +98 -0
- data/lib/omnizip/eta/moving_average_estimator.rb +99 -0
- data/lib/omnizip/eta/rate_calculator.rb +104 -0
- data/lib/omnizip/eta/sample_history.rb +143 -0
- data/lib/omnizip/eta/time_estimator.rb +106 -0
- data/lib/omnizip/eta.rb +63 -0
- data/lib/omnizip/extraction/filter_chain.rb +177 -0
- data/lib/omnizip/extraction/glob_pattern.rb +140 -0
- data/lib/omnizip/extraction/pattern_matcher.rb +70 -0
- data/lib/omnizip/extraction/predicate_pattern.rb +52 -0
- data/lib/omnizip/extraction/regex_pattern.rb +50 -0
- data/lib/omnizip/extraction/selective_extractor.rb +240 -0
- data/lib/omnizip/extraction.rb +111 -0
- data/lib/omnizip/file_type/mime_classifier.rb +144 -0
- data/lib/omnizip/file_type.rb +113 -0
- data/lib/omnizip/filter.rb +139 -0
- data/lib/omnizip/filter_pipeline.rb +108 -0
- data/lib/omnizip/filter_registry.rb +166 -0
- data/lib/omnizip/filters/bcj.rb +279 -0
- data/lib/omnizip/filters/bcj2/constants.rb +53 -0
- data/lib/omnizip/filters/bcj2/decoder.rb +200 -0
- data/lib/omnizip/filters/bcj2/encoder.rb +61 -0
- data/lib/omnizip/filters/bcj2/stream_data.rb +93 -0
- data/lib/omnizip/filters/bcj2.rb +99 -0
- data/lib/omnizip/filters/bcj_arm.rb +176 -0
- data/lib/omnizip/filters/bcj_arm64.rb +244 -0
- data/lib/omnizip/filters/bcj_ia64.rb +196 -0
- data/lib/omnizip/filters/bcj_ppc.rb +190 -0
- data/lib/omnizip/filters/bcj_sparc.rb +176 -0
- data/lib/omnizip/filters/bcj_x86.rb +193 -0
- data/lib/omnizip/filters/delta.rb +196 -0
- data/lib/omnizip/filters/filter_base.rb +72 -0
- data/lib/omnizip/filters/registry.rb +123 -0
- data/lib/omnizip/filters/xz_delta.rb +258 -0
- data/lib/omnizip/format_detector.rb +162 -0
- data/lib/omnizip/format_registry.rb +59 -0
- data/lib/omnizip/formats/.keep +0 -0
- data/lib/omnizip/formats/bzip2_file.rb +172 -0
- data/lib/omnizip/formats/cpio/constants.rb +55 -0
- data/lib/omnizip/formats/cpio/entry.rb +385 -0
- data/lib/omnizip/formats/cpio/reader.rb +196 -0
- data/lib/omnizip/formats/cpio/writer.rb +234 -0
- data/lib/omnizip/formats/cpio.rb +140 -0
- data/lib/omnizip/formats/format_spec_loader.rb +230 -0
- data/lib/omnizip/formats/gzip.rb +238 -0
- data/lib/omnizip/formats/iso/directory_builder.rb +297 -0
- data/lib/omnizip/formats/iso/directory_record.rb +152 -0
- data/lib/omnizip/formats/iso/joliet.rb +204 -0
- data/lib/omnizip/formats/iso/path_table.rb +125 -0
- data/lib/omnizip/formats/iso/reader.rb +197 -0
- data/lib/omnizip/formats/iso/rock_ridge.rb +349 -0
- data/lib/omnizip/formats/iso/volume_builder.rb +320 -0
- data/lib/omnizip/formats/iso/volume_descriptor.rb +168 -0
- data/lib/omnizip/formats/iso/writer.rb +530 -0
- data/lib/omnizip/formats/iso.rb +140 -0
- data/lib/omnizip/formats/lzip.rb +175 -0
- data/lib/omnizip/formats/lzma_alone.rb +171 -0
- data/lib/omnizip/formats/rar/archive_repairer.rb +243 -0
- data/lib/omnizip/formats/rar/archive_verifier.rb +195 -0
- data/lib/omnizip/formats/rar/block_parser.rb +243 -0
- data/lib/omnizip/formats/rar/compression/bit_stream.rb +180 -0
- data/lib/omnizip/formats/rar/compression/dispatcher.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/decoder.rb +216 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/encoder.rb +158 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_builder.rb +217 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/huffman_coder.rb +189 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/match_finder.rb +135 -0
- data/lib/omnizip/formats/rar/compression/lz77_huffman/sliding_window.rb +165 -0
- data/lib/omnizip/formats/rar/compression/ppmd/context.rb +105 -0
- data/lib/omnizip/formats/rar/compression/ppmd/decoder.rb +219 -0
- data/lib/omnizip/formats/rar/compression/ppmd/encoder.rb +262 -0
- data/lib/omnizip/formats/rar/compression_method_registry.rb +106 -0
- data/lib/omnizip/formats/rar/constants.rb +82 -0
- data/lib/omnizip/formats/rar/decompressor.rb +238 -0
- data/lib/omnizip/formats/rar/external_writer.rb +312 -0
- data/lib/omnizip/formats/rar/header.rb +192 -0
- data/lib/omnizip/formats/rar/license_validator.rb +109 -0
- data/lib/omnizip/formats/rar/models/rar_archive.rb +77 -0
- data/lib/omnizip/formats/rar/models/rar_entry.rb +65 -0
- data/lib/omnizip/formats/rar/models/rar_volume.rb +56 -0
- data/lib/omnizip/formats/rar/parity_handler.rb +292 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzma.rb +202 -0
- data/lib/omnizip/formats/rar/rar5/compression/lzss.rb +578 -0
- data/lib/omnizip/formats/rar/rar5/compression/store.rb +60 -0
- data/lib/omnizip/formats/rar/rar5/crc32.rb +39 -0
- data/lib/omnizip/formats/rar/rar5/encryption/aes256_cbc.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_header.rb +114 -0
- data/lib/omnizip/formats/rar/rar5/encryption/encryption_manager.rb +166 -0
- data/lib/omnizip/formats/rar/rar5/encryption/key_derivation.rb +97 -0
- data/lib/omnizip/formats/rar/rar5/header.rb +187 -0
- data/lib/omnizip/formats/rar/rar5/models/encryption_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/models/recovery_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/solid_options.rb +63 -0
- data/lib/omnizip/formats/rar/rar5/models/volume_options.rb +74 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/ARCHITECTURE.md +290 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_manager.rb +264 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_splitter.rb +155 -0
- data/lib/omnizip/formats/rar/rar5/multi_volume/volume_writer.rb +194 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_encoder.rb +109 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_manager.rb +142 -0
- data/lib/omnizip/formats/rar/rar5/solid/solid_stream.rb +121 -0
- data/lib/omnizip/formats/rar/rar5/vint.rb +65 -0
- data/lib/omnizip/formats/rar/rar5/writer.rb +466 -0
- data/lib/omnizip/formats/rar/rar_format_base.rb +241 -0
- data/lib/omnizip/formats/rar/reader.rb +366 -0
- data/lib/omnizip/formats/rar/recovery_record.rb +245 -0
- data/lib/omnizip/formats/rar/volume_manager.rb +168 -0
- data/lib/omnizip/formats/rar/writer.rb +431 -0
- data/lib/omnizip/formats/rar.rb +205 -0
- data/lib/omnizip/formats/rar3/compressor.rb +73 -0
- data/lib/omnizip/formats/rar3/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar3/reader.rb +386 -0
- data/lib/omnizip/formats/rar3/writer.rb +219 -0
- data/lib/omnizip/formats/rar5/compressor.rb +73 -0
- data/lib/omnizip/formats/rar5/decompressor.rb +66 -0
- data/lib/omnizip/formats/rar5/reader.rb +342 -0
- data/lib/omnizip/formats/rar5/writer.rb +214 -0
- data/lib/omnizip/formats/seven_zip/coder_chain.rb +150 -0
- data/lib/omnizip/formats/seven_zip/constants.rb +126 -0
- data/lib/omnizip/formats/seven_zip/encoded_header.rb +114 -0
- data/lib/omnizip/formats/seven_zip/encrypted_header.rb +142 -0
- data/lib/omnizip/formats/seven_zip/file_collector.rb +144 -0
- data/lib/omnizip/formats/seven_zip/header.rb +106 -0
- data/lib/omnizip/formats/seven_zip/header_encryptor.rb +134 -0
- data/lib/omnizip/formats/seven_zip/header_writer.rb +466 -0
- data/lib/omnizip/formats/seven_zip/models/coder_info.rb +30 -0
- data/lib/omnizip/formats/seven_zip/models/file_entry.rb +58 -0
- data/lib/omnizip/formats/seven_zip/models/folder.rb +69 -0
- data/lib/omnizip/formats/seven_zip/models/stream_info.rb +42 -0
- data/lib/omnizip/formats/seven_zip/parser.rb +660 -0
- data/lib/omnizip/formats/seven_zip/reader.rb +458 -0
- data/lib/omnizip/formats/seven_zip/split_archive_reader.rb +632 -0
- data/lib/omnizip/formats/seven_zip/split_archive_writer.rb +315 -0
- data/lib/omnizip/formats/seven_zip/stream_compressor.rb +151 -0
- data/lib/omnizip/formats/seven_zip/stream_decompressor.rb +162 -0
- data/lib/omnizip/formats/seven_zip/writer.rb +740 -0
- data/lib/omnizip/formats/seven_zip.rb +93 -0
- data/lib/omnizip/formats/tar/constants.rb +73 -0
- data/lib/omnizip/formats/tar/entry.rb +94 -0
- data/lib/omnizip/formats/tar/header.rb +168 -0
- data/lib/omnizip/formats/tar/reader.rb +121 -0
- data/lib/omnizip/formats/tar/writer.rb +216 -0
- data/lib/omnizip/formats/tar.rb +84 -0
- data/lib/omnizip/formats/xz/reader.rb +116 -0
- data/lib/omnizip/formats/xz.rb +237 -0
- data/lib/omnizip/formats/xz_impl/block_decoder.rb +754 -0
- data/lib/omnizip/formats/xz_impl/block_encoder.rb +306 -0
- data/lib/omnizip/formats/xz_impl/block_header.rb +210 -0
- data/lib/omnizip/formats/xz_impl/block_header_parser.rb +186 -0
- data/lib/omnizip/formats/xz_impl/constants.rb +49 -0
- data/lib/omnizip/formats/xz_impl/index_decoder.rb +174 -0
- data/lib/omnizip/formats/xz_impl/index_encoder.rb +122 -0
- data/lib/omnizip/formats/xz_impl/stream_decoder.rb +468 -0
- data/lib/omnizip/formats/xz_impl/stream_encoder.rb +99 -0
- data/lib/omnizip/formats/xz_impl/stream_footer.rb +81 -0
- data/lib/omnizip/formats/xz_impl/stream_footer_parser.rb +117 -0
- data/lib/omnizip/formats/xz_impl/stream_header.rb +55 -0
- data/lib/omnizip/formats/xz_impl/stream_header_parser.rb +108 -0
- data/lib/omnizip/formats/xz_impl/vli.rb +128 -0
- data/lib/omnizip/formats/xz_impl/writer.rb +421 -0
- data/lib/omnizip/formats/zip/central_directory_header.rb +195 -0
- data/lib/omnizip/formats/zip/constants.rb +69 -0
- data/lib/omnizip/formats/zip/end_of_central_directory.rb +133 -0
- data/lib/omnizip/formats/zip/local_file_header.rb +138 -0
- data/lib/omnizip/formats/zip/reader.rb +250 -0
- data/lib/omnizip/formats/zip/unix_extra_field.rb +153 -0
- data/lib/omnizip/formats/zip/writer.rb +375 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory.rb +104 -0
- data/lib/omnizip/formats/zip/zip64_end_of_central_directory_locator.rb +66 -0
- data/lib/omnizip/formats/zip/zip64_extra_field.rb +114 -0
- data/lib/omnizip/formats/zip.rb +50 -0
- data/lib/omnizip/implementations/base/lzma2_decoder_base.rb +75 -0
- data/lib/omnizip/implementations/base/lzma2_encoder_base.rb +128 -0
- data/lib/omnizip/implementations/base/lzma_decoder_base.rb +83 -0
- data/lib/omnizip/implementations/base/lzma_encoder_base.rb +108 -0
- data/lib/omnizip/implementations/base/state_machine_base.rb +182 -0
- data/lib/omnizip/implementations/seven_zip/lzma/decoder.rb +421 -0
- data/lib/omnizip/implementations/seven_zip/lzma/encoder.rb +465 -0
- data/lib/omnizip/implementations/seven_zip/lzma/match_finder.rb +288 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_decoder.rb +200 -0
- data/lib/omnizip/implementations/seven_zip/lzma/range_encoder.rb +197 -0
- data/lib/omnizip/implementations/seven_zip/lzma/state_machine.rb +141 -0
- data/lib/omnizip/implementations/seven_zip/lzma2/encoder.rb +519 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/decoder.rb +723 -0
- data/lib/omnizip/implementations/xz_utils/lzma2/encoder.rb +750 -0
- data/lib/omnizip/io/buffered_input.rb +146 -0
- data/lib/omnizip/io/buffered_output.rb +105 -0
- data/lib/omnizip/io/stream_manager.rb +115 -0
- data/lib/omnizip/link_handler/hard_link.rb +79 -0
- data/lib/omnizip/link_handler/symbolic_link.rb +74 -0
- data/lib/omnizip/link_handler.rb +124 -0
- data/lib/omnizip/metadata/archive_metadata.rb +114 -0
- data/lib/omnizip/metadata/entry_metadata.rb +146 -0
- data/lib/omnizip/metadata/metadata_editor.rb +171 -0
- data/lib/omnizip/metadata/metadata_registry.rb +64 -0
- data/lib/omnizip/metadata/metadata_validator.rb +99 -0
- data/lib/omnizip/metadata.rb +57 -0
- data/lib/omnizip/models/.keep +0 -0
- data/lib/omnizip/models/algorithm_metadata.rb +73 -0
- data/lib/omnizip/models/compression_options.rb +71 -0
- data/lib/omnizip/models/conversion_options.rb +87 -0
- data/lib/omnizip/models/conversion_result.rb +135 -0
- data/lib/omnizip/models/eta_result.rb +46 -0
- data/lib/omnizip/models/extraction_rule.rb +115 -0
- data/lib/omnizip/models/filter_chain.rb +144 -0
- data/lib/omnizip/models/filter_config.rb +183 -0
- data/lib/omnizip/models/match_result.rb +124 -0
- data/lib/omnizip/models/optimization_suggestion.rb +91 -0
- data/lib/omnizip/models/parallel_options.rb +104 -0
- data/lib/omnizip/models/performance_result.rb +79 -0
- data/lib/omnizip/models/profile_report.rb +82 -0
- data/lib/omnizip/models/progress_options.rb +38 -0
- data/lib/omnizip/models/split_options.rb +116 -0
- data/lib/omnizip/optimization_registry.rb +81 -0
- data/lib/omnizip/parallel/job_queue.rb +209 -0
- data/lib/omnizip/parallel/job_scheduler.rb +203 -0
- data/lib/omnizip/parallel/parallel_compressor.rb +347 -0
- data/lib/omnizip/parallel/parallel_extractor.rb +329 -0
- data/lib/omnizip/parallel/worker_pool.rb +223 -0
- data/lib/omnizip/parallel.rb +149 -0
- data/lib/omnizip/parity/chunked_block_processor.rb +196 -0
- data/lib/omnizip/parity/galois16.rb +145 -0
- data/lib/omnizip/parity/models/creator_packet.rb +73 -0
- data/lib/omnizip/parity/models/file_description_packet.rb +133 -0
- data/lib/omnizip/parity/models/ifsc_packet.rb +123 -0
- data/lib/omnizip/parity/models/main_packet.rb +128 -0
- data/lib/omnizip/parity/models/packet.rb +156 -0
- data/lib/omnizip/parity/models/packet_registry.rb +109 -0
- data/lib/omnizip/parity/models/recovery_slice_packet.rb +78 -0
- data/lib/omnizip/parity/par2_creator.rb +531 -0
- data/lib/omnizip/parity/par2_repairer.rb +407 -0
- data/lib/omnizip/parity/par2_verifier.rb +364 -0
- data/lib/omnizip/parity/par2cmdline_algorithm.rb +110 -0
- data/lib/omnizip/parity/par2cmdline_coefficients.rb +78 -0
- data/lib/omnizip/parity/reed_solomon_decoder.rb +266 -0
- data/lib/omnizip/parity/reed_solomon_encoder.rb +111 -0
- data/lib/omnizip/parity/reed_solomon_matrix.rb +342 -0
- data/lib/omnizip/parity.rb +186 -0
- data/lib/omnizip/password/encryption_registry.rb +65 -0
- data/lib/omnizip/password/encryption_strategy.rb +96 -0
- data/lib/omnizip/password/password_validator.rb +129 -0
- data/lib/omnizip/password/winzip_aes_strategy.rb +192 -0
- data/lib/omnizip/password/zip_crypto_strategy.rb +141 -0
- data/lib/omnizip/password.rb +87 -0
- data/lib/omnizip/pipe/stream_compressor.rb +124 -0
- data/lib/omnizip/pipe/stream_decompressor.rb +174 -0
- data/lib/omnizip/pipe.rb +121 -0
- data/lib/omnizip/platform/ntfs_streams.rb +201 -0
- data/lib/omnizip/platform.rb +189 -0
- data/lib/omnizip/profile/archive_profile.rb +39 -0
- data/lib/omnizip/profile/balanced_profile.rb +33 -0
- data/lib/omnizip/profile/binary_profile.rb +36 -0
- data/lib/omnizip/profile/compression_profile.rb +158 -0
- data/lib/omnizip/profile/custom_profile.rb +157 -0
- data/lib/omnizip/profile/fast_profile.rb +33 -0
- data/lib/omnizip/profile/maximum_profile.rb +33 -0
- data/lib/omnizip/profile/profile_detector.rb +110 -0
- data/lib/omnizip/profile/profile_registry.rb +161 -0
- data/lib/omnizip/profile/text_profile.rb +36 -0
- data/lib/omnizip/profile.rb +190 -0
- data/lib/omnizip/profiler/memory_profiler.rb +66 -0
- data/lib/omnizip/profiler/method_profiler.rb +49 -0
- data/lib/omnizip/profiler/report_generator.rb +169 -0
- data/lib/omnizip/profiler.rb +204 -0
- data/lib/omnizip/progress/callback_reporter.rb +36 -0
- data/lib/omnizip/progress/console_reporter.rb +62 -0
- data/lib/omnizip/progress/log_reporter.rb +91 -0
- data/lib/omnizip/progress/operation_progress.rb +118 -0
- data/lib/omnizip/progress/progress_bar.rb +156 -0
- data/lib/omnizip/progress/progress_reporter.rb +40 -0
- data/lib/omnizip/progress/progress_tracker.rb +190 -0
- data/lib/omnizip/progress/silent_reporter.rb +24 -0
- data/lib/omnizip/progress.rb +127 -0
- data/lib/omnizip/rubyzip_compat.rb +63 -0
- data/lib/omnizip/temp/safe_extract.rb +168 -0
- data/lib/omnizip/temp/temp_file.rb +124 -0
- data/lib/omnizip/temp/temp_file_pool.rb +109 -0
- data/lib/omnizip/temp.rb +181 -0
- data/lib/omnizip/version.rb +5 -0
- data/lib/omnizip/zip/entry.rb +156 -0
- data/lib/omnizip/zip/file.rb +485 -0
- data/lib/omnizip/zip/input_stream.rb +273 -0
- data/lib/omnizip/zip/output_stream.rb +324 -0
- data/lib/omnizip.rb +156 -0
- data/readme-docs/advanced-features.adoc +515 -0
- data/readme-docs/api-usage.adoc +444 -0
- data/readme-docs/architecture.adoc +449 -0
- data/readme-docs/archive-formats.adoc +479 -0
- data/readme-docs/cli-usage.adoc +222 -0
- data/readme-docs/compression-algorithms.adoc +442 -0
- data/readme-docs/compression-profiles.adoc +247 -0
- data/readme-docs/encryption-checksums.adoc +328 -0
- data/readme-docs/format-converter.adoc +325 -0
- data/readme-docs/installation.adoc +228 -0
- data/readme-docs/par2-archives.adoc +608 -0
- data/readme-docs/performance-profiler.adoc +389 -0
- data/readme-docs/preprocessing-filters.adoc +280 -0
- data/xz-file-format-1.2.1.txt +1174 -0
- metadata +617 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Your First Archive
|
|
3
|
+
nav_order: 4
|
|
4
|
+
parent: Getting Started
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
== Your First Archive
|
|
8
|
+
|
|
9
|
+
=== General
|
|
10
|
+
|
|
11
|
+
This guide walks you through creating your first archive with Omnizip, covering both .7z and ZIP formats.
|
|
12
|
+
|
|
13
|
+
=== Creating a Simple 7z Archive
|
|
14
|
+
|
|
15
|
+
==== Command Line
|
|
16
|
+
|
|
17
|
+
[source,bash]
|
|
18
|
+
----
|
|
19
|
+
# Create a 7z archive with default settings
|
|
20
|
+
omnizip archive create backup.7z document.txt photo.jpg
|
|
21
|
+
----
|
|
22
|
+
|
|
23
|
+
This creates a new archive using LZMA2 compression at level 5 (default).
|
|
24
|
+
|
|
25
|
+
==== Ruby API
|
|
26
|
+
|
|
27
|
+
[source,ruby]
|
|
28
|
+
----
|
|
29
|
+
require 'omnizip'
|
|
30
|
+
|
|
31
|
+
# Create archive with default settings
|
|
32
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z')
|
|
33
|
+
writer.add_file('document.txt')
|
|
34
|
+
writer.add_file('photo.jpg')
|
|
35
|
+
writer.close
|
|
36
|
+
|
|
37
|
+
puts "Archive created successfully!"
|
|
38
|
+
----
|
|
39
|
+
|
|
40
|
+
=== Customizing Compression
|
|
41
|
+
|
|
42
|
+
==== Higher Compression
|
|
43
|
+
|
|
44
|
+
[source,bash]
|
|
45
|
+
----
|
|
46
|
+
omnizip archive create backup.7z documents/ \
|
|
47
|
+
--algorithm lzma2 --level 9
|
|
48
|
+
----
|
|
49
|
+
|
|
50
|
+
[source,ruby]
|
|
51
|
+
----
|
|
52
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z',
|
|
53
|
+
algorithm: :lzma2,
|
|
54
|
+
level: 9
|
|
55
|
+
)
|
|
56
|
+
writer.add_directory('documents/')
|
|
57
|
+
writer.close
|
|
58
|
+
----
|
|
59
|
+
|
|
60
|
+
==== Faster Compression
|
|
61
|
+
|
|
62
|
+
[source,bash]
|
|
63
|
+
----
|
|
64
|
+
omnizip archive create backup.7z data/ \
|
|
65
|
+
--algorithm lzma2 --level 1
|
|
66
|
+
----
|
|
67
|
+
|
|
68
|
+
[source,ruby]
|
|
69
|
+
----
|
|
70
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z',
|
|
71
|
+
algorithm: :lzma2,
|
|
72
|
+
level: 1
|
|
73
|
+
)
|
|
74
|
+
writer.add_directory('data/')
|
|
75
|
+
writer.close
|
|
76
|
+
----
|
|
77
|
+
|
|
78
|
+
=== Creating a ZIP Archive
|
|
79
|
+
|
|
80
|
+
==== Command Line
|
|
81
|
+
|
|
82
|
+
[source,bash]
|
|
83
|
+
----
|
|
84
|
+
# Create a ZIP archive
|
|
85
|
+
omnizip archive create backup.zip documents/ \
|
|
86
|
+
--format zip
|
|
87
|
+
----
|
|
88
|
+
|
|
89
|
+
==== Ruby API
|
|
90
|
+
|
|
91
|
+
[source,ruby]
|
|
92
|
+
----
|
|
93
|
+
require 'omnizip'
|
|
94
|
+
|
|
95
|
+
writer = Omnizip::Formats::Zip::Writer.new('backup.zip')
|
|
96
|
+
writer.add_directory('documents/')
|
|
97
|
+
writer.close
|
|
98
|
+
----
|
|
99
|
+
|
|
100
|
+
=== Using Filters for Executables
|
|
101
|
+
|
|
102
|
+
BCJ filters improve compression of executable files:
|
|
103
|
+
|
|
104
|
+
[source,bash]
|
|
105
|
+
----
|
|
106
|
+
omnizip archive create binaries.7z app.exe \
|
|
107
|
+
--filters bcj_x86
|
|
108
|
+
----
|
|
109
|
+
|
|
110
|
+
[source,ruby]
|
|
111
|
+
----
|
|
112
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('binaries.7z',
|
|
113
|
+
filters: [:bcj_x86]
|
|
114
|
+
)
|
|
115
|
+
writer.add_file('app.exe')
|
|
116
|
+
writer.close
|
|
117
|
+
----
|
|
118
|
+
|
|
119
|
+
=== Creating Multi-Volume Archives
|
|
120
|
+
|
|
121
|
+
Split large archives into multiple volumes:
|
|
122
|
+
|
|
123
|
+
[source,bash]
|
|
124
|
+
----
|
|
125
|
+
# Create volumes of 100MB each
|
|
126
|
+
omnizip archive create backup.7z.001 large_data/ \
|
|
127
|
+
--volume-size 100M
|
|
128
|
+
----
|
|
129
|
+
|
|
130
|
+
[source,ruby]
|
|
131
|
+
----
|
|
132
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z.001',
|
|
133
|
+
volume_size: 100 * 1024 * 1024
|
|
134
|
+
)
|
|
135
|
+
writer.add_directory('large_data/')
|
|
136
|
+
writer.close
|
|
137
|
+
----
|
|
138
|
+
|
|
139
|
+
=== Encrypting Archives
|
|
140
|
+
|
|
141
|
+
Protect your archives with a password:
|
|
142
|
+
|
|
143
|
+
[source,bash]
|
|
144
|
+
----
|
|
145
|
+
omnizip archive create secure.7z documents/ \
|
|
146
|
+
--password "MySecurePassword123!"
|
|
147
|
+
----
|
|
148
|
+
|
|
149
|
+
[source,ruby]
|
|
150
|
+
----
|
|
151
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('secure.7z',
|
|
152
|
+
password: 'MySecurePassword123!'
|
|
153
|
+
)
|
|
154
|
+
writer.add_directory('documents/')
|
|
155
|
+
writer.close
|
|
156
|
+
----
|
|
157
|
+
|
|
158
|
+
=== Complete Example
|
|
159
|
+
|
|
160
|
+
Here's a complete example that creates a backup archive:
|
|
161
|
+
|
|
162
|
+
[source,ruby]
|
|
163
|
+
----
|
|
164
|
+
require 'omnizip'
|
|
165
|
+
|
|
166
|
+
# Create encrypted backup with high compression
|
|
167
|
+
writer = Omnizip::Formats::SevenZip::Writer.new('backup.7z',
|
|
168
|
+
algorithm: :lzma2,
|
|
169
|
+
level: 7,
|
|
170
|
+
password: ENV['BACKUP_PASSWORD'],
|
|
171
|
+
solid: true
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
# Add directories
|
|
175
|
+
writer.add_directory('/home/user/documents')
|
|
176
|
+
writer.add_directory('/home/user/projects')
|
|
177
|
+
writer.add_directory('/home/user/photos')
|
|
178
|
+
|
|
179
|
+
# Write the archive
|
|
180
|
+
writer.close
|
|
181
|
+
|
|
182
|
+
# Get statistics
|
|
183
|
+
info = Omnizip::Formats::SevenZip::Reader.info('backup.7z')
|
|
184
|
+
puts "Archive created:"
|
|
185
|
+
puts " Files: #{info.entry_count}"
|
|
186
|
+
puts " Size: #{info.uncompressed_size} bytes"
|
|
187
|
+
puts " Compressed: #{info.compressed_size} bytes"
|
|
188
|
+
puts " Ratio: #{(info.compressed_size.to_f / info.uncompressed_size * 100).round(1)}%"
|
|
189
|
+
----
|
|
190
|
+
|
|
191
|
+
=== Verifying Your Archive
|
|
192
|
+
|
|
193
|
+
Always verify your archive after creation:
|
|
194
|
+
|
|
195
|
+
[source,bash]
|
|
196
|
+
----
|
|
197
|
+
omnizip archive list backup.7z
|
|
198
|
+
----
|
|
199
|
+
|
|
200
|
+
[source,ruby]
|
|
201
|
+
----
|
|
202
|
+
require 'omnizip'
|
|
203
|
+
|
|
204
|
+
reader = Omnizip::Formats::SevenZip::Reader.new('backup.7z')
|
|
205
|
+
reader.open
|
|
206
|
+
puts "Archive contents:"
|
|
207
|
+
reader.each_file do |entry|
|
|
208
|
+
puts " #{entry.name} (#{entry.size} bytes)"
|
|
209
|
+
end
|
|
210
|
+
reader.close
|
|
211
|
+
----
|
|
212
|
+
|
|
213
|
+
=== Next Steps
|
|
214
|
+
|
|
215
|
+
* link:../guides/basic-usage/creating-archives[Creating Archives Guide] - More archive options
|
|
216
|
+
* link:../guides/advanced-usage/solid-compression[Solid Archives] - Better compression for similar files
|
|
217
|
+
* link:../guides/advanced-usage/encryption[Encryption Guide] - Password protection details
|
|
218
|
+
* link:../guides/basic-usage/extracting-archives[Extracting Archives] - How to extract your archives
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Encryption
|
|
3
|
+
nav_order: 4
|
|
4
|
+
parent: Advanced Features
|
|
5
|
+
grand_parent: Guides
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Purpose
|
|
9
|
+
|
|
10
|
+
Protect sensitive data in your archives with industry-standard AES-256 encryption. Omnizip supports multiple encryption methods across different archive formats.
|
|
11
|
+
|
|
12
|
+
== Benefits
|
|
13
|
+
|
|
14
|
+
* **Strong Security**: AES-256 encryption with secure key derivation
|
|
15
|
+
* **Format Flexibility**: Encryption available in both ZIP and 7z formats
|
|
16
|
+
* **Header Protection**: Encrypt filenames and metadata (7z format)
|
|
17
|
+
* **Password Validation**: Built-in password strength checking
|
|
18
|
+
* **Compatibility**: Works with archives from other tools
|
|
19
|
+
|
|
20
|
+
== Encryption Methods
|
|
21
|
+
|
|
22
|
+
=== AES-256 (7z Format)
|
|
23
|
+
|
|
24
|
+
The strongest encryption option with header protection:
|
|
25
|
+
|
|
26
|
+
[source,ruby]
|
|
27
|
+
----
|
|
28
|
+
# Create encrypted 7z archive
|
|
29
|
+
Omnizip::Archive.create(
|
|
30
|
+
'secure.7z',
|
|
31
|
+
format: :seven_zip,
|
|
32
|
+
password: 'MyStr0ngP@ssw0rd',
|
|
33
|
+
encrypt_headers: true # Hide filenames
|
|
34
|
+
) do |archive|
|
|
35
|
+
archive.add_file('confidential.pdf', 'documents/confidential.pdf')
|
|
36
|
+
archive.add_directory('sensitive_data/')
|
|
37
|
+
end
|
|
38
|
+
----
|
|
39
|
+
|
|
40
|
+
**Features**:
|
|
41
|
+
|
|
42
|
+
* AES-256-CBC encryption
|
|
43
|
+
* PBKDF2-HMAC-SHA256 key derivation (524,288 iterations)
|
|
44
|
+
* Optional header encryption (hides filenames)
|
|
45
|
+
* HMAC-SHA-256 authentication
|
|
46
|
+
|
|
47
|
+
=== WinZip AES (ZIP Format)
|
|
48
|
+
|
|
49
|
+
Industry-standard AES encryption for ZIP archives:
|
|
50
|
+
|
|
51
|
+
[source,ruby]
|
|
52
|
+
----
|
|
53
|
+
# Create AES-encrypted ZIP
|
|
54
|
+
Omnizip::Zip::File.open('secure.zip', create: true) do |zip|
|
|
55
|
+
zip.password = 'SecurePassword123'
|
|
56
|
+
zip.encryption = :winzip_aes # AES-256
|
|
57
|
+
zip.add('private.doc', 'files/private.doc')
|
|
58
|
+
end
|
|
59
|
+
----
|
|
60
|
+
|
|
61
|
+
**Features**:
|
|
62
|
+
|
|
63
|
+
* AES-256, AES-192, or AES-128
|
|
64
|
+
* Compatible with WinZip, 7-Zip, PeaZip
|
|
65
|
+
* HMAC-SHA-1 authentication
|
|
66
|
+
* Standard ZIP format
|
|
67
|
+
|
|
68
|
+
=== Traditional ZIP Encryption
|
|
69
|
+
|
|
70
|
+
[WARNING]
|
|
71
|
+
Traditional ZIP encryption (ZipCrypto) is weak and should only be used for compatibility with legacy systems.
|
|
72
|
+
|
|
73
|
+
[source,ruby]
|
|
74
|
+
----
|
|
75
|
+
# Only for compatibility - NOT RECOMMENDED
|
|
76
|
+
Omnizip::Zip::File.open('legacy.zip', create: true) do |zip|
|
|
77
|
+
zip.password = 'password'
|
|
78
|
+
zip.encryption = :traditional # Weak encryption
|
|
79
|
+
zip.add('file.txt', 'data.txt')
|
|
80
|
+
end
|
|
81
|
+
----
|
|
82
|
+
|
|
83
|
+
== Decrypting Archives
|
|
84
|
+
|
|
85
|
+
=== Provide Password at Open
|
|
86
|
+
|
|
87
|
+
[source,ruby]
|
|
88
|
+
----
|
|
89
|
+
# Decrypt 7z archive
|
|
90
|
+
Omnizip::Archive.open('secure.7z', password: 'MyStr0ngP@ssw0rd') do |archive|
|
|
91
|
+
archive.extract_all('decrypted/')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Decrypt ZIP archive
|
|
95
|
+
Omnizip::Zip::File.open('secure.zip', password: 'SecurePassword123') do |zip|
|
|
96
|
+
zip.extract_all('output/')
|
|
97
|
+
end
|
|
98
|
+
----
|
|
99
|
+
|
|
100
|
+
=== Password via Environment Variable
|
|
101
|
+
|
|
102
|
+
[source,ruby]
|
|
103
|
+
----
|
|
104
|
+
# Set password in environment
|
|
105
|
+
ENV['OMNIZIP_PASSWORD'] = 'MyStr0ngP@ssw0rd'
|
|
106
|
+
|
|
107
|
+
# Opens without explicit password parameter
|
|
108
|
+
Omnizip::Archive.open('secure.7z') do |archive|
|
|
109
|
+
archive.extract_all('output/')
|
|
110
|
+
end
|
|
111
|
+
----
|
|
112
|
+
|
|
113
|
+
== Password Management
|
|
114
|
+
|
|
115
|
+
=== Password Strength Validation
|
|
116
|
+
|
|
117
|
+
Ensure strong passwords before encryption:
|
|
118
|
+
|
|
119
|
+
[source,ruby]
|
|
120
|
+
----
|
|
121
|
+
validator = Omnizip::PasswordValidator.new(
|
|
122
|
+
min_length: 12,
|
|
123
|
+
require_uppercase: true,
|
|
124
|
+
require_lowercase: true,
|
|
125
|
+
require_numbers: true,
|
|
126
|
+
require_special: true
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
begin
|
|
130
|
+
validator.validate('weak')
|
|
131
|
+
rescue Omnizip::WeakPasswordError => e
|
|
132
|
+
puts "Password too weak: #{e.message}"
|
|
133
|
+
# Password must be at least 12 characters with uppercase, lowercase, numbers, and special characters
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Use validated password
|
|
137
|
+
validator.validate('MyStr0ng!P@ssw0rd2024') # ✅ Passes
|
|
138
|
+
----
|
|
139
|
+
|
|
140
|
+
=== Secure Password Input
|
|
141
|
+
|
|
142
|
+
Prompt for passwords without echo:
|
|
143
|
+
|
|
144
|
+
[source,ruby]
|
|
145
|
+
----
|
|
146
|
+
require 'io/console'
|
|
147
|
+
|
|
148
|
+
def get_password
|
|
149
|
+
print "Enter password: "
|
|
150
|
+
password = STDIN.noecho(&:gets).chomp
|
|
151
|
+
puts # New line after password entry
|
|
152
|
+
password
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
password = get_password
|
|
156
|
+
Omnizip::Archive.create('secure.7z', password: password) do |archive|
|
|
157
|
+
# Create encrypted archive
|
|
158
|
+
end
|
|
159
|
+
----
|
|
160
|
+
|
|
161
|
+
== Security Best Practices
|
|
162
|
+
|
|
163
|
+
. **Use Strong Passwords**: Minimum 12 characters with mixed case, numbers, and symbols
|
|
164
|
+
. **Prefer 7z Format**: Header encryption hides filenames and structure
|
|
165
|
+
. **Avoid Traditional Encryption**: Use WinZip AES or 7z AES-256 instead
|
|
166
|
+
. **Secure Password Storage**: Never hardcode passwords in source code
|
|
167
|
+
. **Key Derivation**: Use default iterations (524,288) or higher
|
|
168
|
+
. **Test Decryption**: Always verify encrypted archives can be decrypted
|
|
169
|
+
|
|
170
|
+
== Encryption Comparison
|
|
171
|
+
|
|
172
|
+
[cols="2,1,1,1,1"]
|
|
173
|
+
|===
|
|
174
|
+
|Feature |7z AES-256 |WinZip AES |Traditional |Recommendation
|
|
175
|
+
|
|
176
|
+
|**Security Level**
|
|
177
|
+
|Excellent
|
|
178
|
+
|Very Good
|
|
179
|
+
|Weak
|
|
180
|
+
|Use 7z or WinZip AES
|
|
181
|
+
|
|
182
|
+
|**Header Encryption**
|
|
183
|
+
|✅
|
|
184
|
+
|❌
|
|
185
|
+
|❌
|
|
186
|
+
|7z for privacy
|
|
187
|
+
|
|
188
|
+
|**Key Derivation**
|
|
189
|
+
|PBKDF2-SHA256
|
|
190
|
+
|PBKDF2-SHA1
|
|
191
|
+
|CRC check
|
|
192
|
+
|Modern algorithms
|
|
193
|
+
|
|
194
|
+
|**Authentication**
|
|
195
|
+
|HMAC-SHA-256
|
|
196
|
+
|HMAC-SHA-1
|
|
197
|
+
|None
|
|
198
|
+
|Detects tampering
|
|
199
|
+
|
|
200
|
+
|**Compatibility**
|
|
201
|
+
|7-Zip, PeaZip
|
|
202
|
+
|Most tools
|
|
203
|
+
|Universal
|
|
204
|
+
|Consider audience
|
|
205
|
+
|===
|
|
206
|
+
|
|
207
|
+
== Command-Line Usage
|
|
208
|
+
|
|
209
|
+
[source,bash]
|
|
210
|
+
----
|
|
211
|
+
# Create encrypted archive
|
|
212
|
+
omnizip archive create secure.7z files/ \
|
|
213
|
+
--password 'MyStr0ngP@ssw0rd' \
|
|
214
|
+
--encrypt-headers
|
|
215
|
+
|
|
216
|
+
# Extract with password
|
|
217
|
+
omnizip archive extract secure.7z output/ \
|
|
218
|
+
--password 'MyStr0ngP@ssw0rd'
|
|
219
|
+
|
|
220
|
+
# Or prompt for password
|
|
221
|
+
omnizip archive create secure.7z files/ --password
|
|
222
|
+
Enter password: ********
|
|
223
|
+
----
|
|
224
|
+
|
|
225
|
+
== Common Use Cases
|
|
226
|
+
|
|
227
|
+
=== Protect Sensitive Documents
|
|
228
|
+
|
|
229
|
+
[source,ruby]
|
|
230
|
+
----
|
|
231
|
+
# Encrypt sensitive files before cloud storage
|
|
232
|
+
Omnizip::Archive.create(
|
|
233
|
+
'confidential-docs.7z',
|
|
234
|
+
format: :seven_zip,
|
|
235
|
+
password: secure_password,
|
|
236
|
+
encrypt_headers: true,
|
|
237
|
+
compression: :lzma2,
|
|
238
|
+
level: 9
|
|
239
|
+
) do |archive|
|
|
240
|
+
archive.add_directory('contracts/')
|
|
241
|
+
archive.add_directory('financial-records/')
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# Upload to cloud storage
|
|
245
|
+
cloud_storage.upload('confidential-docs.7z')
|
|
246
|
+
----
|
|
247
|
+
|
|
248
|
+
=== Secure Backups
|
|
249
|
+
|
|
250
|
+
[source,ruby]
|
|
251
|
+
----
|
|
252
|
+
# Create encrypted backup with timestamp
|
|
253
|
+
timestamp = Time.now.strftime('%Y%m%d_%H%M%S')
|
|
254
|
+
backup_file = "backup_#{timestamp}.7z"
|
|
255
|
+
|
|
256
|
+
Omnizip::Archive.create(
|
|
257
|
+
backup_file,
|
|
258
|
+
format: :seven_zip,
|
|
259
|
+
password: ENV['BACKUP_PASSWORD'],
|
|
260
|
+
encrypt_headers: true
|
|
261
|
+
) do |archive|
|
|
262
|
+
archive.add_directory('/var/www/app/')
|
|
263
|
+
archive.add_directory('/etc/app-config/')
|
|
264
|
+
end
|
|
265
|
+
----
|
|
266
|
+
|
|
267
|
+
== Troubleshooting
|
|
268
|
+
|
|
269
|
+
=== Wrong Password Error
|
|
270
|
+
|
|
271
|
+
[source,ruby]
|
|
272
|
+
----
|
|
273
|
+
begin
|
|
274
|
+
Omnizip::Archive.open('secure.7z', password: 'wrong') do |archive|
|
|
275
|
+
archive.extract_all('output/')
|
|
276
|
+
end
|
|
277
|
+
rescue Omnizip::DecryptionError => e
|
|
278
|
+
puts "Incorrect password: #{e.message}"
|
|
279
|
+
end
|
|
280
|
+
----
|
|
281
|
+
|
|
282
|
+
=== Unsupported Encryption Method
|
|
283
|
+
|
|
284
|
+
Some older archives may use unsupported encryption:
|
|
285
|
+
|
|
286
|
+
[source,ruby]
|
|
287
|
+
----
|
|
288
|
+
begin
|
|
289
|
+
Omnizip::Archive.open('old-archive.zip') do |archive|
|
|
290
|
+
# ...
|
|
291
|
+
end
|
|
292
|
+
rescue Omnizip::UnsupportedEncryptionError => e
|
|
293
|
+
puts "Encryption method not supported: #{e.message}"
|
|
294
|
+
puts "Try opening with 7-Zip or WinZip first"
|
|
295
|
+
end
|
|
296
|
+
----
|
|
297
|
+
|
|
298
|
+
== See Also
|
|
299
|
+
|
|
300
|
+
* link:../../compatibility.html[Compatibility] - Encryption support across formats
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Advanced Features
|
|
3
|
+
nav_order: 30
|
|
4
|
+
parent: Guides
|
|
5
|
+
has_children: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
== Advanced Features Overview
|
|
9
|
+
|
|
10
|
+
Omnizip provides several advanced features for power users and production deployments.
|
|
11
|
+
|
|
12
|
+
== Available Features
|
|
13
|
+
|
|
14
|
+
[cols="1,3"]
|
|
15
|
+
|===
|
|
16
|
+
|Feature |Description
|
|
17
|
+
|
|
18
|
+
|link:streaming.html[Streaming Operations]
|
|
19
|
+
|Process archives without loading entire files into memory
|
|
20
|
+
|
|
21
|
+
|link:parallel-processing.html[Parallel Processing]
|
|
22
|
+
|Leverage multiple CPU cores for faster compression
|
|
23
|
+
|
|
24
|
+
|link:progress-tracking.html[Progress Tracking]
|
|
25
|
+
|Real-time progress monitoring for long operations
|
|
26
|
+
|
|
27
|
+
|link:encryption.html[Encryption]
|
|
28
|
+
|AES-256 password protection for archives
|
|
29
|
+
|===
|
|
30
|
+
|
|
31
|
+
== Feature Combinations
|
|
32
|
+
|
|
33
|
+
These features can be combined for maximum efficiency:
|
|
34
|
+
|
|
35
|
+
[source,ruby]
|
|
36
|
+
----
|
|
37
|
+
# Combine streaming + parallel + progress
|
|
38
|
+
Omnizip.compress_directory('large_data/', 'backup.7z',
|
|
39
|
+
parallel: true,
|
|
40
|
+
threads: 8
|
|
41
|
+
) do |progress|
|
|
42
|
+
puts "#{progress.percentage}% - #{progress.throughput_mb_s} MB/s"
|
|
43
|
+
end
|
|
44
|
+
----
|
|
45
|
+
|
|
46
|
+
== See Also
|
|
47
|
+
|
|
48
|
+
* link:../compression-algorithms/[Compression Algorithms] - Algorithm-specific features
|
|
49
|
+
* link:../performance-tuning.html[Performance Tuning] - Optimize for your workload
|