A powerful declarative symmetric parser/builder for binary data
Project description
Malstruct
Malstruct is a powerful declarative and symmetrical parser and builder for binary data that was forked from construct as of release 2.10.70.
Instead of writing imperative code to parse a piece of data, you declaratively define a data structure that describes your data. As this data structure is not code, you can use it in one direction to parse data into Pythonic objects, and in the other direction, to build objects into binary data.
The library provides both simple, atomic constructs (such as integers of various sizes), as well as composite ones which allow you form hierarchical and sequential structures of increasing complexity. Construct features bit and byte granularity, easy debugging and testing, an easy-to-extend subclass system, and lots of primitive constructs to make your work easier:
Fields: raw bytes or numerical types
Structs and Sequences: combine simpler constructs into more complex ones
Bitwise: splitting bytes into bit-grained fields
Adapters: change how data is represented
Arrays/Ranges: duplicate constructs
Meta-constructs: use the context (history) to compute the size of data
If/Switch: branch the computational path based on the context
On-demand (lazy) parsing: read and parse only what you require
Pointers: jump from here to there in the data stream
Tunneling: prefix data with a byte count or compress it
Example
A Struct is a collection of ordered, named fields:
>>> format = Struct( ... "signature" / Const(b"BMP"), ... "width" / Int8ub, ... "height" / Int8ub, ... "pixels" / Array(this.width * this.height, Byte), ... ) >>> format.build(dict(width=3,height=2,pixels=[7,8,9,11,12,13])) b'BMP\x03\x02\x07\x08\t\x0b\x0c\r' >>> format.parse(b'BMP\x03\x02\x07\x08\t\x0b\x0c\r') Container(signature=b'BMP')(width=3)(height=2)(pixels=[7, 8, 9, 11, 12, 13])
A Sequence is a collection of ordered fields, and differs from Array and GreedyRange in that those two are homogenous:
>>> format = Sequence(PascalString(Byte, "utf8"), GreedyRange(Byte)) >>> format.build([u"lalaland", [255,1,2]]) b'\nlalaland\xff\x01\x02' >>> format.parse(b"\x004361789432197") ['', [52, 51, 54, 49, 55, 56, 57, 52, 51, 50, 49, 57, 55]]
Included in malstruct is the pecon (PE file reconstruction utility) package. Please see the pecon API documentation for more information.
Changelog
The format is based on Keep a Changelog, and this project adheres to Calendar Versioning with the schema MAJOR.MINOR.YYYY0M0D.
3.0.20260429 - 2026-04-29
Changed
Split out core functionality across adapters, alignment, analysis, bytes_, conditional, exceptions, expr, helpers, integers, lazy, mappings, miscellaneous, stream, strings, and transforms
Moved binary file analysis to malstruct.binaryfiles
Moved remaining malstruct.utils functionality to base level
Added pecon utility as an installed package
Move from “flat” layout to “src” layout
Use pyproject.toml configuration file for packaging
Removed
Removed usage of __all__ in init
Removed usage of compilation feature and benchmarks
Removed py3compat functionality
Removed pefileutils and elffileutils
Removed functionality from machoutils unrelated to malstructs/adapters
2.10.71
Changed
- Reverted default behavior changed by https://github.com/construct/construct/pull/1015
OffsettedEnd, Prefixed, FixedSize, NullTerminated, NullStriped, ProcessXor use offsets relative to the last occurrence of these subconstructs
To use offsets relative to the beginning of the stream set absolute=True when constructing these constructs
Moved optional dependencies to required dependencies
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file malstruct-3.0.20260429.tar.gz.
File metadata
- Download URL: malstruct-3.0.20260429.tar.gz
- Upload date:
- Size: 123.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b1653e004df79490754c37932fb550961f140d2e429d77311174c5a408f5556
|
|
| MD5 |
78eaae3dc1df12a2dba6fca86ac60271
|
|
| BLAKE2b-256 |
5c7f936cdee8a9d94c3695b26376a373df1a9884ac52d6447a36f8f4c5a9c74c
|
Provenance
The following attestation bundles were made for malstruct-3.0.20260429.tar.gz:
Publisher:
main.yml on ciphertechsolutions/malstruct
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malstruct-3.0.20260429.tar.gz -
Subject digest:
3b1653e004df79490754c37932fb550961f140d2e429d77311174c5a408f5556 - Sigstore transparency entry: 1406039775
- Sigstore integration time:
-
Permalink:
ciphertechsolutions/malstruct@a1e974c8f19ebfd428f260b6edc74a1712e8ae1a -
Branch / Tag:
refs/tags/3.0.20260429 - Owner: https://github.com/ciphertechsolutions
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a1e974c8f19ebfd428f260b6edc74a1712e8ae1a -
Trigger Event:
push
-
Statement type:
File details
Details for the file malstruct-3.0.20260429-py3-none-any.whl.
File metadata
- Download URL: malstruct-3.0.20260429-py3-none-any.whl
- Upload date:
- Size: 112.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a14d4fb2311fb876d61edbc802d5d0bd65b66f8deb16cea2bd24259bd25367d9
|
|
| MD5 |
2b914e9b8fbaa3d4feb60b2749c4a13e
|
|
| BLAKE2b-256 |
007e3c9f73c2908dd79ddc1ad3e989c851b409fa78debf4f2cd9e9663c17a095
|
Provenance
The following attestation bundles were made for malstruct-3.0.20260429-py3-none-any.whl:
Publisher:
main.yml on ciphertechsolutions/malstruct
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
malstruct-3.0.20260429-py3-none-any.whl -
Subject digest:
a14d4fb2311fb876d61edbc802d5d0bd65b66f8deb16cea2bd24259bd25367d9 - Sigstore transparency entry: 1406039910
- Sigstore integration time:
-
Permalink:
ciphertechsolutions/malstruct@a1e974c8f19ebfd428f260b6edc74a1712e8ae1a -
Branch / Tag:
refs/tags/3.0.20260429 - Owner: https://github.com/ciphertechsolutions
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a1e974c8f19ebfd428f260b6edc74a1712e8ae1a -
Trigger Event:
push
-
Statement type: