Source code for malduck.compression.gzip
# Copyright (C) 2018 Jurriaan Bremer.
# This file is part of Roach - https://github.com/jbremer/roach.
# See the file 'docs/LICENSE.txt' for copying permission.
from __future__ import absolute_import
__all__ = ["gzip", "Gzip"]
from gzip import GzipFile
import io
import zlib
class Gzip:
r"""
gzip/zlib decompression
.. code-block:: python
from malduck import gzip, unhex
# zlib decompression
gzip(unhex(b'789ccb48cdc9c95728cf2fca4901001a0b045d'))
# gzip decompression (detected by 1f8b08 prefix)
gzip(unhex(b'1f8b08082199b75a0403312d3100cb48cdc9c95728cf2fca49010085114a0d0b000000'))
:param buf: Buffer to decompress
:type buf: bytes
:rtype: bytes
"""
def decompress(self, buf: bytes) -> bytes:
if buf.startswith(b"\x1f\x8b\x08"):
return GzipFile(fileobj=io.BytesIO(buf)).read()
return zlib.decompress(buf)
__call__ = decompress
gzip = Gzip()