Skip to main content

A static analysis file format checker.

Project description

@sebdroid/pure-checker

Build

pure-checker is a Python3 port of the following npm package:

@ronomon/pure

Pure is a static analysis file format checker that checks ZIP files for dangerous compression ratios, spec deviations, malicious archive signatures, mismatching local and central directory headers, ambiguous UTF-8 filenames, directory and symlink traversals, invalid MS-DOS dates, overlapping headers, overflow, underflow, sparseness, accidental buffer bleeds etc.

Pure's goal is to narrow the semantic gap available to attackers attempting to exploit vulnerable software, and to reduce the probability of zero-days, for example David Fifield's A better zip bomb, which was detected by an early version of Pure as a zero-day.

Acknowledgements

Pure was commissioned and sponsored by the Product Release And Security Team at Microsoft.

A special thanks to Maxim Vainstein and his team at Microsoft for their vision and encouragement.

Looking to the future, we want to add support for more archive containers (GZ, TAR, RAR etc.) and other file formats (MS-CFBF or OOXML Office files, RTF, PDF, image formats etc.). Please contact Joran Dirk Greef if you want to support new file formats in Pure.

Files

  • pure.h: C interface to library source code.

  • pure: CLI script for development testing. Usage: ./pure <file>.

  • test.js: Node.js test runner to run Pure against all test files in ./tests.

  • binding.c: Node.js binding used by CLI and test runner.

  • make-errors.js: Script to recreate C error enums, error codes and error strings dynamically.

  • make-signatures.js: Script to recreate C signature strings dynamically.

  • make-tests.js: Script to recreate test files dynamically.

Installation

npm install @ronomon/pure

Usage

At the command line, you can run Pure on any zip file:

$ ./pure <file.zip>

For example:

$ ./pure samples/zbsm.zip
PURE_E_ZIP_BOMB_FIFIELD: zip bomb: local file header overlap (see research by David Fifield)

As an embedded C library, pure.h provides:

int pure_zip(
  const uint8_t* buffer, // Zip file buffer
  const uint64_t size,   // Size of zip file buffer in bytes
  const uint64_t flags   // Bit flags (optional)
)

int pure_zip_bomb(const int error)

const char* pure_error_code(const int error)

const char* pure_error_string(const int error)
  • pure_zip() returns a non-zero error return code, or a zero return code if the zip file is clean and has no file format anomalies. A buffer instead of a path is passed to pure_zip() for portability, for reduced surface area for bugs, and to avoid forcing unnecessary IO if file contents are already in memory.

  • pure_zip_bomb() returns 1 if the error return code indicates a zip bomb, otherwise 0.

  • pure_error_code() returns the constant name of the error return code.

  • pure_error_string() returns the error message string corresponding the error return code.

File Format Anomalies

Pure detects more than 150 zip file format anomalies.

Pure provides defenses against directory and symlink traversal exploits, dangerous unix mode permissions, parser ambiguity, and many other defenses against known (and unknown) exploits, including zip bombs and buffer overflows.

For example, Pure detects all variants of known (and unknown) zip bombs:

  1. Overlapping local file headers (cf. David Fifield).
  2. Quines (cf. Russ Cox).
  3. Dangerous compression ratios for individual files and across an archive.
  4. "Lying" zip metadata vs actual compressed data.
  5. Excessive archive recursion.
  6. Excessive number of files.

As a static analysis file format checker, Pure reduces the surface area for zero-day exploits by orders of magnitude. If a file can get past Pure, it's "pure"... or at least 99% pure.

Here is the exhaustive list of what Pure can already detect:

  • PURE_E_SIZE_MAX
  • PURE_E_MALLOC
  • PURE_E_STRING_NOT_FOUND
  • PURE_E_UINT64_OVERFLOW
  • PURE_E_ZIP_BOMB_ARCHIVES
  • PURE_E_ZIP_BOMB_DEPTH
  • PURE_E_ZIP_BOMB_FIFIELD
  • PURE_E_ZIP_BOMB_FILES
  • PURE_E_ZIP_BOMB_RATIO
  • PURE_E_ZIP_BOMB_INFLATE_COMPRESSED_OVERFLOW
  • PURE_E_ZIP_BOMB_INFLATE_UNCOMPRESSED_OVERFLOW
  • PURE_E_ZIP_TOO_SMALL
  • PURE_E_ZIP_SIZE_4GB
  • PURE_E_ZIP_RAR
  • PURE_E_ZIP_TAR
  • PURE_E_ZIP_XAR
  • PURE_E_ZIP_SIGNATURE
  • PURE_E_ZIP_EOCDR_NOT_FOUND
  • PURE_E_ZIP_EOCDR_OVERFLOW
  • PURE_E_ZIP_EOCDR_COMMENT_OVERFLOW
  • PURE_E_ZIP_EOCDR_SIGNATURE
  • PURE_E_ZIP_EOCDR_RECORDS
  • PURE_E_ZIP_EOCDR_SIZE_OVERFLOW
  • PURE_E_ZIP_EOCDR_SIZE_UNDERFLOW
  • PURE_E_ZIP_MULTIPLE_DISKS
  • PURE_E_ZIP_APPENDED_DATA_ZEROED
  • PURE_E_ZIP_APPENDED_DATA_BUFFER_BLEED
  • PURE_E_ZIP_PREPENDED_DATA
  • PURE_E_ZIP_PREPENDED_DATA_ZEROED
  • PURE_E_ZIP_PREPENDED_DATA_BUFFER_BLEED
  • PURE_E_ZIP_CDH_OVERFLOW
  • PURE_E_ZIP_CDH_SIGNATURE
  • PURE_E_ZIP_CDH_RELATIVE_OFFSET_OVERFLOW
  • PURE_E_ZIP_CDH_RELATIVE_OFFSET_OVERLAP
  • PURE_E_ZIP_CDH_FILE_NAME_OVERFLOW
  • PURE_E_ZIP_CDH_EXTRA_FIELD_OVERFLOW
  • PURE_E_ZIP_CDH_FILE_COMMENT_OVERFLOW
  • PURE_E_ZIP_LFH_OVERFLOW
  • PURE_E_ZIP_LFH_SIGNATURE
  • PURE_E_ZIP_LFH_FILE_NAME_OVERFLOW
  • PURE_E_ZIP_LFH_EXTRA_FIELD_OVERFLOW
  • PURE_E_ZIP_LFH_UNDERFLOW_ZEROED
  • PURE_E_ZIP_LFH_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_LFH_DATA_OVERFLOW
  • PURE_E_ZIP_DDR_OVERFLOW
  • PURE_E_ZIP_LF_OVERFLOW
  • PURE_E_ZIP_LF_UNDERFLOW_ZEROED
  • PURE_E_ZIP_LF_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_CD_OVERFLOW
  • PURE_E_ZIP_CD_UNDERFLOW_ZEROED
  • PURE_E_ZIP_CD_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_CD_EOCDR_OVERFLOW
  • PURE_E_ZIP_CD_EOCDR_UNDERFLOW_ZEROED
  • PURE_E_ZIP_CD_EOCDR_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_DIFF_LFH_GENERAL_PURPOSE_BIT_FLAG
  • PURE_E_ZIP_DIFF_LFH_COMPRESSION_METHOD
  • PURE_E_ZIP_DIFF_LFH_LAST_MOD_FILE_TIME
  • PURE_E_ZIP_DIFF_LFH_LAST_MOD_FILE_DATE
  • PURE_E_ZIP_DIFF_LFH_CRC32
  • PURE_E_ZIP_DIFF_LFH_COMPRESSED_SIZE
  • PURE_E_ZIP_DIFF_LFH_UNCOMPRESSED_SIZE
  • PURE_E_ZIP_DIFF_LFH_FILE_NAME_LENGTH
  • PURE_E_ZIP_DIFF_LFH_FILE_NAME
  • PURE_E_ZIP_DIFF_LFH_DDR_CRC32
  • PURE_E_ZIP_DIFF_LFH_DDR_COMPRESSED_SIZE
  • PURE_E_ZIP_DIFF_LFH_DDR_UNCOMPRESSED_SIZE
  • PURE_E_ZIP_DIFF_DDR_CRC32
  • PURE_E_ZIP_DIFF_DDR_COMPRESSED_SIZE
  • PURE_E_ZIP_DIFF_DDR_UNCOMPRESSED_SIZE
  • PURE_E_ZIP_FLAG_OVERFLOW
  • PURE_E_ZIP_FLAG_TRADITIONAL_ENCRYPTION
  • PURE_E_ZIP_FLAG_ENHANCED_DEFLATE
  • PURE_E_ZIP_FLAG_COMPRESSED_PATCHED_DATA
  • PURE_E_ZIP_FLAG_STRONG_ENCRYPTION
  • PURE_E_ZIP_FLAG_UNUSED_BIT_7
  • PURE_E_ZIP_FLAG_UNUSED_BIT_8
  • PURE_E_ZIP_FLAG_UNUSED_BIT_9
  • PURE_E_ZIP_FLAG_UNUSED_BIT_10
  • PURE_E_ZIP_FLAG_ENHANCED_COMPRESSION
  • PURE_E_ZIP_FLAG_MASKED_LOCAL_HEADERS
  • PURE_E_ZIP_FLAG_RESERVED_BIT_14
  • PURE_E_ZIP_FLAG_RESERVED_BIT_15
  • PURE_E_ZIP_COMPRESSION_METHOD_DANGEROUS
  • PURE_E_ZIP_COMPRESSION_METHOD_ENCRYPTED
  • PURE_E_ZIP_COMPRESSION_METHOD_UNSUPPORTED
  • PURE_E_ZIP_STORED_COMPRESSION_SIZE_MISMATCH
  • PURE_E_ZIP_DANGEROUS_NEGATIVE_COMPRESSION_RATIO
  • PURE_E_ZIP_TIME_OVERFLOW
  • PURE_E_ZIP_TIME_HOUR_OVERFLOW
  • PURE_E_ZIP_TIME_MINUTE_OVERFLOW
  • PURE_E_ZIP_TIME_SECOND_OVERFLOW
  • PURE_E_ZIP_DATE_OVERFLOW
  • PURE_E_ZIP_DATE_YEAR_OVERFLOW
  • PURE_E_ZIP_DATE_MONTH_OVERFLOW
  • PURE_E_ZIP_DATE_DAY_OVERFLOW
  • PURE_E_ZIP_FILE_NAME_LENGTH
  • PURE_E_ZIP_FILE_NAME_CONTROL_CHARACTERS
  • PURE_E_ZIP_FILE_NAME_TRAVERSAL_DRIVE_PATH
  • PURE_E_ZIP_FILE_NAME_TRAVERSAL_RELATIVE_PATH
  • PURE_E_ZIP_FILE_NAME_TRAVERSAL_DOUBLE_DOTS
  • PURE_E_ZIP_FILE_NAME_COMPONENT_OVERFLOW
  • PURE_E_ZIP_FILE_NAME_BACKSLASH
  • PURE_E_ZIP_EXTRA_FIELD_MAX
  • PURE_E_ZIP_EXTRA_FIELD_MIN
  • PURE_E_ZIP_EXTRA_FIELD_ATTRIBUTE_OVERFLOW
  • PURE_E_ZIP_EXTRA_FIELD_OVERFLOW
  • PURE_E_ZIP_EXTRA_FIELD_UNDERFLOW_ZEROED
  • PURE_E_ZIP_EXTRA_FIELD_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_EXTRA_FIELD_UNICODE_PATH_OVERFLOW
  • PURE_E_ZIP_EXTRA_FIELD_UNICODE_PATH_VERSION
  • PURE_E_ZIP_EXTRA_FIELD_UNICODE_PATH_DIFF
  • PURE_E_ZIP_UNIX_MODE_OVERFLOW
  • PURE_E_ZIP_UNIX_MODE_BLOCK_DEVICE
  • PURE_E_ZIP_UNIX_MODE_CHARACTER_DEVICE
  • PURE_E_ZIP_UNIX_MODE_FIFO
  • PURE_E_ZIP_UNIX_MODE_SOCKET
  • PURE_E_ZIP_UNIX_MODE_PERMISSIONS_STICKY
  • PURE_E_ZIP_UNIX_MODE_PERMISSIONS_SETGID
  • PURE_E_ZIP_UNIX_MODE_PERMISSIONS_SETUID
  • PURE_E_ZIP_DIRECTORY_COMPRESSED
  • PURE_E_ZIP_DIRECTORY_UNCOMPRESSED
  • PURE_E_ZIP_SYMLINK_COMPRESSED
  • PURE_E_ZIP_SYMLINK_LENGTH
  • PURE_E_ZIP_SYMLINK_CONTROL_CHARACTERS
  • PURE_E_ZIP_SYMLINK_TRAVERSAL_DRIVE_PATH
  • PURE_E_ZIP_SYMLINK_TRAVERSAL_RELATIVE_PATH
  • PURE_E_ZIP_SYMLINK_TRAVERSAL_DOUBLE_DOTS
  • PURE_E_ZIP_SYMLINK_COMPONENT_OVERFLOW
  • PURE_E_ZIP_STRING_MAX
  • PURE_E_ZIP_STRING_NULL_BYTE
  • PURE_E_ZIP_INFLATE
  • PURE_E_ZIP_INFLATE_DICTIONARY
  • PURE_E_ZIP_INFLATE_STREAM
  • PURE_E_ZIP_INFLATE_DATA
  • PURE_E_ZIP_INFLATE_MEMORY
  • PURE_E_ZIP_INFLATE_COMPRESSED_UNDERFLOW
  • PURE_E_ZIP_INFLATE_UNCOMPRESSED_UNDERFLOW
  • PURE_E_ZIP_AD_NIHILO
  • PURE_E_ZIP_EX_NIHILO
  • PURE_E_ZIP_CRC32
  • PURE_E_ZIP_EOCDL_64_OVERFLOW
  • PURE_E_ZIP_EOCDL_64_SIGNATURE
  • PURE_E_ZIP_EOCDL_64_NEGATIVE_OFFSET
  • PURE_E_ZIP_EOCDL_64_DISK
  • PURE_E_ZIP_EOCDL_64_DISKS
  • PURE_E_ZIP_EOCDR_64_OVERFLOW
  • PURE_E_ZIP_EOCDR_64_SIGNATURE
  • PURE_E_ZIP_EOCDR_EOCDL_64_OVERFLOW
  • PURE_E_ZIP_EOCDR_EOCDL_64_UNDERFLOW_ZEROED
  • PURE_E_ZIP_EOCDR_EOCDL_64_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_DIFF_EOCDR_DISK
  • PURE_E_ZIP_DIFF_EOCDR_CD_DISK
  • PURE_E_ZIP_DIFF_EOCDR_CD_DISK_RECORDS
  • PURE_E_ZIP_DIFF_EOCDR_CD_RECORDS
  • PURE_E_ZIP_DIFF_EOCDR_CD_SIZE
  • PURE_E_ZIP_DIFF_EOCDR_CD_OFFSET
  • PURE_E_ZIP_EIEF_64_COMPRESSED_SIZE
  • PURE_E_ZIP_EIEF_64_DISK
  • PURE_E_ZIP_EIEF_64_RELATIVE_OFFSET
  • PURE_E_ZIP_EIEF_64_UNCOMPRESSED_SIZE
  • PURE_E_ZIP_EIEF_64_UNDERFLOW_ZEROED
  • PURE_E_ZIP_EIEF_64_UNDERFLOW_BUFFER_BLEED
  • PURE_E_ZIP_EIEF_64_LFH
  • PURE_E_ZIP_DIRECTORY_HAS_NO_LFH

...and this is only for zip files, we want to add static analysis for more file formats, please consider asking your company to sponsor open-source work on Pure.

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

pure-checker-2.0.tar.gz (548.9 kB view details)

Uploaded Source

Built Distributions

pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28.7 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (31.8 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pure_checker-2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (23.4 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28.7 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (31.8 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pure_checker-2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (23.4 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (29.5 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (32.6 kB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pure_checker-2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (23.4 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

pure_checker-2.0-cp311-cp311-musllinux_1_1_x86_64.whl (64.9 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pure_checker-2.0-cp311-cp311-musllinux_1_1_i686.whl (62.3 kB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pure_checker-2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (57.5 kB view details)

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

pure_checker-2.0-cp311-cp311-macosx_10_9_x86_64.whl (24.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pure_checker-2.0-cp310-cp310-musllinux_1_1_x86_64.whl (64.0 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pure_checker-2.0-cp310-cp310-musllinux_1_1_i686.whl (61.5 kB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pure_checker-2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (57.5 kB view details)

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

pure_checker-2.0-cp310-cp310-macosx_10_9_x86_64.whl (24.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pure_checker-2.0-cp39-cp39-musllinux_1_1_x86_64.whl (63.9 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pure_checker-2.0-cp39-cp39-musllinux_1_1_i686.whl (61.3 kB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pure_checker-2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.2 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (57.3 kB view details)

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

pure_checker-2.0-cp39-cp39-macosx_10_9_x86_64.whl (24.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pure_checker-2.0-cp38-cp38-musllinux_1_1_x86_64.whl (64.1 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pure_checker-2.0-cp38-cp38-musllinux_1_1_i686.whl (61.5 kB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pure_checker-2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.3 kB view details)

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

pure_checker-2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (57.3 kB view details)

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

pure_checker-2.0-cp38-cp38-macosx_10_9_x86_64.whl (24.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pure_checker-2.0-cp37-cp37m-musllinux_1_1_x86_64.whl (65.2 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pure_checker-2.0-cp37-cp37m-musllinux_1_1_i686.whl (62.5 kB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pure_checker-2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

pure_checker-2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (57.3 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

pure_checker-2.0-cp37-cp37m-macosx_10_9_x86_64.whl (24.9 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file pure-checker-2.0.tar.gz.

File metadata

  • Download URL: pure-checker-2.0.tar.gz
  • Upload date:
  • Size: 548.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for pure-checker-2.0.tar.gz
Algorithm Hash digest
SHA256 f46e4aa9ae763ac8572e41b91846ae40e7dd108e13f85edfb6a67655e0b087ae
MD5 31a1befda4deb919ca8bbaf1539ce618
BLAKE2b-256 bfa8a02371d229257f0bcacc96fac42a6c0bd3c80a18f77620b96755104c0a2e

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e420aaf358da09fd46d4213ffa4da45c74dca6244b099576e6dac3081bc4e170
MD5 b443e968d9774ed37f12a94994d2e143
BLAKE2b-256 e1c87709381345fd5fdb0b48669dccc0e00dd8c9de9a5b8b8343667d64d5ad46

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 697b7bb61305ff42588a8035ffdbc656c6b579e1e1c3b5e35e6d368cc9766a98
MD5 e4d9789db00ada90f99a1505c98e6069
BLAKE2b-256 9de12316dc7eeb26931b100e41282d80f4796609f82dcbce7cd3320468e9a9c9

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8130942cc90a94c5aa994a747e6ba69a80c4f3d1efbd3017670e72ad950ea888
MD5 67c7529055f9c326cc530e77e2df0c57
BLAKE2b-256 e066684390d4c82430ee8adf27fdb42164e7f7e3cfe620362ffac042550bf999

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2649854a88b069a9a4b2e908a8792cee92031f941b5f327d591c5ef9e7f36c0b
MD5 3f881dbf1a055db894ce540e16ac6c9a
BLAKE2b-256 903e9f91fd697ff1ccfd09ad9e069138738675cfff5a585979f4841c3cbc07b9

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 21b9db24f9c7d5e7c69a4d4a25ed4de05152c63d191007d6ae569036150db44c
MD5 ffea5a70ff339937c1a3649446c5de18
BLAKE2b-256 1fa3003a8f2d0ed9e0d128b52cd64bf20a4b6d9b3fcf75acda95c45888bd05c9

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cfb766b5bc7a7798f9b12762cf968880e75869a18fed954cddcfce261490f5a7
MD5 604ea6703ce9e88d865721740f1ffcc8
BLAKE2b-256 f5dc347d7f2230839614b85b1fe465cf22ff81d8169eb57c5eb6bca6b187be7f

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd9deff002b58f8bd309dd49c768d1af6835fffaded1cf1b9bf8b73add7affb6
MD5 5cbca3ec371d41a30a73f2fc11cd03ba
BLAKE2b-256 20a518b2e699013d3603ac923c8cd1d725c4fe194da15cff1c2b8d4de4b8c6cb

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 48c11e48631057c7f0b728db5bc22a478220c83f6aa45349a16ed885d2383f20
MD5 17f190f1f626047d2d0718e4da585216
BLAKE2b-256 011a6183d5a238350af7deb50815f0942799a91199020049a20b5a47c39037ac

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 adce0aa9d27c4058471ea5f8760d195503911af66392de94e474a98fea2e8f3f
MD5 5a313e1b691572d170bb61835ea10e0f
BLAKE2b-256 9755371a6ed9659d0ea8e7e23502e1bd3d0730554d63d764a2dfd14c271aaaf3

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 837986002599358f42f6823f1934989076b1214652487088427d2cefe05da50c
MD5 3ba9812bb12d97b002dcbe2fe8c4af12
BLAKE2b-256 640c513e62dc350429f92cbde09b7a5aa65c6765997945e76ec45bad3fd4b222

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp311-cp311-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp311-cp311-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9068e3d3912237024b05cc93d242d404f5a0aa1f4924de4ea779f219b6ae0d73
MD5 80aed4330dd296a37e7ca26fd5605e0e
BLAKE2b-256 8f4fdddd8734c00cda8912dbf4067f9dbf6fd7779c07c14d7f89630d2ffe1442

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b60ecd03283ffbeef0d943b3d8586e57c2f104aae962045d760dc059e63b4057
MD5 a5f3a22aab29d43386ee7097e5404515
BLAKE2b-256 8526989fd9675594ed6cebfb47f5da5bdc1934742818a5f7f14c3430a4fe8bb2

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f3bddfb86c4ce8781b205b8075e3f50e79fea19061991bb5050e2d67dca04a82
MD5 9fc3c5f98c39115931a169f0d68791aa
BLAKE2b-256 6c1cf255b0216263788ead089bbad8f220e23ee0e8b0d992a833e133dfefd03f

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 35af8587d1b2800c5a925f530ae44789b5d0d96feb24103b90f5be7daa385363
MD5 c63f98d3695af77f0fe96c218fb51123
BLAKE2b-256 d61f188dc6f14b92db18d4fd92e4289adc5fe176f780f47eef3fd1c0cff75dbd

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ed3418628f2ca5c2c13fa0a9eb8cac2580631c6753a9dbb1b9cfea91d501c0b2
MD5 2ec7066a788f917fd1a74c94573c3712
BLAKE2b-256 f22bc95c0c7d3fca4ff10f906b1671ab9adb7c9f84e4291b5288b94101fb93f9

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 4c397677ca650a43f631f243a0344a970341f2f8df1d8112cb59d0499003bf6b
MD5 f6e3391dff54c588d17928c51119f13b
BLAKE2b-256 de3fc71975d24dc763ae531fddca279845909222e3d09010a39f40657aabad28

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 19f8b512dd68d428e16e3df603f661a5b749d35bf96e4ce5bd359834ac57801e
MD5 052d40df680afc0b7fd286be70ecf5ae
BLAKE2b-256 dedb68cde2cb1ac6b20fe21e993b08c2ec8ee296719b3b9c8aa09ccbeb7d7915

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 561f0d90bc3ef9a20b9387a71044adecd01fa31c33f449e86c26fac2c3b07024
MD5 9d7101858c237a925077e1309f884acf
BLAKE2b-256 bc8967bd06f9b063425d368fbeb5611db494523630291874ede015ecab1d11f2

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4c2c2d5602bba3e5cf788a661dadcfb920880d3869fbefd5ce89a3e5c5848066
MD5 d74f27c14ef43e21c6df7c61724204c3
BLAKE2b-256 91ae954d974804e7fcd651f9071ad8d9f5a615d9dd92aa036ff25ae984026507

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4b688bd2cd85b2d973e8a077d9c7ccf06d6278539653a8dd71f4603e7f24cf5d
MD5 b0a89614fccd84faef938a63dc167cfe
BLAKE2b-256 b03ed716c94a134e468023a5af1df18e8ad6988161f2b4067c2c5ddb0b0090c6

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 2a9ba805cd9a2a52e6e150391e60706c17d6319e773544016ea717ff12f7af02
MD5 fe1c2dd7c01be424569cd7c1fbe8a1fc
BLAKE2b-256 d64e3ec1dd83514167a6b77a887a3ae770f70603237f9e411133699fb3f234c7

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7585092517faf87fb6c0d4f36da79549022e1165f8656fc76322dd7a67f69587
MD5 a5aa34aff29b5550d6b37acda65ad08a
BLAKE2b-256 fc973a966ab29d2a8b24f0c5c3cd119b1533f7922d4bf23b01b581d8a2d87f0d

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ad3d8cc33d65d3aeeb790eca9eea1281e427333517458a3c3d3e9af325171b90
MD5 21c5c2bb63a0da011dce5fa57a2228ef
BLAKE2b-256 a856957aa50770de1f1a95375b8581fadce6f02794591d59b5b4fa8f36776509

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bc3ebeac957099afd17346bb44e287e4abbb37b3a5c42129c44ba1f6e7204b3a
MD5 fd7540edbc03dc0b991be4dae6b9ab00
BLAKE2b-256 138ef91289313c2039108c26654e00007abe1ee83c67a626e6fc498aaf9d13fd

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 e8cbf1908998b41ed12aa7a109c3c4fb5968e61c0c87bca26f45d72246d1ffbb
MD5 05e4f9209dba950ee39d72e2dc60e498
BLAKE2b-256 50b764636dd0a09deb0a72abb63cc6f8badac423b8233d6135e6890ed65c6907

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 08923dea182287e8ba293e1da367b79ed364efa6cce86686b31f6b0302cc3db0
MD5 e45d95dea84e915c6f6a25f2450573c3
BLAKE2b-256 33adbe5b60beeb95b5ef1573a357c32c2b8f09008ef0217fee0d66aa310d7ba9

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 60a1480279e8d213be8eb907b82d4f69312d67af2db56577d413480a0f9c13d0
MD5 567f123ef12f7dc72c08cc06e42f7a02
BLAKE2b-256 42c33bee0a6eecbc3a2ef57be7c1403a66f506c8e42fa005db7cd66e6204c2cf

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f760be28df2bd6b2a340ac9614f54cb3ace6776038b33b75b0d48015ae44c4d8
MD5 ead6a85b0ef0def48f035602368dda37
BLAKE2b-256 1ac2d40a8bc4e1dffad8b91630667fdf5335a14e5ffa28c8459020f5452fd8cc

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7bb1ead96144f9d80dfc1e06a11174b4158d3be7177e901f1b441f0d1622edb6
MD5 b498a5a5edd5e2d8d2706f79371a5fad
BLAKE2b-256 cff9e7d3bf373af87fa6ceb77a882c9c9a27265b7114cfc8730b4532961a193a

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 5d098f3338cefa7434c4c3451b218cca6d77fffdce01a978bde446de4a13fa87
MD5 0198c759fe52bc1363a22e534013c220
BLAKE2b-256 bc9b9c9ce2337d174f65c858c29d3b940ea84199089a8d4a2e0a5adff3f097bb

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 13b74f14105e042d40f290c2bad6d5c8ee0ad7014bd01bdc5ec9c5b7e17d3f3c
MD5 90eedafd637b451b15846dc435be5a9f
BLAKE2b-256 90963510043b80467d19822b5710c8f6d3b59cbacfaa940e638d2acf968cc7ca

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9eebe95c9721d38d1e023cc51103830771095984a2fd305b1135d99f2fe20006
MD5 a8535ba6938bd3f5b888589369401a2b
BLAKE2b-256 9e530a9961566b94d37d6052d105c072d64f571a9fbd9e4da5b4b529a596ac9b

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1eb05a9bd788f8c6b37207809ef5415d6a51cce8b0250c513052f407c137ebb4
MD5 c78df583805a26d735bb955c6d5e195b
BLAKE2b-256 4e252d68358f6f4bedae878bebc89a1c1c95a38367eccd1da24cf1112b474fd5

See more details on using hashes here.

File details

Details for the file pure_checker-2.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pure_checker-2.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3b3b10aa1cd3ac5d47032f1db7102d31aeda6cdfb0273ce09805ce9d309b7cde
MD5 8ffe5c71d597da479e78e73a565d99e2
BLAKE2b-256 50235261a920a8931066755c0a49a7b90017313197585b2efaeaf035b3c7e517

See more details on using hashes here.

Supported by

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