A high-performance, secure file compression library with password protection
Project description
rustyzipper
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8430adf3e59516cf10d00eec2896c255a16cc7535bf9b0d265a6cd386cc8645e
|
|
| MD5 |
963bac088961d69d2755bdf9e3b62624
|
|
| BLAKE2b-256 |
f76e690ea35ff1180c72b0f186dd9b7d7db0588c173076deb07e50d6ced8798c
|
Provenance
The following attestation bundles were made for rustyzipper-1.1.1.tar.gz:
Publisher:
release.yml on johnnywale/rustyzip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1.tar.gz -
Subject digest:
8430adf3e59516cf10d00eec2896c255a16cc7535bf9b0d265a6cd386cc8645e - Sigstore transparency entry: 975554332
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9de53ebee7382a9b33c7437b9c14af758fd912b46c53d44256503234a0ddc625
|
|
| MD5 |
8720704e94ed5b92a9f104d1d39d65f9
|
|
| BLAKE2b-256 |
fb1276802c2215bb8f98ae41a64328675f412f7df4393b455ba5b74d5163b4af
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
9de53ebee7382a9b33c7437b9c14af758fd912b46c53d44256503234a0ddc625 - Sigstore transparency entry: 975554381
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl.
File metadata
- Download URL: rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
- Upload date:
- Size: 1.3 MB
- Tags: PyPy, manylinux: glibc 2.12+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e15846dda944a65143a40ea11e781bf76ab334d137d67ae18a0c293162dac1f4
|
|
| MD5 |
b809fdf3b7005aabffa5dbe6c8541ee1
|
|
| BLAKE2b-256 |
65a443660e258738cd4b891a2bce1e0720f057c7c972b9fd106ab13a4abf2b72
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl -
Subject digest:
e15846dda944a65143a40ea11e781bf76ab334d137d67ae18a0c293162dac1f4 - Sigstore transparency entry: 975554406
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl
- Upload date:
- Size: 902.9 kB
- Tags: CPython 3.14t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2bc71e4eb4b49bdc8e9ecb3ebabedf19e4902a76b1e184a0948dad63023c2fc
|
|
| MD5 |
dde09e4a2d8780932213c98982cb81c8
|
|
| BLAKE2b-256 |
206a829683431b19f48fe4789f3dd5401047a2d5aa33f065e140e17c644547bf
|
Provenance
The following attestation bundles were made for rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl:
Publisher:
release.yml on johnnywale/rustyzip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp314-cp314t-win_arm64.whl -
Subject digest:
d2bc71e4eb4b49bdc8e9ecb3ebabedf19e4902a76b1e184a0948dad63023c2fc - Sigstore transparency entry: 975554370
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl
- Upload date:
- Size: 902.7 kB
- Tags: CPython 3.13t, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
209058d441824b0be5b63533f71c8d673f63dc4c5912aa9a4c5cb30fa4883e87
|
|
| MD5 |
60a6c8061e26b7bda6b70cfb0b80f5fd
|
|
| BLAKE2b-256 |
6503c5e3f58e6dc6dbee785d8b5bf4eec3861bfd0a9ec2f76424c704aeb3cd0d
|
Provenance
The following attestation bundles were made for rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl:
Publisher:
release.yml on johnnywale/rustyzip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp313-cp313t-win_arm64.whl -
Subject digest:
209058d441824b0be5b63533f71c8d673f63dc4c5912aa9a4c5cb30fa4883e87 - Sigstore transparency entry: 975554413
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e5799cd67fd03652da4282780e617cea4c6c7ecbe76ea8b90179c53b3cd77f1
|
|
| MD5 |
e6663bd37792c04e134f276b4038d6df
|
|
| BLAKE2b-256 |
4e87bddf25ff9eaf7b18ac1662b5db54d9c1323ca83f114446c5b22254f81187
|
Provenance
The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-win_arm64.whl:
Publisher:
release.yml on johnnywale/rustyzip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-win_arm64.whl -
Subject digest:
7e5799cd67fd03652da4282780e617cea4c6c7ecbe76ea8b90179c53b3cd77f1 - Sigstore transparency entry: 975554368
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff14bc0277f6c53ed7e79b92e97156891f24e621a76074fce46106e9b2e7edde
|
|
| MD5 |
353da7fcf574d531f5642d39db9abbdf
|
|
| BLAKE2b-256 |
96b01860d6c9e4929e5b868e16abd33c73986791828b5acbfb34fb5e5c01e3fd
|
Provenance
The following attestation bundles were made for rustyzipper-1.1.1-cp38-abi3-win_amd64.whl:
Publisher:
release.yml on johnnywale/rustyzip
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-win_amd64.whl -
Subject digest:
ff14bc0277f6c53ed7e79b92e97156891f24e621a76074fce46106e9b2e7edde - Sigstore transparency entry: 975554357
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.8+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63c8bf3681977e2c4faaccbe4821b857a6f977b69418dfce5bce7d529b6bd3d1
|
|
| MD5 |
d7c63f63daa265c6f1cfdad63a9aa9f4
|
|
| BLAKE2b-256 |
edaa752b0e635631dcd04fec79684e502ee6e3e8214d3dcf509e41f71255262c
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
63c8bf3681977e2c4faaccbe4821b857a6f977b69418dfce5bce7d529b6bd3d1 - Sigstore transparency entry: 975554347
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.8+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a10bc2b0205b88b1ca1db5606001f435a8dc7363b6cd5244271215f05d59c7e3
|
|
| MD5 |
1d2ef151ead35af714b1a9d72eef4eb1
|
|
| BLAKE2b-256 |
88dcb7fc2a71660610f622762c5e6549babeb7629ab21b2475e3bcdc5b1111ba
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-musllinux_1_2_aarch64.whl -
Subject digest:
a10bc2b0205b88b1ca1db5606001f435a8dc7363b6cd5244271215f05d59c7e3 - Sigstore transparency entry: 975554392
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8400ca191d96e2c8fa5c0642d9728640ff2fc2a6d90c2a533aa2262e2b3728d
|
|
| MD5 |
649a6f815c16bf44d334f018df78f7ff
|
|
| BLAKE2b-256 |
0898de6ea6b19393a0041784e8241a2166faf06c82552373fc80a81669b0bb88
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
d8400ca191d96e2c8fa5c0642d9728640ff2fc2a6d90c2a533aa2262e2b3728d - Sigstore transparency entry: 975554417
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ ARMv7l
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08bee26d11429867fa415c32385fa8180f8f1ed4c346e5393e8807631e0e2ac5
|
|
| MD5 |
b1b6eab81b1ed73e4d10b922d1c97788
|
|
| BLAKE2b-256 |
dcc1b10e52cb36b5150b08dc276bb3b2f96e64dd94a19316f15135d42f955ffd
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl -
Subject digest:
08bee26d11429867fa415c32385fa8180f8f1ed4c346e5393e8807631e0e2ac5 - Sigstore transparency entry: 975554388
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f50245c10094565b6a15c8130b65e0b2a02a82bb34208be2890c1dfa0d6f366d
|
|
| MD5 |
04cb6a2b7dba6ebb1f674ccc67c8ea17
|
|
| BLAKE2b-256 |
df1e2952968fdbb479aae532ae50f02a27b0f12bd3e182eedf26ca5a7af5c43b
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
f50245c10094565b6a15c8130b65e0b2a02a82bb34208be2890c1dfa0d6f366d - Sigstore transparency entry: 975554337
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
File details
Details for the file rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.
File metadata
- Download URL: rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.8+, manylinux: glibc 2.12+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f83c38ff216be7ac544d932d96bac09d6ec1665bf0332929723851033059099
|
|
| MD5 |
cdce6d6f743fc5cf62f6132cd79ea2c5
|
|
| BLAKE2b-256 |
e20b3bcf87c6a61d8bcefb8c318a80efb90de7e657a54773b2d74dbf6b5a461f
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl -
Subject digest:
2f83c38ff216be7ac544d932d96bac09d6ec1665bf0332929723851033059099 - Sigstore transparency entry: 975554351
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type:
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
- Download URL: rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.8+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
beae468f85ffa8a197a5dc53ad6cfa23e5c55390f1e37b45df480964a7dbe549
|
|
| MD5 |
7d49db526b4d334080290817499d08a0
|
|
| BLAKE2b-256 |
8db488bd6fbcaadc27405c2c6dc27c5e874cd27b616ff5241a3a1af33c6f9b1f
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
rustyzipper-1.1.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
beae468f85ffa8a197a5dc53ad6cfa23e5c55390f1e37b45df480964a7dbe549 - Sigstore transparency entry: 975554400
- Sigstore integration time:
-
Permalink:
johnnywale/rustyzip@086c01972b34e001f972927cce564900a0c8ad42 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/johnnywale
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@086c01972b34e001f972927cce564900a0c8ad42 -
Trigger Event:
release
-
Statement type: