Skip to main content

A file integrity verifier based on the format of the file.

Project description

integv

codecov unittest

integv is a file integrity verifier based on the format of the file. It's capable of checking the integrity of multiple types of files without any additional information like Content-Length or checksum. The main goal of integv is to detect file corruption (mostly shortened) during file download caused by network glitch. But integv still can be used for many other purposes as well.

Installation

pip install integv

Quick Start

import integv

# load a test mp4 file
file_path = "./test/sample/video/sample.mp4"
with open(file_path, "rb") as f:
   file = f.read()

# initiate a verifier
verifier = integv.FileIntegrityVerifier()

# verify using the file and file_type
# file_type can be a simple filename extension like "mp4" or "jpg"
# or you can provide a full MIME type like "video/mp4" or "image/jpeg"
verifier.verify(file, file_type="mp4") # True

# a corrupted file (in this case, shortened by one byte) will not pass the verification
verifier.verify(file[:-1], file_type="mp4") # False

# the file input for the verifier can be bytes or a binary file like object
verifier.verify(open(file_path, "rb"), file_type="mp4") # True

# it can also be a string representing a file path
# if the file path contains a proper filename extension, the file_type is not needed.
verifier.verify(file_path) # True

Supported types

Video

  • mp4: video/mp4
  • mkv: video/x-matroska
  • webm: video/webm

Image

  • jpeg: image/jpeg
  • png: image/png
  • gif: image/gif
  • webp image/webp

Audio

  • wav: audio/x-wav
  • ogg: audio/ogg

Limitation of integv

The integv verifier only checks the file by the format information embedded in file like file size in header, chuck size in chuck header, end of file markers, etc. It does not try to decode the file which makes integv fast and simple. But that also means the possibility of false negative (corrupted files can't be detected). The baseline of all integv file integrity verifiers must be extremely sensitive to shortened files, which is very common in file downloaded from the network. Some types of files like png contain checksum inside, which is less error-prone. By all means, do not use integv for any kind of security verification. As a bad file which passes the verification can be simply forged.

Advanced Usage

Specialized File Integrity Verifier

There are some specialized file integrity verifier for different types of files. You can find them in integv.video, integv.image and integv.audio. They are used exactly like the FileIntegrityVerifier except file_type are not needed.

from integv.video import MP4IntegrityVerifier

verifier = MP4IntegrityVerifier()
verifier.verify("./test/sample/video/sample.mp4") # True

Optional slow argument in verifier initialization

A boolean argument slow can be provided in verifier initialization. It will enable some sophisticated verification to eliminate false negatives. And that will consume more time. The default value of slow is False. For now, only one verifier, OGGIntegrityVerifier has a slow method of verification.

from integv import FileIntegrityVerifier

verifier = FileIntegrityVerifier()
slow_verifier = FileIntegrityVerifier(slow=True)

file_path = "./test/sample/audio/sample.ogg"
verifier.verify(file_path) # True
slow_verifier.verify(file_path) # also True, but slower

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

integv-1.0.1.tar.gz (10.7 kB view hashes)

Uploaded Source

Built Distribution

integv-1.0.1-py3-none-any.whl (23.0 kB view hashes)

Uploaded Python 3

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