Skip to main content

oxifish

Python bindings for the RustCrypto Twofish block cipher implementation.

A session-oriented API: construct a TwofishKey once, then either call its one-shot encrypt/decrypt (the dominant case) or open a streaming TwofishSession for incremental processing. Padding, IV handling, and chunk buffering are handled internally — there is no separate pad()/ unpad() step and no manual block-alignment bookkeeping.

Which construct do I need? If you have Twofish-encrypted data from KeePass/KDBX, OpenPGP, or a dm-crypt twofish-cbc-essiv:sha256 volume — TwofishKey (below). If you have a VeraCrypt volume, a TrueCrypt volume (5.0 or later), or a dm-crypt/LUKS twofish-xts-plain64 volume — TwofishXTS. If you're migrating off the dead PyPI twofish package — see "Migrating from the twofish package".

Installation

pip install oxifish

Usage

One-shot (the hot path)

The KeePass use case — the IV lives in the KDBX header, so decrypting is one line:

from oxifish import TwofishKey

derived_key = bytes(range(32))  # stand-in for a KeePass-derived key
key = TwofishKey(derived_key)  # 16, 24, or 32 bytes

# In real usage, `ciphertext` and `header_iv` come from the KDBX file --
# synthesized here via a real encrypt() call so this block runs standalone.
header_iv, ciphertext = key.encrypt(b"a secret message")
plaintext = key.decrypt(ciphertext, iv=header_iv)  # PKCS7 padding by default

Encrypting without an IV of your own auto-generates one (via the OS CSPRNG) and returns it alongside the ciphertext — the two values that must travel together:

iv, ciphertext = key.encrypt(plaintext)

# Store IV with ciphertext (IV is not secret)
encrypted_message = iv + ciphertext

Supplying your own IV returns bare ciphertext bytes instead (symmetric with decrypt). In practice "your own IV" comes from an existing source (e.g. a KDBX header) rather than being hand-generated — omitting iv and letting encrypt generate one already does that safely; this fence draws a fresh one only so it runs standalone:

import secrets

from oxifish import Padding

aligned_data = bytes(range(32))  # Padding.NONE requires exact block multiples
iv2 = secrets.token_bytes(16)  # a fresh IV -- never reuse `iv` from above
ct = key.encrypt(aligned_data, iv=iv2, padding=Padding.NONE)

Modes

CBC (the default), CTR, CFB, and OFB are selected via the mode parameter on encrypt/decrypt/encryptor/decryptor:

from oxifish import Mode

iv, ciphertext = key.encrypt(plaintext, Mode.CTR)

For CTR, iv is the full 16-byte initial counter block (big-endian 128-bit increment), not a nonce+counter split — unless you pass ctr_width, which selects a narrower, NIST-style nonce||counter split: only the low ctr_width bits of iv increment, matching legacy formats built on PyCryptodome-style Counter(nonce=..., initial_value=...) layouts (the dead twofish package's own users' homegrown CTR):

nonce8 = bytes(range(8))
iv3 = nonce8 + (0).to_bytes(8, "big")  # 8-byte nonce || 8-byte BE counter
ciphertext64 = key.encrypt(aligned_data, Mode.CTR, iv=iv3, ctr_width=64)
key.decrypt(ciphertext64, Mode.CTR, iv=iv3, ctr_width=64)

ctr_width defaults to 128 (today's behavior: the whole IV is the counter) and must be 32, 64, or 128; passing it for any mode other than CTR raises ValueError. The low ctr_width bits wrap through zero as they increment — that's expected, matching every real split-counter format — but a single stream (one-shot, or summed across a session's update() calls) is limited to 2**ctr_width - 1 blocks; asking for more raises ValueError rather than silently reusing keystream. At ctr_width=128 that limit is unreachable by any real payload, so default behavior is unchanged.

Never reuse an iv under the same key. For CTR and OFB this is catastrophic: the keystream repeats, and XORing the two ciphertexts recovers the XOR of the two plaintexts. CFB carries the same risk up to the first differing block, after which the feedback register diverges. For CBC, IV reuse leaks whether two messages share a common prefix. Omitting iv and letting encrypt/encryptor auto-generate one via the OS CSPRNG (see above) already does the right thing — only supply your own IV when correctness requires it (e.g. KDBX interop, where the IV must match the header), and never hand the same one to two encryptions under one key.

Padding

padding defaults to PKCS7 for CBC. Stream modes (CTR/CFB/OFB) never take padding — passing any explicit value (including Padding.NONE) raises ValueError, since there is nothing to pad.

from oxifish import Padding

data = bytes(range(32))  # block-aligned so the Padding.NONE call below is valid too
key.encrypt(data, padding=Padding.PKCS7)   # default for CBC; iv omitted -> fresh each call
key.encrypt(data, padding=Padding.NONE)    # data must already be block-aligned
key.encrypt(data, padding=Padding.ISO7816)
key.encrypt(data, padding=Padding.ANSIX923)
key.encrypt(data, padding=Padding.ZEROS)   # ambiguous if plaintext ends in 0x00

Streaming

For processing data incrementally, open a session bound to one mode, one IV, and one padding policy:

chunk1, chunk2 = b"first chunk of ", b"the message"

enc = key.encryptor(Mode.CFB)  # iv omitted -> fresh IV auto-generated, readable via enc.iv
ciphertext = enc.update(chunk1) + enc.update(chunk2) + enc.finalize()

dec = key.decryptor(Mode.CFB, iv=enc.iv)
plaintext = dec.update(ciphertext) + dec.finalize()

update() accepts chunks of any size — internal buffering handles alignment. Padded-decrypt sessions withhold the most recent complete block until finalize(), since it may carry padding. A session is single-use: calling update()/finalize() after finalize() raises RuntimeError.

ECB

ECB does not provide semantic security and is reachable only through its own factories — never through mode=:

from oxifish import Padding

block = bytes(range(16))  # ECB processes exactly one block here
ciphertext = key.ecb_encryptor(padding=Padding.NONE).finalize(block)
plaintext = key.ecb_decryptor(padding=Padding.NONE).finalize(ciphertext)

finalize(data) accepting an argument is what keeps this a single expression, since ECB has no dedicated one-shot method.

Warning: ECB mode leaks equal-block plaintext patterns at any length — nothing enforces a single-block limit, so a caller can push an arbitrarily large payload through ecb_encryptor/ecb_decryptor and get full pattern leakage across it. The dedicated factories gate discoverability (ECB is unreachable via the shared mode= parameter), not payload size; keeping ECB use to single blocks is on the caller. Restrict actual use to single blocks (e.g. known-answer tests) or explicit interop.

XTS (disk-volume encryption)

TwofishXTS is a structurally separate construct from everything above — not reachable via Mode — for VeraCrypt, TrueCrypt (5.0 or later), and dm-crypt/LUKS twofish-xts-plain64 volumes. It takes one concatenated double-length key instead of a single key, a per-call tweak (the data-unit/sector number) instead of an IV, and no padding parameter — ciphertext stealing handles data units that aren't a multiple of 16 bytes, so len(ciphertext) == len(data) always. It is one-shot only: XTS is random-access by construction (every data unit is encrypted/decrypted independently), so there is no streaming session.

from oxifish import TwofishXTS

# One concatenated key: the first half drives the data cipher, the second
# half drives the tweak (IEEE 1619's Key1 || Key2 order) -- e.g. VeraCrypt's
# volume-header "master keydata" field is exactly this shape. The two
# halves must differ; each half is independently 16, 24, or 32 bytes.
xts_key = bytes(range(32)) + bytes(range(32, 64))
xts = TwofishXTS(xts_key)

sector = bytes(512)  # VeraCrypt's data unit is always 512 bytes,
                      # regardless of the drive's physical sector size
byte_offset = 512 * 42
data_unit = byte_offset // 512  # NOT the OS's reported sector number

ciphertext = xts.encrypt(sector, tweak=data_unit)
plaintext = xts.decrypt(ciphertext, tweak=data_unit)

The tweak is a position, not a nonce. Unlike every IV-taking mode above, reusing the same tweak to re-encrypt the same data unit is correct — that's what a tweakable mode is for. The misuse case is the wrong tweak for a position (silent garbage plaintext, no error), not a repeated one. Do not carry the "never reuse an IV" rule from the rest of this README over to tweak=; the fence above has no IV and is intentionally exempt from that rule.

Migrating from the twofish package

The PyPI twofish package is archived upstream and broken on Python 3.12+. Its entire API was single-block encrypt/decrypt — callers built their own modes on top of it. The migration target is the same bare block primitive shown above: ecb_encryptor/ecb_decryptor with Padding.NONE. Composing modes yourself on top of a raw block primitive is almost always a mistake (that's why this library hides one behind Mode/encrypt instead); this construct exists for known-answer tests and mechanical migration, not for new designs.

from oxifish import Padding

# One block (the KAT / known-answer shape -- what `twofish.encrypt()` did):
block_in = bytes(range(16))  # exactly one block
block_out = key.ecb_encryptor(padding=Padding.NONE).finalize(block_in)

# Many blocks (the real migration shape): ONE session, reused.
# ECB no-padding sessions flush eagerly -- update() returns each block
# immediately -- so a fresh session per block works but wastes a
# construction + FFI crossing per call.
migration_blocks = [bytes([i]) * 16 for i in range(4)]
enc_session = key.ecb_encryptor(padding=Padding.NONE)
migrated_ciphertext = (
    b"".join(enc_session.update(b) for b in migration_blocks) + enc_session.finalize()
)

# Decrypt direction: the same one-session-reused shape.
dec_session = key.ecb_decryptor(padding=Padding.NONE)
migrated_plaintext = (
    b"".join(
        dec_session.update(migrated_ciphertext[i : i + 16])
        for i in range(0, len(migrated_ciphertext), 16)
    )
    + dec_session.finalize()
)

Errors

  • ValueError — invalid key/IV length, an unrecognized mode/padding string (including "ecb", which is reachable only via the ecb_* factories), a misaligned data length when padding=Padding.NONE, an explicit padding on a stream mode, an invalid ctr_width (must be 32, 64, or 128) or ctr_width on a non-CTR mode, or CTR keystream exhaustion (2**ctr_width - 1 blocks per stream — unreachable at the default ctr_width=128). For TwofishXTS: a key length outside {32, 48, 64} bytes, equal key halves, a data unit outside 16 bytes to 16 MiB, or a tweak outside 0 <= tweak < 2**128.
  • DecryptionError (a ValueError subclass) — invalid or corrupted padded ciphertext. One fixed message closes the error-string side channel; this is not a constant-time guarantee (Twofish's key-dependent S-boxes are inherently non-constant-time). Wrong key, wrong IV, or wrong mode on unpadded data is not detected — it silently yields garbage plaintext, which is inherent to unauthenticated ciphers. If an attacker can submit chosen ciphertexts and observe whether DecryptionError is raised, that accept/reject channel is a padding oracle (a Vaudenay-style attack on CBC padding), regardless of the message-uniformity work above — the only real defense is encrypt-then-MAC with the MAC verified before any decryption is attempted, never decrypt-then-check.
  • RuntimeError — raised by update()/finalize() on an already-finalized session; by concurrent access to the same session from two threads (PyO3's borrow-check error, distinct from the finalized-session message); and, rarely, if the OS CSPRNG fails during auto-generated IV creation.

Security

This library is primarily intended for compatibility with existing systems that require Twofish, such as KeePass databases. It implements no authentication (AEAD) — callers needing integrity should use an outer MAC, as KDBX does.

Note: Twofish is not constant-time due to key-dependent S-boxes. This is fine for local file decryption but not suitable for server-side encryption where timing attacks are feasible. For new projects, prefer AES-GCM or ChaCha20-Poly1305.

See SECURITY.md for vulnerability reporting and details on key/IV zeroization.

Development

Requires Rust and Python 3.11+.

# Install Rust if you haven't
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install uv if you haven't
curl -LsSf https://astral.sh/uv/install.sh | sh

# Build the extension and sync dev dependencies
uv sync --dev

# Run tests
uv run pytest

License

MIT License. See LICENSE for details.

This project uses the RustCrypto twofish crate which is dual-licensed under MIT/Apache-2.0. We use it under the MIT license.

Metadata

Release files for oxifish 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oxifish 0.3.0
File Size Uploaded Provenance
oxifish-0.3.0.tar.gz 279.0 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for oxifish 0.3.0
File
oxifish-0.3.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
oxifish-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
oxifish-0.3.0-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
oxifish-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
oxifish-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
oxifish-0.3.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.14 CPython 3.14 Linux glibc 2.5+ x86-32 Details
oxifish-0.3.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
oxifish-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
oxifish-0.3.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
oxifish-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
oxifish-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
oxifish-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
oxifish-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
oxifish-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.13 CPython 3.13 Linux glibc 2.5+ x86-32 Details
oxifish-0.3.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
oxifish-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
oxifish-0.3.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
oxifish-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
oxifish-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
oxifish-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
oxifish-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
oxifish-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-32 Details
oxifish-0.3.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
oxifish-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
oxifish-0.3.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
oxifish-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details
oxifish-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ ARM64 Details
oxifish-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
oxifish-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
oxifish-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.11 CPython 3.11 Linux glibc 2.5+ x86-32 Details
oxifish-0.3.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
oxifish-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details

Total release size: 10.8 MB

Release files / oxifish-0.3.0.tar.gz

Download URL oxifish-0.3.0.tar.gz
Size 279.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e90b9a54a80cb82a4bdf91fd377b6cd82b1ee31d7949b03ba10e18f415fb8e83
BLAKE2b-256 checksum
How to use checksums
1a2642c73eda97eda0daf1af7833ddbbf8258d8a189aaedd2a2ac440be00658e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-win_amd64.whl

Download URL oxifish-0.3.0-cp314-cp314-win_amd64.whl
Size 181.4 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
6fdc09d0dadff6d20aa731463d06fc5e5357eb58d3588b6a21ba26348582eb80
BLAKE2b-256 checksum
How to use checksums
a7df0f57eb5b6d1a25c001b861a45df52f465121bfe6c3fe2f2b7fcda0f8d07b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL oxifish-0.3.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 510.4 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
3ac9d0a153decd9a89431038aaab7803d0a531c7213f065bbd46d9852b248060
BLAKE2b-256 checksum
How to use checksums
9663d5d2548ffef5902a549e7b28ba654f629e763dd9a660bb690b9a644447ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL oxifish-0.3.0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 472.6 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
e8d12aefd60184dd917ae173db01f12e01af12024fe9c9b87a167a4ea7d01c5b
BLAKE2b-256 checksum
How to use checksums
4aeb7a85d2149d4cccf0cb8d44914f9fb3175b7fc5a9dc55eb6f41216cc3565b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oxifish-0.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 299.0 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
0bd676e22c581184f74b3355df705e4b745545c996f8e8d1a50e31779378e187
BLAKE2b-256 checksum
How to use checksums
e69d9cda7ad824303452d284907dccfe46f1061938583e91a40e4b0a5fd32072
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oxifish-0.3.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 296.5 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
429d55b05c627bdef3806fbf937d651b87a16dc6e5b7656fa3a7bbc78b56f9ff
BLAKE2b-256 checksum
How to use checksums
254ef5264d7cc6de9e0d0098681838e068b7a8902972b00af965bd8396f2c26a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl

Download URL oxifish-0.3.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl
Size 318.6 kB
Tags CPython 3.14 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
158220a9c27f7fe36deff26691dac21f5ededf9dce3b3c8e4a18b92060fcb6a5
BLAKE2b-256 checksum
How to use checksums
0c80418da5f36c32b37c45369fcf1b42643565076a0380957945d98aebf6345a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL oxifish-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Size 273.1 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
804224783c7a76297e9eca9321a4ee99cb5521677d11ed327b32738cad71c501
BLAKE2b-256 checksum
How to use checksums
eea7284992348b1df2a03d3d457af8aee19baa40cf7818538638bb39cc8682cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL oxifish-0.3.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 283.5 kB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e2e039a4cfdf2307289d75c252b1f63769d54921dcbc33da069d427e6204b558
BLAKE2b-256 checksum
How to use checksums
3110f50e49ca53ec7d21a3629cb0c0fdd89a587ad0537773e552ab21c2860f56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-win_amd64.whl

Download URL oxifish-0.3.0-cp313-cp313-win_amd64.whl
Size 180.9 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
1fb806393763a5221d1273e11fac32162b005c750f49556984d527096668c8f0
BLAKE2b-256 checksum
How to use checksums
c5cbe550875aee37d1d2832ac49742594f90e2144f2307b270af0e49c0aa6696
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL oxifish-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 509.2 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
521e9fe3dccb684c2ac62476a6bff2cfd1fc248a893dae63aa3118d0056bc6ea
BLAKE2b-256 checksum
How to use checksums
440d89166bea271da388faa47538675f8c52c0eb87ab991c7033b3dc9fa3ad59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL oxifish-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 471.7 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
748d9c20d31c16362352587bf79fb5eed6d9449ba2eb913b6689dabbf3ab2ed0
BLAKE2b-256 checksum
How to use checksums
dd5e6c3026695caecfb172ed8b41543c48c09a6711e5b95a1b07f570a98ec7a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oxifish-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 297.8 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
4795ea2abeceb35d92da5226ae6e574ed82279d06657299cb6e3056e77255807
BLAKE2b-256 checksum
How to use checksums
96a1f5fc4d9e6d89f737375bf93c523cf69f3d6a65af25bacbb589a890e23bbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oxifish-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 295.6 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
ac043fb43f67d5ec84ea310c58d074741021d1ac5c04d0dcfb17eb83fcf928d9
BLAKE2b-256 checksum
How to use checksums
8d1776621763f203353625995fe623db07315f808b6a17c5643eb995ef035830
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl

Download URL oxifish-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl
Size 317.4 kB
Tags CPython 3.13 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
2f20f0141f93043e3cbd179a476c82c317a9a42f7250b065720aaea63c025ec9
BLAKE2b-256 checksum
How to use checksums
f7b30cc14220c76395cbbfee51411206b10e2d225c843701a529bfd26d6aef4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL oxifish-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Size 272.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
798289fef091a1b541d03736d161598e980bd235d04f5d31d544ae3d3715a299
BLAKE2b-256 checksum
How to use checksums
33f1cf05d9cc3da42545d1f4a7a41d5e564b5e34d5b2e26ed62012865e996c13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL oxifish-0.3.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 282.9 kB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b4d98cc037b229d310f5e77e597981cf2f15899d402367e860a2f0658c447183
BLAKE2b-256 checksum
How to use checksums
82cb4013fbf0bd18fa094dc83f45594cc9d242c7bf3f15ad1dccc21f9bdd4db3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-win_amd64.whl

Download URL oxifish-0.3.0-cp312-cp312-win_amd64.whl
Size 180.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
4023627a98b308914bca289be2ea388a0dda076e51d84c6c77fd002acc6d51be
BLAKE2b-256 checksum
How to use checksums
6cdf249da5435561b49b62eecfc59e3ff5adec13436751a43fd10d4b5d16496e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL oxifish-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 508.1 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
150fa9cb6c119e088437afcec4c14ad977d982afce22ed08ac97cc923e3e9291
BLAKE2b-256 checksum
How to use checksums
aab670b05893b0fcc766ab2d09dd3c8c7801c227c40f462a38c0057e49366dad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL oxifish-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 470.7 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
926abcbac03b990a3423ae141cc0946bf96993709456e5dc3c4bb372260314ca
BLAKE2b-256 checksum
How to use checksums
0664c78146b275af87c1b55d6152e8e9834cd36bc9f4c4d7b9d488d9362bc040
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oxifish-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 296.9 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
310f8e27074452331c5c1aa51b9c06e0e417c84baa46096a799db948f8169227
BLAKE2b-256 checksum
How to use checksums
c8429f1fce177fe674e3cc03a541f87436154fba7dd7b52e55a38b92d06f5054
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oxifish-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 294.7 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
a1d724f0a191df5b41291da1a906dd59c68d63c133c8231b9d5072061ec5c04c
BLAKE2b-256 checksum
How to use checksums
509d07e3eef4fe70dd55bd9d531bb388337291cafbc86728ca3fba0ef94d6e51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl

Download URL oxifish-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl
Size 317.1 kB
Tags CPython 3.12 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
fb99d7510dde2009c9a2724b78ab71acddf3cc9739cd2c98f19f9b3d67f99837
BLAKE2b-256 checksum
How to use checksums
a05bb2fa7af17fc0a3c54db7720a76db978929387f5218610b52db6aa96ef1a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL oxifish-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Size 271.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
153f314a39d3f666098b196615beb4840291941b4d9ae89d2b6d49ea368bcfc8
BLAKE2b-256 checksum
How to use checksums
67e8a4397090b1e683847105b85de4b528f9fe763d43a929e2a69c23e5362714
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL oxifish-0.3.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 282.2 kB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
1ac2253b2ebc0516d8b7a117829506b7c3ed6b49fb65f7eb145c724448644a12
BLAKE2b-256 checksum
How to use checksums
e1f3282503e9d6296edfd5ea62f6e7142df6e026833dc53690b6786fa20eb109
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-win_amd64.whl

Download URL oxifish-0.3.0-cp311-cp311-win_amd64.whl
Size 183.2 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
daed1f6f186f3ce8e15a871a0e0a72381b8189eb9ef1f1486ce65e56d384f515
BLAKE2b-256 checksum
How to use checksums
fc9fe1bc5e5b866d74ce0630a08b3fad38a1eba5aeec5c5c5deebba1eeb7d59c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL oxifish-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Size 510.2 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
24d5d99550fd7f90c30758ee6aa635ccac2ab3133cff8af03cba7201b01f174d
BLAKE2b-256 checksum
How to use checksums
081817f2bcc331e48cee9fb5349d5acef61feaf44af49bd4383d2d13a7ef7790
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl

Download URL oxifish-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl
Size 473.0 kB
Tags CPython 3.11 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
9a43e7cfd05c0c0444d3db8cb0da267ac065e3a1eb34f420b25c17aea9c87894
BLAKE2b-256 checksum
How to use checksums
fa6a9d5bc735531e5c7f7857346a6e0e419a02286dff54f612ef8177a2b9292d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL oxifish-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 298.9 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9f94c8a685b49a4cea95d8ee6104b5315ebadb69b35cba4a4ddb4df04d9c4f41
BLAKE2b-256 checksum
How to use checksums
ddb105bede1575affbb70814766c48fd861c1d642367d1c63b3b52736f63cd68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL oxifish-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 296.6 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
7b61860ff9a287fd12cc300436ba565fb3552c504cc289bdfee74151fa29d833
BLAKE2b-256 checksum
How to use checksums
94e7186234bb11cc1c5a7307b9e931e104095c80ce84148437f5cf229514d2d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl

Download URL oxifish-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl
Size 319.7 kB
Tags CPython 3.11 Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
189b90471744bceedd67bd07a8b0ef1feeb20edd6c8f64755c210cbdda30bc8a
BLAKE2b-256 checksum
How to use checksums
7af1bd9c45228bfad84f62d2bf6b1eed691eb8e3637ee50767939df14eb10462
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL oxifish-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Size 274.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1cef4799e3114dc3e54b1efc2ac452ac513de21f8fd81bfe22f86dfffdddf4f1
BLAKE2b-256 checksum
How to use checksums
e46a7ad64a8dcb9afc719d416992fbd9be3ec8797604506949af043174b3a6cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Release files / oxifish-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL oxifish-0.3.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 280.8 kB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c2ddc2a3d3a6fdd538a48aee95e766c554a1c73496d03f917c33ab35e57714a2
BLAKE2b-256 checksum
How to use checksums
2f7645a64b8199ed894f773c0d247ad9c03941788044e8b77ce7996291cda45f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

Security for oxifish 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 33 files in this release have been uploaded with provenance metadata.

Select from 33 files

Attestation for oxifish-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.3.0 This release

33 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page