Example #1
0
    return bytes(~b & 0xFF for b in data)[::-1]


# fmt: off
Toif = c.Struct(
    "magic" / c.Const(b"TOI"),
    "format" / c.Enum(c.Byte, full_color=b"f", grayscale=b"g"),
    "width" / c.Int16ul,
    "height" / c.Int16ul,
    "data" / c.Prefixed(c.Int32ul, c.GreedyBytes),
)

VendorTrust = c.Transformed(
    c.BitStruct(
        "reserved" / c.Default(c.BitsInteger(9), 0),
        "show_vendor_string" / c.Flag,
        "require_user_click" / c.Flag,
        "red_background" / c.Flag,
        "delay" / c.BitsInteger(4),
    ), _transform_vendor_trust, 2, _transform_vendor_trust, 2)

VendorHeader = c.Struct(
    "_start_offset" / c.Tell,
    "magic" / c.Const(b"TRZV"),
    "_header_len" / c.Padding(4),
    "expiry" / c.Int32ul,
    "version" / c.Struct(
        "major" / c.Int8ul,
        "minor" / c.Int8ul,
    ),
    "vendor_sigs_required" / c.Int8ul,
    "vendor_sigs_n" / c.Rebuild(c.Int8ul, c.len_(c.this.pubkeys)),
Example #2
0
    return bytes(~b & 0xFF for b in data)


# fmt: off
Toif = c.Struct(
    "magic" / c.Const(b"TOI"),
    "format" / c.Enum(c.Byte, full_color=b"f", grayscale=b"g"),
    "width" / c.Int16ul,
    "height" / c.Int16ul,
    "data" / c.Prefixed(c.Int32ul, c.GreedyBytes),
)

VendorTrust = c.Transformed(
    c.BitStruct(
        "reserved" / c.Padding(9),
        "show_vendor_string" / c.Flag,
        "require_user_click" / c.Flag,
        "red_background" / c.Flag,
        "delay" / c.BitsInteger(4),
    ), bytes_not, 2, bytes_not, 2)

VendorHeader = c.Struct(
    "_start_offset" / c.Tell,
    "magic" / c.Const(b"TRZV"),
    "_header_len" / c.Padding(4),
    "expiry" / c.Int32ul,
    "version" / c.Struct(
        "major" / c.Int8ul,
        "minor" / c.Int8ul,
    ),
    "vendor_sigs_required" / c.Int8ul,
    "vendor_sigs_n" / c.Rebuild(c.Int8ul, c.len_(c.this.pubkeys)),
Example #3
0
import construct as c

from . import CompactUint, ConstFlag, Optional

BitcoinBytes = c.Prefixed(CompactUint, c.GreedyBytes)
"""Bitcoin string of bytes.

Encoded as a CompactUint length followed by that many bytes.
"""

TxHash = c.Transformed(c.Bytes(32), lambda b: b[::-1], 32, lambda b: b[::-1], 32)
"""Transaction hash, encoded as a reversed sequence of bytes."""

TxInput = c.Struct(
    "tx" / TxHash,
    "index" / c.Int32ul,
    "script_sig" / BitcoinBytes,
    "sequence" / c.Int32ul,
)
"""Transaction input."""

TxOutput = c.Struct("value" / c.Int64ul, "script_pubkey" / BitcoinBytes)
"""Transaction output."""

TxInputWitness = c.PrefixedArray(CompactUint, BitcoinBytes)
"""Array of witness records."""

Transaction = c.Struct(
    "version" / c.Int32ul,
    "segwit" / ConstFlag(b"\x00\x01"),
    "inputs" / c.PrefixedArray(CompactUint, TxInput),
Example #4
0
 def struct(cls):
     return construct.Struct(
         "signature" / construct.Const(b"vf"),
         "version" / _LMArchiveVersionValidator(construct.Int32ul),
         "count" / construct.Int32ul,
         "filenames" / construct.Array(
             construct.this.count,
             construct.IfThenElse(
                 construct.this.version >= 100,
                 construct.Prefixed(
                     construct.Int32ul,
                     construct.Transformed(
                         construct.GreedyString('cp932'),
                         LMObfuscator().transform_bytes,
                         None,
                         LMObfuscator().transform_bytes,
                         None,
                     ),
                 ),
                 construct.PascalString(construct.Int32ul, 'cp932'),
             )),
         "offsets" / construct.Array(
             construct.this.count + 1,
             construct.Struct(
                 "offset_low" / construct.IfThenElse(
                     construct.this._.version >= 100,
                     construct.Transformed(
                         construct.Int32ul,
                         LMObfuscator().transform_int,
                         4,
                         LMObfuscator().transform_int,
                         4,
                     ),
                     construct.Int32ul,
                 ),
                 # offset_high always 0 if ver < 101
                 "offset_high" / construct.IfThenElse(
                     construct.this._.version >= 101,
                     construct.Transformed(
                         construct.Int32ul,
                         LMObfuscator().transform_int,
                         4,
                         LMObfuscator().transform_int_high,
                         4,
                     ),
                     construct.Int32ul,
                 ),
             ),
         ),
         "compress_types" /
         construct.Array(construct.this.count,
                         construct.Enum(construct.Byte, LMCompressType)),
         "unk1s" / construct.Array(
             construct.this.count,
             # construct.Transformed(
             #     construct.Int32ul,
             #     LMObfuscator().transform_int,
             #     4,
             #     LMObfuscator().transform_int,
             #     4,
             # ),
             construct.Int32ul,
         ),
         "checksums" / construct.Array(
             construct.this.count,
             construct.Int32ul,
         ),
         "encrypt_flags" / construct.Array(
             construct.this.count,
             construct.Byte,
         ),
     )