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)),
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)),
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),
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, ), )