Skip to main content

A high-performance, secure file compression library with password protection

Project description

rustyzipper

CI PyPI Python License

A high-performance, secure file compression library with password protection, written in Rust with Python bindings.

rustyzipper is a modern, actively maintained replacement for pyminizip, addressing critical security vulnerabilities while more encryption options.

Why rustyzipper?

Problems with pyminizip:

  • Abandoned (last update years ago)
  • Security vulnerabilities (CVE-2022-37434)
  • Outdated zlib version
  • No AES-256 support

rustyzipper advantages:

  • Actively maintained with regular updates
  • No known security vulnerabilities
  • Modern zlib (latest version)
  • AES-256 encryption for sensitive data
  • Drop-in pyminizip replacement
  • Windows Explorer compatible (ZipCrypto option)
  • Zero Python dependencies (fully self-contained)

Installation

pip install rustyzipper

Quick Start

Modern API (Recommended)

from rustyzipper import compress_file, decompress_file, EncryptionMethod, SecurityPolicy

# Secure compression with AES-256 (recommended for sensitive data)
compress_file("document.pdf", "secure.zip", password="MySecureP@ssw0rd")

# Windows Explorer compatible (weak security, use only for non-sensitive files)
compress_file(
    "public.pdf",
    "compatible.zip",
    password="simple123",
    encryption=EncryptionMethod.ZIPCRYPTO,
    suppress_warning=True
)

# Decompress with default security (protected against ZIP bombs)
decompress_file("secure.zip", "extracted/", password="MySecureP@ssw0rd")

# Decompress with custom security policy
policy = SecurityPolicy(max_size="10GB", max_ratio=1000)
decompress_file("large.zip", "extracted/", policy=policy)

# Decompress with unlimited policy (for trusted archives only)
decompress_file("trusted.zip", "out/", policy=SecurityPolicy.unlimited())

pyminizip Compatibility (No Code Changes Required)

# Change this line:
# import pyminizip

# To this:
from rustyzipper.compat import pyminizip

# Rest of your code works as-is!
pyminizip.compress("file.txt", None, "output.zip", "password", 5)
pyminizip.uncompress("output.zip", "password", "extracted/", 0)

Features

Encryption Methods

Method Security Compatibility Use Case
AES-256 Strong 7-Zip, WinRAR, WinZip Sensitive data
ZipCrypto Weak Windows Explorer, All tools Maximum compatibility
None None All tools Non-sensitive data

Compression Levels

from rustyzipper import CompressionLevel

CompressionLevel.STORE    # No compression (fastest)
CompressionLevel.FAST     # Fast compression
CompressionLevel.DEFAULT  # Balanced (recommended)
CompressionLevel.BEST     # Maximum compression (slowest)

API Reference

compress_file

compress_file(
    input_path: str,
    output_path: str,
    password: str | None = None,
    encryption: EncryptionMethod = EncryptionMethod.AES256,
    compression_level: CompressionLevel = CompressionLevel.DEFAULT,
    suppress_warning: bool = False
) -> None

compress_files

compress_files(
    input_paths: list[str],
    output_path: str,
    password: str | None = None,
    encryption: EncryptionMethod = EncryptionMethod.AES256,
    compression_level: CompressionLevel = CompressionLevel.DEFAULT,
    prefixes: list[str | None] | None = None
) -> None

compress_directory

compress_directory(
    input_dir: str,
    output_path: str,
    password: str | None = None,
    encryption: EncryptionMethod = EncryptionMethod.AES256,
    compression_level: CompressionLevel = CompressionLevel.DEFAULT,
    include_patterns: list[str] | None = None,
    exclude_patterns: list[str] | None = None
) -> None

decompress_file

decompress_file(
    input_path: str,
    output_path: str,
    password: str | None = None,
    *,
    policy: SecurityPolicy | None = None
) -> None

SecurityPolicy

# Create a policy with custom limits
policy = SecurityPolicy(
    max_size: int | str = None,    # e.g., "10GB", "500MB", or bytes
    max_ratio: int = None,          # e.g., 1000 for 1000:1
    allow_symlinks: bool = False
)

# Factory methods
SecurityPolicy.unlimited()           # No limits (use with trusted archives only)
SecurityPolicy.strict()              # 100MB max, 100:1 ratio (for untrusted content)
SecurityPolicy.strict("50MB", 50)    # Custom strict limits

Examples

Compress a Directory with Filters

from rustyzipper import compress_directory, EncryptionMethod

compress_directory(
    "my_project/",
    "backup.zip",
    password="BackupP@ss",
    encryption=EncryptionMethod.AES256,
    include_patterns=["*.py", "*.md", "*.json"],
    exclude_patterns=["__pycache__", "*.pyc", ".git", "node_modules"]
)

Compress Multiple Files

from rustyzipper import compress_files

compress_files(
    ["report.pdf", "data.csv", "summary.txt"],
    "documents.zip",
    password="secret",
    prefixes=["reports", "data", "reports"]  # Archive paths
)

In-Memory and Streaming Compression

rustyzipper provides multiple APIs for different use cases, from simple in-memory operations to memory-efficient streaming for large files.

In-Memory Compression (compress_bytes / decompress_bytes)

Compress and decompress data directly in memory without filesystem I/O. Ideal for web applications, APIs, and processing data in memory.

from rustyzipper import compress_bytes, decompress_bytes, EncryptionMethod

# Compress multiple files to bytes
files = [
    ("hello.txt", b"Hello, World!"),
    ("data/config.json", b'{"key": "value"}'),
    ("binary.bin", bytes(range(256))),
]
zip_data = compress_bytes(files, password="secret")

# Send over network, store in database, etc.
# ...

# Decompress back to list of (filename, content) tuples
extracted = decompress_bytes(zip_data, password="secret")
for filename, content in extracted:
    print(f"{filename}: {len(content)} bytes")

Note: These functions load all data into memory. For large files, use streaming APIs below.

Streaming Compression (compress_stream / decompress_stream)

Stream data through file-like objects. Compresses in 64KB chunks to reduce memory usage.

import io
from rustyzipper import compress_stream, decompress_stream, EncryptionMethod

# Compress from file handles to BytesIO
output = io.BytesIO()
with open("large_file.bin", "rb") as f1, open("another.txt", "rb") as f2:
    compress_stream(
        [("large_file.bin", f1), ("another.txt", f2)],
        output,
        password="secret"
    )

zip_data = output.getvalue()

# Decompress from BytesIO
output.seek(0)
files = decompress_stream(output, password="secret")

# Or stream directly to/from files
with open("output.zip", "wb") as out:
    with open("input.txt", "rb") as inp:
        compress_stream([("input.txt", inp)], out, encryption=EncryptionMethod.NONE)

Per-File Streaming Iterator (open_zip_stream)

For processing large ZIP archives with many files, use the streaming iterator to decompress one file at a time. This keeps only one decompressed file in memory at any moment.

from rustyzipper import open_zip_stream, open_zip_stream_from_file

# From bytes
zip_data = open("archive.zip", "rb").read()
for filename, content in open_zip_stream(zip_data, password="secret"):
    print(f"Processing {filename}: {len(content)} bytes")
    process_file(content)
    # Previous file's content is garbage collected

# From file handle
with open("archive.zip", "rb") as f:
    for filename, content in open_zip_stream_from_file(f):
        process_file(content)

# Random access and inspection
reader = open_zip_stream(zip_data)
print(f"Files: {reader.namelist()}")        # List all files
print(f"Count: {len(reader)}")              # Number of files
content = reader.read("specific_file.txt")  # Extract by name

Memory Comparison

Function ZIP Data Decompressed Files Best For
decompress_bytes() All in memory All at once Small archives
decompress_stream() Streamed All at once Large ZIP, small files
open_zip_stream() All in memory One at a time Many files, ZIP fits in RAM
open_zip_stream_from_file() Streamed One at a time Huge ZIP files

Choosing the Right Function

Is your ZIP file small (< 100MB)?
├── Yes → Use decompress_bytes() or open_zip_stream()
└── No → Is the ZIP itself too large for memory?
    ├── Yes → Use open_zip_stream_from_file() (true streaming)
    └── No → Use open_zip_stream() (ZIP in memory, files streamed)

Example: 10GB ZIP with 100 files (100MB each when decompressed)

Function Peak Memory
decompress_bytes() ~10GB (all decompressed at once)
open_zip_stream() ~compressed size + 100MB (one file at a time)
open_zip_stream_from_file() ~100MB only (true streaming)

API Reference

compress_bytes

compress_bytes(
    files: list[tuple[str, bytes]],
    password: str | None = None,
    encryption: EncryptionMethod = EncryptionMethod.AES256,
    compression_level: CompressionLevel = CompressionLevel.DEFAULT,
    suppress_warning: bool = False
) -> bytes

decompress_bytes

decompress_bytes(
    data: bytes,
    password: str | None = None
) -> list[tuple[str, bytes]]

compress_stream

compress_stream(
    files: list[tuple[str, BinaryIO]],
    output: BinaryIO,
    password: str | None = None,
    encryption: EncryptionMethod = EncryptionMethod.AES256,
    compression_level: CompressionLevel = CompressionLevel.DEFAULT,
    suppress_warning: bool = False
) -> None

decompress_stream

decompress_stream(
    input: BinaryIO,
    password: str | None = None
) -> list[tuple[str, bytes]]

open_zip_stream

open_zip_stream(
    data: bytes,
    password: str | None = None
) -> ZipStreamReader

# ZipStreamReader supports:
# - Iteration: for filename, content in reader
# - len(reader): Number of files
# - reader.namelist(): List of filenames
# - reader.read(name): Extract specific file
# - reader.file_count: Number of files (property)
# - reader.total_entries: Total entries including directories (property)

open_zip_stream_from_file

open_zip_stream_from_file(
    input: BinaryIO,
    password: str | None = None
) -> ZipFileStreamReader

# ZipFileStreamReader supports the same interface as ZipStreamReader
# but reads directly from the file handle (true streaming).
# NOTE: File handle must remain open during iteration!

Usage example:

from rustyzipper import open_zip_stream_from_file

# True streaming - even 100GB ZIP files work with minimal memory
with open("huge_archive.zip", "rb") as f:
    for filename, content in open_zip_stream_from_file(f):
        process_file(content)  # Only one file in memory at a time

Security Features

rustyzipper is secure by default with built-in protection against common ZIP vulnerabilities.

Built-in Protections

Protection Default Description
ZIP Bomb (Size) 2 GB max Prevents extraction of archives that decompress to massive sizes
ZIP Bomb (Ratio) 500:1 max Detects suspiciously high compression ratios
Path Traversal Always on Blocks ../ attacks that could write outside target directory
Symlinks Blocked Prevents symlink-based escape attacks
Memory Zeroization Active Passwords are securely erased from memory after use
Thread Pool Capping Auto Dedicated thread pool prevents CPU starvation

Compat API Security Settings

The uncompress() function supports optional security parameters while maintaining full backward compatibility:

from rustyzipper.compat import pyminizip

# Basic usage - protected by secure defaults (2GB/500:1 limits)
pyminizip.uncompress("archive.zip", "password", "output/", 0)

# Disable size limit for known-large archives
pyminizip.uncompress("large.zip", "password", "output/", 0, max_size=0)

# Custom limits for specific use cases
pyminizip.uncompress(
    "archive.zip",
    "password",
    "output/",
    0,
    max_size=10 * 1024 * 1024 * 1024,  # 10 GB
    max_ratio=1000                      # Allow 1000:1 compression ratio
)

# Full parameter list
pyminizip.uncompress(
    src,           # Source ZIP path
    password,      # Password (or None)
    dst,           # Destination directory
    withoutpath,   # 0=preserve paths, 1=flatten
    max_size=None, # Max decompressed size in bytes (default: 2GB, 0=disable)
    max_ratio=None,# Max compression ratio (default: 500, 0=disable)
    allow_symlinks=False  # Allow symlink extraction (default: False)
)

Security Settings Summary

Parameter Default Description
max_size 2 GB Maximum total decompressed size. Set to 0 to disable.
max_ratio 500 Maximum compression ratio. Set to 0 to disable.
allow_symlinks False Whether to extract symbolic links (reserved for future use).

Handling ZIP Bomb Errors

from rustyzipper.compat import pyminizip
from rustyzipper import RustyZipError

try:
    pyminizip.uncompress("suspicious.zip", None, "output/", 0)
except RustyZipError as e:
    if "ZipBomb" in str(e):
        print("Archive exceeds safe decompression limits")
    elif "SuspiciousCompressionRatio" in str(e):
        print("Archive has suspiciously high compression ratio")

Security Guidelines

DO:

  • Use AES-256 for sensitive data
  • Use strong passwords (12+ characters, mixed case, numbers, symbols)
  • Store passwords in a password manager
  • Use unique passwords for each archive
  • Keep default security limits unless you have a specific reason to change them

DON'T:

  • Use ZipCrypto for sensitive data (it's weak!)
  • Use weak or common passwords
  • Share passwords via insecure channels
  • Reuse passwords across archives
  • Disable security limits (max_size=0) without understanding the risks

Platform Support

Platform Architecture Status
Windows 10+ x64, x86, ARM64 Supported
Linux (glibc) x64, ARM64 Supported
macOS 11+ x64, ARM64 (Apple Silicon) Supported

Python Version Support

  • Python 3.8+

Building from Source

Prerequisites

  • Rust 1.70+
  • Python 3.8+
  • maturin (pip install maturin)

Build

git clone https://github.com/johnnywale/rustyzipper.git
cd rustyzipper

# Development build
maturin develop

# Release build
maturin build --release

Run Tests

# Rust tests
cargo test

# Python tests
pip install pytest
pytest python/tests/

Comparison with pyminizip

Feature pyminizip rustyzipper
Maintenance Status Abandoned Active
Security Vulnerabilities Multiple CVEs None known
zlib Version Outdated Latest
AES-256 Support No Yes
Memory Safety C/C++ risks Rust guarantees
Windows Explorer Support Yes (ZipCrypto) Yes (ZipCrypto)
API Compatibility N/A Drop-in replacement
Installation Requires compiler Prebuilt wheels
Type Hints No Yes

License

Dual-licensed under MIT or Apache 2.0 at your option.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development Setup

# Clone the repository
git clone https://github.com/johnnywale/rustyzipper.git
cd rustyzipper

# Install development dependencies
pip install maturin pytest

# Build and install in development mode
maturin develop

# Run tests
cargo test                    # Rust tests
pytest python/tests/ -v       # Python tests

Supported Platforms

Platform Architectures
Linux (glibc/musl) x86_64, aarch64, armv7, i686
Windows x86_64, i686
macOS x86_64, aarch64 (Apple Silicon)

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rustyzipper-1.1.1.tar.gz (183.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.3 MB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686

rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl (902.9 kB view details)

Uploaded CPython 3.14tWindows ARM64

rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl (902.7 kB view details)

Uploaded CPython 3.13tWindows ARM64

rustyzipper-1.1.1-cp38-abi3-win_arm64.whl (920.0 kB view details)

Uploaded CPython 3.8+Windows ARM64

rustyzipper-1.1.1-cp38-abi3-win_amd64.whl (988.5 kB view details)

Uploaded CPython 3.8+Windows x86-64

rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARMv7l

rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl (1.3 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.12+ i686

rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (2.1 MB view details)

Uploaded CPython 3.8+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file rustyzipper-1.1.1.tar.gz.

File metadata

  • Download URL: rustyzipper-1.1.1.tar.gz
  • Upload date:
  • Size: 183.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustyzipper-1.1.1.tar.gz
Algorithm Hash digest
SHA256 8430adf3e59516cf10d00eec2896c255a16cc7535bf9b0d265a6cd386cc8645e
MD5 963bac088961d69d2755bdf9e3b62624
BLAKE2b-256 f76e690ea35ff1180c72b0f186dd9b7d7db0588c173076deb07e50d6ced8798c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1.tar.gz:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9de53ebee7382a9b33c7437b9c14af758fd912b46c53d44256503234a0ddc625
MD5 8720704e94ed5b92a9f104d1d39d65f9
BLAKE2b-256 fb1276802c2215bb8f98ae41a64328675f412f7df4393b455ba5b74d5163b4af

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 e15846dda944a65143a40ea11e781bf76ab334d137d67ae18a0c293162dac1f4
MD5 b809fdf3b7005aabffa5dbe6c8541ee1
BLAKE2b-256 65a443660e258738cd4b891a2bce1e0720f057c7c972b9fd106ab13a4abf2b72

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 d2bc71e4eb4b49bdc8e9ecb3ebabedf19e4902a76b1e184a0948dad63023c2fc
MD5 dde09e4a2d8780932213c98982cb81c8
BLAKE2b-256 206a829683431b19f48fe4789f3dd5401047a2d5aa33f065e140e17c644547bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 209058d441824b0be5b63533f71c8d673f63dc4c5912aa9a4c5cb30fa4883e87
MD5 60a6c8061e26b7bda6b70cfb0b80f5fd
BLAKE2b-256 6503c5e3f58e6dc6dbee785d8b5bf4eec3861bfd0a9ec2f76424c704aeb3cd0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-win_arm64.whl.

File metadata

  • Download URL: rustyzipper-1.1.1-cp38-abi3-win_arm64.whl
  • Upload date:
  • Size: 920.0 kB
  • Tags: CPython 3.8+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 7e5799cd67fd03652da4282780e617cea4c6c7ecbe76ea8b90179c53b3cd77f1
MD5 e6663bd37792c04e134f276b4038d6df
BLAKE2b-256 4e87bddf25ff9eaf7b18ac1662b5db54d9c1323ca83f114446c5b22254f81187

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-win_arm64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: rustyzipper-1.1.1-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 988.5 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ff14bc0277f6c53ed7e79b92e97156891f24e621a76074fce46106e9b2e7edde
MD5 353da7fcf574d531f5642d39db9abbdf
BLAKE2b-256 96b01860d6c9e4929e5b868e16abd33c73986791828b5acbfb34fb5e5c01e3fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-win_amd64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 63c8bf3681977e2c4faaccbe4821b857a6f977b69418dfce5bce7d529b6bd3d1
MD5 d7c63f63daa265c6f1cfdad63a9aa9f4
BLAKE2b-256 edaa752b0e635631dcd04fec79684e502ee6e3e8214d3dcf509e41f71255262c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a10bc2b0205b88b1ca1db5606001f435a8dc7363b6cd5244271215f05d59c7e3
MD5 1d2ef151ead35af714b1a9d72eef4eb1
BLAKE2b-256 88dcb7fc2a71660610f622762c5e6549babeb7629ab21b2475e3bcdc5b1111ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8400ca191d96e2c8fa5c0642d9728640ff2fc2a6d90c2a533aa2262e2b3728d
MD5 649a6f815c16bf44d334f018df78f7ff
BLAKE2b-256 0898de6ea6b19393a0041784e8241a2166faf06c82552373fc80a81669b0bb88

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 08bee26d11429867fa415c32385fa8180f8f1ed4c346e5393e8807631e0e2ac5
MD5 b1b6eab81b1ed73e4d10b922d1c97788
BLAKE2b-256 dcc1b10e52cb36b5150b08dc276bb3b2f96e64dd94a19316f15135d42f955ffd

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f50245c10094565b6a15c8130b65e0b2a02a82bb34208be2890c1dfa0d6f366d
MD5 04cb6a2b7dba6ebb1f674ccc67c8ea17
BLAKE2b-256 df1e2952968fdbb479aae532ae50f02a27b0f12bd3e182eedf26ca5a7af5c43b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 2f83c38ff216be7ac544d932d96bac09d6ec1665bf0332929723851033059099
MD5 cdce6d6f743fc5cf62f6132cd79ea2c5
BLAKE2b-256 e20b3bcf87c6a61d8bcefb8c318a80efb90de7e657a54773b2d74dbf6b5a461f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 beae468f85ffa8a197a5dc53ad6cfa23e5c55390f1e37b45df480964a7dbe549
MD5 7d49db526b4d334080290817499d08a0
BLAKE2b-256 8db488bd6fbcaadc27405c2c6dc27c5e874cd27b616ff5241a3a1af33c6f9b1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on johnnywale/rustyzip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page