Skip to main content

Image integrity and authenticity verification tool

Project description

Pixseal

Prove what you published — and what you didn’t.

Pixseal is a Python-based image integrity and authenticity verification tool designed to detect whether an image has been modified since signing.

Pixseal embeds a cryptographically verifiable integrity seal into an image in an invisible manner. During verification, any modification — including editing, filtering, cropping, resizing, re-encoding — will cause verification to fail.

Pixseal signs the payload and image hash with an RSA private key. Verification uses the matching RSA public key or an X.509 certificate that contains it.

Pixseal is not a visual watermarking or branding tool. The watermark exists solely as a means to achieve strict, deterministic image tamper detection. Pixseal prioritizes tamper sensitivity over robustness against intentional adversarial manipulation.

Features

  • Image Integrity Verification

    • Cryptographically proves that an image remains in its original, unmodified state
    • Detects single-pixel changes with deterministic verification results
  • Tamper Detection

    • Detects image modifications such as:
      • editing
      • filters and color adjustments
      • cropping and resizing
      • re-encoding and recompression
      • pixel-level changes
  • Invisible Integrity Seal

    • Embeds verification data without any visible watermark
    • Preserves the original visual appearance of the image
  • RSA Signatures + Certificate Support

    • Signs payloads and image hashes with an RSA private key
    • Validates with RSA public keys or X.509 certificates (PEM/DER)
  • Flexible Key Inputs

    • Accepts key/cert objects, PEM/DER bytes, or file paths
  • Fully Local & Offline

    • No external servers or network dependencies
    • Pure Python implementation
  • Lossless Format Support

    • Supports PNG and BMP (24-bit) images
    • Lossy formats (e.g., JPEG, WebP) are intentionally excluded to preserve integrity guarantees

Installation

pip install Pixseal
# or for local development
pip install -e ./pip_package

Python 3.8+ is required. Wheels published to PyPI already include the compiled Cython extension, so pip install Pixseal automatically selects the right build for your operating system and CPU.

Building the Cython extension

If you cloned the repository (or downloaded the source), run the helper script to compile the simpleImage_ext extension for your environment:

git clone https://github.com/kyj9447/Pixseal.git
cd Pixseal
python3 -m pip install -r requirements.txt
./compile_extension.sh

This command regenerates the C source via Cython and invokes your local C compiler (clang or gcc) to produce pip_package/Pixseal/simpleImage_ext*.so. You still need a working build toolchain (gcc/clang and Python headers) installed through your OS package manager. If you skip this step, Pixseal falls back to the pure Python implementation, which works but is significantly slower.

Quick start

Sign an image

from Pixseal import signImage

signed = signImage(
    imageInput="assets/original.png",
    payload="AutoTest123!",
    private_key="assets/CA/pixseal-dev-final.key",
)
signed.save("assets/signed_original.png")
  • The payload is looped if it runs out before the image ends, so even small files carry the full sentinel/payload/end pattern.

Validate a signed image

from Pixseal import validateImage

report = validateImage(
    imageInput="assets/signed_original.png",
    publicKey="assets/CA/pixseal-dev-final.crt",  # cert or public key
)

print(report["verdict"])

Key and certificate inputs

Pixseal accepts multiple input formats so you can keep the calling code minimal.

  • signImage(..., private_key=...) accepts:

    • RSAPrivateKey
    • PEM/DER bytes (bytes, bytearray, memoryview)
    • file path (str or Path)
  • validateImage(..., publicKey=...) accepts:

    • RSAPublicKey
    • x509.Certificate
    • PEM/DER bytes (bytes, bytearray, memoryview)
    • file path (str or Path)

If a certificate is provided, Pixseal extracts the embedded RSA public key and verifies the signatures. Certificate chain validation is the responsibility of the calling application.

Payload structure

Pixseal embeds a compact JSON payload with the signed data and image hash:

{
  "payload": "AutoTest123!",
  "payloadSig": "BASE64_SIGNATURE",
  "imageHash": "SHA256_HEX",
  "imageHashSig": "BASE64_SIGNATURE"
}
  • payload: user-provided text
  • payloadSig: RSA signature of payload (Base64)
  • imageHash: SHA256 hex digest computed over the signed image buffer.
  • imageHashSig: RSA signature of imageHash (Base64)

Embedded sequence layout

Pixseal writes the following newline-delimited sequence into the image:

<START-VALIDATION signature>
<payload JSON>
<payload JSON>
<payload JSON>
<payload JSON>
...(Repeated until it fills the entire image)...
<payload JSON>   # truncated tail (prefix of payload JSON)
<END-VALIDATION signature>

During extraction, Pixseal deduplicates the sequence and typically returns four lines in order: start signature, full payload JSON, truncated payload prefix, and end signature.

For a valid image, deduplication results in four extracted lines.

<START-VALIDATION signature>
<payload JSON>
<payload JSON>   # truncated tail
<END-VALIDATION signature>

※ In rare edge cases, the truncated payload prefix may be absent, in which case only three lines are returned.

Validation output

Validation Report

  • lengthCheck
    • length : Length of deduplication result array.
    • result : True for 4 or 3 (valid deduplication cases).
  • tailCheck
    • full : Full payload intact. (output truncated)
    • tail : Truncated payload intact. (output truncated)
    • result : True when the full and truncated payload portions match.
  • startVerify : Verification result of the first SIG against "START-VALIDATION"
  • endtVerify : Verification result of the last SIG against "END-VALIDATION"
  • payloadVerify : Verification result of the "payload" against "payloadSig"
  • imageHashVerify : Verification result of the "imageHash" against "imageHashSig"
  • imageHashCompareCheck
    • extractedHash : Value of "imageHash" from extracted payload
    • computedHash : Image hash computed directly from the image
    • result : True when extractedHash and computedHash are identical
  • verdict : True when all validation checks pass.

CLI demo script

python testRun.py offers an interactive flow:

Before the menu, it prompts for the SimpleImage backend (Enter/1=cython, 2=python fallback) and sets PIXSEAL_SIMPLEIMAGE_BACKEND.

  1. Choose 1 to sign an image. It reads assets/original.png and writes assets/signed_original.png.
  2. Choose 2 to validate. It reads assets/signed_original.png and prints the validation report.
  3. Choose 3 to run the failure test. It reads assets/currupted_signed_original.png.
  4. Choose 4 to benchmark performance (sign + validate with timings).
  5. Choose 5 to test signing and validation using in-memory bytes.
  6. Choose 6 to run the optional line-profiler demo.
  7. Choose 7 to run validation multi-pass tests.

Option 6 requires the optional dependency line_profiler and must be run via kernprof -l testRun.py so that builtins.profile is provided. Without line_profiler installed the script will continue to work, but the profiling option will display an informative message instead of running.

API reference

Function Description
signImage(imageInput, payload, private_key) Loads a PNG/BMP from a filesystem path or raw bytes, injects payload plus sentinels, and signs the payload/hash using the RSA private key. Returns a SimpleImage that you can save() or saveBmp().
validateImage(imageInput, publicKey) Reads the hidden bit stream from a path or raw bytes, rebuilds the payload JSON, verifies signatures and the computed image hash, and returns a validation report. Accepts RSA public keys or X.509 certificates.

Examples

Original Signed (AutoTest123!)

Validation output (success):

Validation Report

{'lengthCheck': {'length': 4, 'result': True},
 'tailCheck': {'full': '{"payload":"AutoTest...lgu9lUM+s7OHUZywYqYYOYIFVTWCmq...',
               'tail': '{"payload":"AutoTest...lgu9lUM+s7',
               'result': True},
 'startVerify': True,
 'endtVerify': True,
 'payloadVerify': True,
 'imageHashVerify': True,
 'imageHashCompareCheck': {'extractedHash': '2129e43456029f39b20bbe96340dce6827c0ad2288107cb92c0b92136fec48d6',
                           'computedHash': '2129e43456029f39b20bbe96340dce6827c0ad2288107cb92c0b92136fec48d6',
                           'result': True},
 'verdict': True}
Corrupted after signing

Validation output (failure):

Validation Report

{'lengthCheck': {'length': 31, 'result': False},
 'tailCheck': {'result': 'Not Required'},
 'startVerify': True,
 'endtVerify': True,
 'payloadVerify': True,
 'imageHashVerify': True,
 'imageHashCompareCheck': {'extractedHash': '68d500c751dfa298d55dfc1cd2ab5c9f43ec139f02f6a11027211c4d144c2870',
                           'computedHash': '43fd2108f5aa16045f4b64d70a0ce05991043cba6878f66d82abd3e7edb9d51e',
                           'result': False},
 'verdict': False}

Project details


Download files

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

Source Distribution

pixseal-1.0.0.tar.gz (26.5 kB view details)

Uploaded Source

Built Distributions

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

pixseal-1.0.0-pp310-pypy310_pp73-win_amd64.whl (124.4 kB view details)

Uploaded PyPyWindows x86-64

pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (149.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (151.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-pp39-pypy39_pp73-win_amd64.whl (124.4 kB view details)

Uploaded PyPyWindows x86-64

pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (149.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (151.9 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-pp38-pypy38_pp73-win_amd64.whl (124.3 kB view details)

Uploaded PyPyWindows x86-64

pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (158.3 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (159.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp313-cp313-win_amd64.whl (134.6 kB view details)

Uploaded CPython 3.13Windows x86-64

pixseal-1.0.0-cp313-cp313-win32.whl (115.0 kB view details)

Uploaded CPython 3.13Windows x86

pixseal-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (943.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp313-cp313-musllinux_1_2_i686.whl (903.7 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

pixseal-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (913.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (866.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp312-cp312-win_amd64.whl (134.3 kB view details)

Uploaded CPython 3.12Windows x86-64

pixseal-1.0.0-cp312-cp312-win32.whl (115.2 kB view details)

Uploaded CPython 3.12Windows x86

pixseal-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (943.6 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp312-cp312-musllinux_1_2_i686.whl (907.8 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

pixseal-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (919.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (871.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp311-cp311-win_amd64.whl (134.5 kB view details)

Uploaded CPython 3.11Windows x86-64

pixseal-1.0.0-cp311-cp311-win32.whl (116.2 kB view details)

Uploaded CPython 3.11Windows x86

pixseal-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (998.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp311-cp311-musllinux_1_2_i686.whl (966.5 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

pixseal-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (956.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (912.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp310-cp310-win_amd64.whl (134.4 kB view details)

Uploaded CPython 3.10Windows x86-64

pixseal-1.0.0-cp310-cp310-win32.whl (116.9 kB view details)

Uploaded CPython 3.10Windows x86

pixseal-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (938.7 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp310-cp310-musllinux_1_2_i686.whl (922.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ i686

pixseal-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (908.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (863.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp39-cp39-win_amd64.whl (134.6 kB view details)

Uploaded CPython 3.9Windows x86-64

pixseal-1.0.0-cp39-cp39-win32.whl (117.1 kB view details)

Uploaded CPython 3.9Windows x86

pixseal-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (931.5 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp39-cp39-musllinux_1_2_i686.whl (918.3 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ i686

pixseal-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (900.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (858.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

pixseal-1.0.0-cp38-cp38-win_amd64.whl (135.4 kB view details)

Uploaded CPython 3.8Windows x86-64

pixseal-1.0.0-cp38-cp38-win32.whl (118.0 kB view details)

Uploaded CPython 3.8Windows x86

pixseal-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl (980.1 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

pixseal-1.0.0-cp38-cp38-musllinux_1_2_i686.whl (949.5 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ i686

pixseal-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (944.8 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

pixseal-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (906.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

File details

Details for the file pixseal-1.0.0.tar.gz.

File metadata

  • Download URL: pixseal-1.0.0.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ba1e333d1fea69ca40ff5e85cfa44582cc3d002ab3a974de2dceafe0cd38db44
MD5 da06f0353598ce6c22a1b6e0b565a027
BLAKE2b-256 09b6f58597192477ade0b74fa3a17d7a866eaf656c305a76d2693527ddaa64d7

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 47715b0438c5d0705c6ed2271dd9b72376fd7757fbf061c62195e87aa65c2275
MD5 3fb62ecf7827e1fe571ae853983e0e29
BLAKE2b-256 2a36ac838bb11688fef4387ed7ffa30e8441aa3c4edbfd379646d51c7189e85b

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0575c81ae8ba2124d296b419bad857a58a4c2cb6f5ce12fabf3965810162506d
MD5 004c1c579468c75bfc2c887f2e316388
BLAKE2b-256 1400f2c35dfcb4d0f6478e8d1935208a89979f4f1e3a63f88265e57a3464a898

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f41634051d173d50ddaa8a1a20f32dbb2a1602547f6cd3cea0be1fb9266ff3a6
MD5 a5b1b6e2f31d1b2c3d5c84725db31083
BLAKE2b-256 7b6b890e0c9269c238190de0490ae2edb50f9706466e62e612748a6462e87b25

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 a749637744ce68b1833786ba209a4c64f7b86870b11fed01b4c6319eefc19e82
MD5 4273391dc8129784fd065ce9b6812d8b
BLAKE2b-256 5a1d57e95c916f0e36908b4562b0d9da2a0df0b4f8752fb6ae42a4ef10dc37f3

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 83e68b05081538266cd0f6838c91fbad6a87d8b5f9bc48f9f7cc2b8e38fb68a0
MD5 8930322b7d00b702084146c596505920
BLAKE2b-256 6864f4767aa257fc9a276dc3fa603e125e93f72ad2a4f6ea1fb3f5b03c0a2b04

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1c6a7d66ad1c771b5d42d19bd215bed033255db203e67d5a6e6ba8ce8b3e303e
MD5 ca1f643a25221af2fcb074c5f8a62467
BLAKE2b-256 b09d502afe47e4c4f9eaf0e9c34268a27c9230fcad88831a14b28a15080d5699

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp38-pypy38_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 31be2f5313d593a2ea41794f5831d8d097f945c64f02c41e69e1b47bb1fbbc81
MD5 82a1c9eb793782f24476685bc31bce55
BLAKE2b-256 7808d740fa4ef1d228ff41b44947aba4c11fc2e85ea90da0baf5fcdee55a3073

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8e36696dc61c9f3106c324fb91333b8c03f0ad209a31ecfc5bc3a642268fa015
MD5 f53d18c7e39aedab8a866cecbb6e0b5e
BLAKE2b-256 ae8263720fe7e2517d3fe8463cdc50248523c85dbdb5d4ee87fd688e4dd9b1c9

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 46ecfc1f4a66e496d66d6333613240cfdd0595b8841949afcb856f2869da4ad2
MD5 73831df5c50340c446ec309d45e64f41
BLAKE2b-256 026bcc884fe33c6cfa453df6ef126308a82de32418ce9051e607ead1c757668d

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 134.6 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 343b69e40c6814aea75bb71b8b8c2d8c515888f4faa9d700f9d21bcac200825b
MD5 b535faec990f8c3fd526b4b976bc316a
BLAKE2b-256 0b9147cb719b7d459a5b94c818472f4e5a2d3851d2a7a79b464c0ca4c014409e

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp313-cp313-win32.whl
  • Upload date:
  • Size: 115.0 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 c76c946473a111abf2791d0064986882db831468d5ff46ff7cb5293bd3e069ef
MD5 b222e6dea6fe1224cafc338cba9915c5
BLAKE2b-256 5d8ec7c7b7a299492a8738d83841356b34168a5ef19ee0d6c25cc582e80fc57e

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 21e8ccceba928af5826bf5b3cac642cb447ddc41e9fe58a37048cf8949f3d493
MD5 69384b8aac0e037d928786350a3d6783
BLAKE2b-256 612187b4fe93d6adb83e74cca7bac92a048765ad237165d5143da147c45baa51

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4d0a7b8baabdf6fc03837b37676dda3f3b2fa5c5a7b772ace34ba8b093c0f643
MD5 23debc7b59daa15d7e7b6afc5f1e9cc9
BLAKE2b-256 c68dd140d9f93868cc65ba86e1dfd02b5ba0045dbc37e00c887a76c394e10d31

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4353adff78d98ab4c3fafab4a3af301e0aca5547ecdbb6f47d3f664a680d9d30
MD5 5e4f2c94d3a4db143ff03e73c598eac5
BLAKE2b-256 4e677ab5c754445019654669f80119a53477f56accf66cca8faf00902f575fe0

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 79c3340e639341be0525b22e3ea555752601bf47a78e6b91f46e69dcf31d939d
MD5 e92742a1c67b77c0279dc65ffa266e7e
BLAKE2b-256 810ad34ddbf941dea064115951366e1e9e287192a5028c3dcbcd4c5970f95434

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 134.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aa0016b29b3b10b4dd3df94a78561bd659feb373341ad70387c38ef467ae8581
MD5 9715313421ec9be1dc80aacba1b163db
BLAKE2b-256 a1a5e1f90d95edc85c94227fc975d395411d7603f0e9b7c7889f9ada9cde6408

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 115.2 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 643ee36205335b392b302be0301b6a0e45392ffc188a7a6044f03dd54aab80c4
MD5 21da2d7fa1eba7beb2fbaf304f5b2fcf
BLAKE2b-256 630dd33e2773caa124fbec2a19894e49ae952deec6d912d9d750bf9143a64b43

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 869742b001482814aa26f2038d4780a2cb75a3b5b3e02152058463a3b1c9728a
MD5 f8bfe62ee1d632edabda383819a05758
BLAKE2b-256 2553b3b41a94cc51a9d83db56822d562a22123740aacbec3471ece93c534872e

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 1b1b62b623250a9577ff45daf47ea82ce049c05163cca63de66924cb8581da43
MD5 0319958d043f8614734a5f7edcb982da
BLAKE2b-256 59ef070eb8277be700cbed2807907861df9c398f5154cf6d000ac24de3ee0480

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f98736e90aaac153928c3ccc58e3cc379a647e354829ce63b50975522f8e0291
MD5 d9608919ab61773a8b1a341eed3cb462
BLAKE2b-256 10420a04e49763fa41472f67368c57f603be9c307a848512c7220621f9cbc603

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4218e3c78b1342e98365495dff2fe5605335c5b5a8d3a849f4ca17e3cf46f210
MD5 46f18c328bb68b26b32d118472df0061
BLAKE2b-256 dbe1f46d3b1c042a070a11317ff57d123a2f3027eba010b7cbf57ad0faec8b92

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 134.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f84c17c66b93b55838f3d956fe5281948163624090c5b321f416d2b3af847602
MD5 a46e46d9f7491eb76d7cb2d2c38da69f
BLAKE2b-256 18139f0fcf6af157d765cb969e9fb93457372774ab36febe83fc89479a88f33b

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 116.2 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 16d3706b9b30e42e0f25d6897b024d15f366acde28ad5810e51b5dfca5cf7dae
MD5 ffd47602ced6c45d36ec25d3613281fd
BLAKE2b-256 c9ed2969cf5fbd96806777ea40d004b4a88a9aa285a7a8c3779c6ec8391d428f

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bef4e157a17b2c7a8786ae91c8899e62b5811a1dc434206f7ec617824f898ee3
MD5 2495ac8ac9d2266c5dc1007e133ca434
BLAKE2b-256 d45a8f5fdf4824683b3237b9e7243521c1611fa6d84fbd31a67a25d34eee4aab

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4656deef7dc648d7c9174fbb712c6d09420bd8b5b3198ec1847cacd94697b4cf
MD5 5dc90d3f4f6691661405fecc85881f53
BLAKE2b-256 736c9104e0c8b273861372613728b9a018eb5d58af9f1d8e69d2adc5703a36fc

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2ed3c845828e2a90a95c9cf716d6d6b2ba3cbfa13853c6734df8810d396464f5
MD5 7d49e332a8c84e70962fd26de3850f87
BLAKE2b-256 77c95b6b81cfcb32b825724eef19474725cb540bb5450e9081d36da7aa225975

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fa175f273bc56acdd04bdc04b0eefb822083f24be047a45e78bd428ea0665f5a
MD5 857b1af55c8f4fde96d4b318866f168f
BLAKE2b-256 9c8e03b6353bf73871b68a792785e24e0b52f5d8b38ccd62497b8130178bff4a

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 134.4 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f34f870b6da3e8017ff7d073bf973d00dd5d706fbb92a3c2d26a68cd969f72e7
MD5 a82459ff00961b94d288983cad0575ff
BLAKE2b-256 99610fdd40562c54ff4fafc83f9b3ca35e0aec900531e6dd1136f1fb09f5a718

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 116.9 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c18c54d0fa0212095e5268dfe1a46f3f766e3c26d89d3c4f95700cfc507cf529
MD5 9d15a184aa6f448123444fbb429e5ce0
BLAKE2b-256 214b6a8a6a529b71875766f72be46a2e126482b5c892c4313e1e9f267fbb1aee

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 718305ad8a1a11ea48d942eba3d484d8a3dae7671ec90abdcfa407c66160dd69
MD5 0d6241253de89519423d03eb19a53cab
BLAKE2b-256 c6a20d5e2bf81510260410feff9b81a06fa94626bd6930ca5220e2127038f303

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 549d21939c89a64ff8608605f6ef0a892a8ed70da4f24799acec596d5455541f
MD5 21e9fea7a271a1606732835a33a103c0
BLAKE2b-256 06dd7df9c39d6fbac8408bfb44227cb714597c4ad478ea920a04f646560d4c70

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 793d87a2afd888bfa105fc9c47a0d3d64e13534ba3b68745b6f6f9c08cbc3335
MD5 d03d0c90ef5c2652deb490c1f2987361
BLAKE2b-256 30c633cd0532b4aa4bc352ee514f933e91b5ee2b06ed5459a39ea15b2cf04bde

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f11b383432f10bfac3b2fcc45873d6427107ec52d637b0987678c0b380362111
MD5 119693891d9128582a49787b7b63b10d
BLAKE2b-256 14da635f4159c67a391074419808cbd39451b3e725cf311f91edfe112adfff83

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 134.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5286bbe81fc2521ed045b878b08eeadd468d203b5acad5a0b003a7f0abedced0
MD5 ae9f54db1399247915a67d42855a08e5
BLAKE2b-256 e7f60ae85bf421d61b009b2be85c4a66e852baf5c308fc49312a46d1a50f3a6f

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 117.1 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 88bc0c6d5cddbe939db1f8879b385958c01ac2715e4ded61b3c1ae2c0f74b07d
MD5 3e63c9301b6116cfc5ba06475fa62e7d
BLAKE2b-256 526c26e9d0b15b8d62d3b58251d2b4b8b0aae8581dc8537e4a09aa2be2099db3

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 15403a78035d41c325fa1549525149d28d84a676f63211041c86049cb1c34594
MD5 ae18a04902680edfc5ab827b04793e27
BLAKE2b-256 e33371940d7d8f40d1b28b1af639f1c886a7fca33399d2c02b10c460e2ab5c93

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 388d5f8b4139a11b8091aa80898b5514c34a9897a00f82b2b6d2c4fcc431377a
MD5 8bbf70f94ad034ecd5b139d0b712418d
BLAKE2b-256 e167efd843224d4f71efd504ad9dc643cdd25d1eec35ccde6583024c30a40bb1

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 909f49b0517726596bbfa3e3d3f8f73ea00976d4cdeb56d5be86856247e1fc4d
MD5 0f64ccff20cb9c7f9c0d0470293bf6c3
BLAKE2b-256 ef0ea97ea1edf36e8e13dc8d35c0ee148593b5f6a6378109422f443a984388e8

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6ec90da6696440237f416de929380c9afde84f52092b5e0d1d6f62037b75e691
MD5 9c0e03dbf28afd64f2edaeeb11089d54
BLAKE2b-256 a245cf45b36b1949cf12735b890fdc4324706a7e4eb53851496505d8c4d0d97c

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 135.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 33c9ac295c777c513f8f9b7503e966eafe98a65b1b26f01f5a4ef64519d28cc2
MD5 f96e882571d48ae4e6885d1943ed54a2
BLAKE2b-256 1c414bdc419a764de4db8066c623ee076dd6f07dd9ee869dac0279aa87e4d847

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: pixseal-1.0.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 118.0 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 a29be50861e699c4cf0ed11dae6561bebfa4a4b2cc61b9cb4f7da487195575d1
MD5 411930692700e8ba2bf00b8f309bfd58
BLAKE2b-256 e12a0e62eca1b8a245f9e64bd276f6f6397b8aa1ef780490a6c45cd9b3893bc5

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 87dc90daed58edbb2ae5819222dbaa3e12dbb79ab2083a7f0337819060bba43f
MD5 bf90572893d1dd6681de7fcfe0e63084
BLAKE2b-256 a23f076699aa1914f80c1edd8a65816d6b76081c911454d456d6953e60acfb5b

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 57739452f55a15b8e301119a9435b22326c0191f6483e602c18ba9064f26bbe8
MD5 fc5aff6b48a6a0e39794d52f13aefa6a
BLAKE2b-256 3b8fd2f798b6d2c77ad46ea8e0d40a8d61c050e66368b7a000dc0b0d06e61397

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b3b9afab64d772810146e7617cf0987cb335bc68111ec73159494cf9a466861
MD5 b8efd241193c96a8e4455a6edad957a3
BLAKE2b-256 81324a06a0c99a5bd6385637d2be648cfce8bdc7b64136ec7685d676acde18bb

See more details on using hashes here.

File details

Details for the file pixseal-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pixseal-1.0.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fda67579947ab76ce045812ab7f387be7218f8e28ab986c0f1ea2f2033d31462
MD5 5c58851e95e062cc06c6202221438e8e
BLAKE2b-256 4665defb8f2ed78f2b3e3229a3c692382380fcad55b298105c81159c151a35ee

See more details on using hashes here.

Supported by

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