polyfile-weave 0.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of polyfile-weave might be problematic. Click here for more details.
- polyfile/__init__.py +15 -0
- polyfile/__main__.py +394 -0
- polyfile/arithmetic.py +27 -0
- polyfile/ast.py +114 -0
- polyfile/debugger.py +1039 -0
- polyfile/expressions.py +346 -0
- polyfile/fileutils.py +343 -0
- polyfile/html.py +135 -0
- polyfile/http/__init__.py +1 -0
- polyfile/http/defacto.py +37 -0
- polyfile/http/deprecated.py +51 -0
- polyfile/http/experimental.py +67 -0
- polyfile/http/http_11.py +548 -0
- polyfile/http/matcher.py +37 -0
- polyfile/http/structured_headers.py +48 -0
- polyfile/iterators.py +72 -0
- polyfile/jpeg.py +24 -0
- polyfile/kaitai/__init__.py +0 -0
- polyfile/kaitai/compiler.py +156 -0
- polyfile/kaitai/parser.py +312 -0
- polyfile/kaitai/parsers/__init__.py +0 -0
- polyfile/kaitai/parsers/aix_utmp.py +116 -0
- polyfile/kaitai/parsers/allegro_dat.py +367 -0
- polyfile/kaitai/parsers/andes_firmware.py +64 -0
- polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
- polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
- polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
- polyfile/kaitai/parsers/android_dto.py +138 -0
- polyfile/kaitai/parsers/android_img.py +319 -0
- polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
- polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
- polyfile/kaitai/parsers/android_sparse.py +237 -0
- polyfile/kaitai/parsers/android_super.py +401 -0
- polyfile/kaitai/parsers/apm_partition_table.py +196 -0
- polyfile/kaitai/parsers/apple_single_double.py +180 -0
- polyfile/kaitai/parsers/asn1_der.py +235 -0
- polyfile/kaitai/parsers/au.py +138 -0
- polyfile/kaitai/parsers/avantes_roh60.py +112 -0
- polyfile/kaitai/parsers/avi.py +296 -0
- polyfile/kaitai/parsers/bcd.py +111 -0
- polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
- polyfile/kaitai/parsers/blender_blend.py +334 -0
- polyfile/kaitai/parsers/bmp.py +780 -0
- polyfile/kaitai/parsers/bson.py +411 -0
- polyfile/kaitai/parsers/btrfs_stream.py +318 -0
- polyfile/kaitai/parsers/bytes_with_io.py +27 -0
- polyfile/kaitai/parsers/chrome_pak.py +194 -0
- polyfile/kaitai/parsers/code_6502.py +456 -0
- polyfile/kaitai/parsers/compressed_resource.py +217 -0
- polyfile/kaitai/parsers/cpio_old_le.py +154 -0
- polyfile/kaitai/parsers/cramfs.py +344 -0
- polyfile/kaitai/parsers/creative_voice_file.py +342 -0
- polyfile/kaitai/parsers/dbf.py +274 -0
- polyfile/kaitai/parsers/dcmp_0.py +664 -0
- polyfile/kaitai/parsers/dcmp_1.py +422 -0
- polyfile/kaitai/parsers/dcmp_2.py +312 -0
- polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
- polyfile/kaitai/parsers/dex.py +1086 -0
- polyfile/kaitai/parsers/dicom.py +4370 -0
- polyfile/kaitai/parsers/dime_message.py +201 -0
- polyfile/kaitai/parsers/dns_packet.py +569 -0
- polyfile/kaitai/parsers/doom_wad.py +654 -0
- polyfile/kaitai/parsers/dos_datetime.py +191 -0
- polyfile/kaitai/parsers/dos_mz.py +172 -0
- polyfile/kaitai/parsers/ds_store.py +513 -0
- polyfile/kaitai/parsers/dtb.py +310 -0
- polyfile/kaitai/parsers/dune_2_pak.py +126 -0
- polyfile/kaitai/parsers/edid.py +472 -0
- polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
- polyfile/kaitai/parsers/elf.py +2482 -0
- polyfile/kaitai/parsers/ethernet_frame.py +114 -0
- polyfile/kaitai/parsers/exif.py +723 -0
- polyfile/kaitai/parsers/ext2.py +537 -0
- polyfile/kaitai/parsers/fallout2_dat.py +187 -0
- polyfile/kaitai/parsers/fallout_dat.py +156 -0
- polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
- polyfile/kaitai/parsers/ftl_dat.py +90 -0
- polyfile/kaitai/parsers/genmidi_op2.py +161 -0
- polyfile/kaitai/parsers/gettext_mo.py +541 -0
- polyfile/kaitai/parsers/gif.py +492 -0
- polyfile/kaitai/parsers/gimp_brush.py +244 -0
- polyfile/kaitai/parsers/glibc_utmp.py +114 -0
- polyfile/kaitai/parsers/gltf_binary.py +132 -0
- polyfile/kaitai/parsers/google_protobuf.py +151 -0
- polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
- polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
- polyfile/kaitai/parsers/grub2_font.py +337 -0
- polyfile/kaitai/parsers/gzip.py +232 -0
- polyfile/kaitai/parsers/hashcat_restore.py +60 -0
- polyfile/kaitai/parsers/hccap.py +111 -0
- polyfile/kaitai/parsers/hccapx.py +103 -0
- polyfile/kaitai/parsers/heaps_pak.py +177 -0
- polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
- polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
- polyfile/kaitai/parsers/icmp_packet.py +136 -0
- polyfile/kaitai/parsers/ico.py +129 -0
- polyfile/kaitai/parsers/id3v1_1.py +220 -0
- polyfile/kaitai/parsers/id3v2_3.py +324 -0
- polyfile/kaitai/parsers/id3v2_4.py +423 -0
- polyfile/kaitai/parsers/ines.py +282 -0
- polyfile/kaitai/parsers/ipv4_packet.py +158 -0
- polyfile/kaitai/parsers/ipv6_packet.py +55 -0
- polyfile/kaitai/parsers/iso9660.py +544 -0
- polyfile/kaitai/parsers/java_class.py +1113 -0
- polyfile/kaitai/parsers/jpeg.py +361 -0
- polyfile/kaitai/parsers/luks.py +149 -0
- polyfile/kaitai/parsers/lzh.py +165 -0
- polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
- polyfile/kaitai/parsers/mach_o.py +3033 -0
- polyfile/kaitai/parsers/mach_o_fat.py +92 -0
- polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
- polyfile/kaitai/parsers/manifest.json +1 -0
- polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
- polyfile/kaitai/parsers/mcap.py +1015 -0
- polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
- polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
- polyfile/kaitai/parsers/microsoft_pe.py +765 -0
- polyfile/kaitai/parsers/mifare_classic.py +706 -0
- polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
- polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
- polyfile/kaitai/parsers/mozilla_mar.py +239 -0
- polyfile/kaitai/parsers/mp4.py +333 -0
- polyfile/kaitai/parsers/msgpack.py +467 -0
- polyfile/kaitai/parsers/nitf.py +1189 -0
- polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
- polyfile/kaitai/parsers/ogg.py +118 -0
- polyfile/kaitai/parsers/openpgp_message.py +993 -0
- polyfile/kaitai/parsers/packet_ppi.py +515 -0
- polyfile/kaitai/parsers/pcap.py +344 -0
- polyfile/kaitai/parsers/pcf_font.py +506 -0
- polyfile/kaitai/parsers/pcx.py +195 -0
- polyfile/kaitai/parsers/pcx_dcx.py +79 -0
- polyfile/kaitai/parsers/phar_without_stub.py +399 -0
- polyfile/kaitai/parsers/php_serialized_value.py +505 -0
- polyfile/kaitai/parsers/png.py +721 -0
- polyfile/kaitai/parsers/protocol_body.py +260 -0
- polyfile/kaitai/parsers/psx_tim.py +104 -0
- polyfile/kaitai/parsers/python_pickle.py +718 -0
- polyfile/kaitai/parsers/python_pyc_27.py +510 -0
- polyfile/kaitai/parsers/quake_mdl.py +441 -0
- polyfile/kaitai/parsers/quake_pak.py +112 -0
- polyfile/kaitai/parsers/quicktime_mov.py +634 -0
- polyfile/kaitai/parsers/rar.py +265 -0
- polyfile/kaitai/parsers/regf.py +569 -0
- polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
- polyfile/kaitai/parsers/resource_fork.py +611 -0
- polyfile/kaitai/parsers/respack.py +57 -0
- polyfile/kaitai/parsers/riff.py +409 -0
- polyfile/kaitai/parsers/rpm.py +964 -0
- polyfile/kaitai/parsers/rtcp_payload.py +579 -0
- polyfile/kaitai/parsers/rtp_packet.py +150 -0
- polyfile/kaitai/parsers/rtpdump.py +115 -0
- polyfile/kaitai/parsers/ruby_marshal.py +423 -0
- polyfile/kaitai/parsers/s3m.py +493 -0
- polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
- polyfile/kaitai/parsers/shapefile_index.py +174 -0
- polyfile/kaitai/parsers/shapefile_main.py +893 -0
- polyfile/kaitai/parsers/some_ip.py +209 -0
- polyfile/kaitai/parsers/some_ip_container.py +37 -0
- polyfile/kaitai/parsers/some_ip_sd.py +86 -0
- polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
- polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
- polyfile/kaitai/parsers/specpr.py +404 -0
- polyfile/kaitai/parsers/sqlite3.py +472 -0
- polyfile/kaitai/parsers/ssh_public_key.py +252 -0
- polyfile/kaitai/parsers/standard_midi_file.py +390 -0
- polyfile/kaitai/parsers/stl.py +111 -0
- polyfile/kaitai/parsers/sudoers_ts.py +201 -0
- polyfile/kaitai/parsers/swf.py +406 -0
- polyfile/kaitai/parsers/systemd_journal.py +361 -0
- polyfile/kaitai/parsers/tcp_segment.py +57 -0
- polyfile/kaitai/parsers/tga.py +213 -0
- polyfile/kaitai/parsers/tls_client_hello.py +293 -0
- polyfile/kaitai/parsers/tr_dos_image.py +322 -0
- polyfile/kaitai/parsers/tsm.py +198 -0
- polyfile/kaitai/parsers/ttf.py +1847 -0
- polyfile/kaitai/parsers/udp_datagram.py +42 -0
- polyfile/kaitai/parsers/uefi_te.py +236 -0
- polyfile/kaitai/parsers/uimage.py +198 -0
- polyfile/kaitai/parsers/utf8_string.py +137 -0
- polyfile/kaitai/parsers/vfat.py +410 -0
- polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
- polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
- polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
- polyfile/kaitai/parsers/vp8_ivf.py +112 -0
- polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
- polyfile/kaitai/parsers/wav.py +1014 -0
- polyfile/kaitai/parsers/websocket.py +167 -0
- polyfile/kaitai/parsers/windows_evt_log.py +304 -0
- polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
- polyfile/kaitai/parsers/windows_minidump.py +575 -0
- polyfile/kaitai/parsers/windows_resource_file.py +243 -0
- polyfile/kaitai/parsers/windows_shell_items.py +190 -0
- polyfile/kaitai/parsers/windows_systemtime.py +52 -0
- polyfile/kaitai/parsers/wmf.py +502 -0
- polyfile/kaitai/parsers/xar.py +181 -0
- polyfile/kaitai/parsers/xwd.py +189 -0
- polyfile/kaitai/parsers/zip.py +685 -0
- polyfile/kaitai/parsers/zisofs.py +158 -0
- polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
- polyfile/kaitaimatcher.py +113 -0
- polyfile/languagematcher.py +217 -0
- polyfile/logger.py +135 -0
- polyfile/magic.py +2983 -0
- polyfile/magic_defs/COPYING +29 -0
- polyfile/magic_defs/__init__.py +0 -0
- polyfile/magic_defs/acorn +102 -0
- polyfile/magic_defs/adi +13 -0
- polyfile/magic_defs/adventure +122 -0
- polyfile/magic_defs/aes +29 -0
- polyfile/magic_defs/algol68 +35 -0
- polyfile/magic_defs/allegro +9 -0
- polyfile/magic_defs/alliant +18 -0
- polyfile/magic_defs/alpha +32 -0
- polyfile/magic_defs/amanda +12 -0
- polyfile/magic_defs/amigaos +218 -0
- polyfile/magic_defs/android +259 -0
- polyfile/magic_defs/animation +1197 -0
- polyfile/magic_defs/aout +46 -0
- polyfile/magic_defs/apache +28 -0
- polyfile/magic_defs/apl +7 -0
- polyfile/magic_defs/apple +773 -0
- polyfile/magic_defs/application +7 -0
- polyfile/magic_defs/applix +13 -0
- polyfile/magic_defs/apt +52 -0
- polyfile/magic_defs/archive +2586 -0
- polyfile/magic_defs/aria +38 -0
- polyfile/magic_defs/arm +50 -0
- polyfile/magic_defs/asf +132 -0
- polyfile/magic_defs/assembler +18 -0
- polyfile/magic_defs/asterix +18 -0
- polyfile/magic_defs/att3b +41 -0
- polyfile/magic_defs/audio +1291 -0
- polyfile/magic_defs/avm +33 -0
- polyfile/magic_defs/basis +18 -0
- polyfile/magic_defs/beetle +7 -0
- polyfile/magic_defs/ber +65 -0
- polyfile/magic_defs/bflt +14 -0
- polyfile/magic_defs/bhl +10 -0
- polyfile/magic_defs/bioinformatics +178 -0
- polyfile/magic_defs/biosig +154 -0
- polyfile/magic_defs/blackberry +8 -0
- polyfile/magic_defs/blcr +25 -0
- polyfile/magic_defs/blender +50 -0
- polyfile/magic_defs/blit +24 -0
- polyfile/magic_defs/bm +10 -0
- polyfile/magic_defs/bout +11 -0
- polyfile/magic_defs/bsdi +33 -0
- polyfile/magic_defs/bsi +10 -0
- polyfile/magic_defs/btsnoop +13 -0
- polyfile/magic_defs/burp +7 -0
- polyfile/magic_defs/bytecode +41 -0
- polyfile/magic_defs/c-lang +110 -0
- polyfile/magic_defs/c64 +531 -0
- polyfile/magic_defs/cad +437 -0
- polyfile/magic_defs/cafebabe +107 -0
- polyfile/magic_defs/cbor +21 -0
- polyfile/magic_defs/ccf +14 -0
- polyfile/magic_defs/cddb +12 -0
- polyfile/magic_defs/chord +15 -0
- polyfile/magic_defs/cisco +12 -0
- polyfile/magic_defs/citrus +12 -0
- polyfile/magic_defs/clarion +27 -0
- polyfile/magic_defs/claris +48 -0
- polyfile/magic_defs/clipper +65 -0
- polyfile/magic_defs/clojure +30 -0
- polyfile/magic_defs/coff +98 -0
- polyfile/magic_defs/commands +201 -0
- polyfile/magic_defs/communications +22 -0
- polyfile/magic_defs/compress +461 -0
- polyfile/magic_defs/console +1213 -0
- polyfile/magic_defs/convex +69 -0
- polyfile/magic_defs/coverage +91 -0
- polyfile/magic_defs/cracklib +14 -0
- polyfile/magic_defs/crypto +31 -0
- polyfile/magic_defs/csv +8 -0
- polyfile/magic_defs/ctags +6 -0
- polyfile/magic_defs/ctf +23 -0
- polyfile/magic_defs/cubemap +8 -0
- polyfile/magic_defs/cups +56 -0
- polyfile/magic_defs/dact +11 -0
- polyfile/magic_defs/database +886 -0
- polyfile/magic_defs/dataone +47 -0
- polyfile/magic_defs/dbpf +15 -0
- polyfile/magic_defs/der +146 -0
- polyfile/magic_defs/diamond +12 -0
- polyfile/magic_defs/dif +33 -0
- polyfile/magic_defs/diff +41 -0
- polyfile/magic_defs/digital +59 -0
- polyfile/magic_defs/dolby +69 -0
- polyfile/magic_defs/dsf +25 -0
- polyfile/magic_defs/dump +96 -0
- polyfile/magic_defs/dwarfs +45 -0
- polyfile/magic_defs/dyadic +61 -0
- polyfile/magic_defs/ebml +8 -0
- polyfile/magic_defs/edid +11 -0
- polyfile/magic_defs/editors +43 -0
- polyfile/magic_defs/efi +15 -0
- polyfile/magic_defs/elf +379 -0
- polyfile/magic_defs/encore +22 -0
- polyfile/magic_defs/epoc +62 -0
- polyfile/magic_defs/erlang +21 -0
- polyfile/magic_defs/espressif +57 -0
- polyfile/magic_defs/esri +28 -0
- polyfile/magic_defs/etf +33 -0
- polyfile/magic_defs/fcs +9 -0
- polyfile/magic_defs/filesystems +2694 -0
- polyfile/magic_defs/finger +16 -0
- polyfile/magic_defs/firmware +133 -0
- polyfile/magic_defs/flash +62 -0
- polyfile/magic_defs/flif +36 -0
- polyfile/magic_defs/fonts +449 -0
- polyfile/magic_defs/forth +82 -0
- polyfile/magic_defs/fortran +9 -0
- polyfile/magic_defs/frame +62 -0
- polyfile/magic_defs/freebsd +164 -0
- polyfile/magic_defs/fsav +128 -0
- polyfile/magic_defs/fusecompress +12 -0
- polyfile/magic_defs/games +696 -0
- polyfile/magic_defs/gcc +17 -0
- polyfile/magic_defs/gconv +10 -0
- polyfile/magic_defs/gentoo +85 -0
- polyfile/magic_defs/geo +166 -0
- polyfile/magic_defs/geos +20 -0
- polyfile/magic_defs/gimp +77 -0
- polyfile/magic_defs/git +13 -0
- polyfile/magic_defs/glibc +21 -0
- polyfile/magic_defs/gnome +59 -0
- polyfile/magic_defs/gnu +173 -0
- polyfile/magic_defs/gnumeric +8 -0
- polyfile/magic_defs/gpt +240 -0
- polyfile/magic_defs/gpu +28 -0
- polyfile/magic_defs/grace +21 -0
- polyfile/magic_defs/graphviz +12 -0
- polyfile/magic_defs/gringotts +48 -0
- polyfile/magic_defs/guile +13 -0
- polyfile/magic_defs/hardware +12 -0
- polyfile/magic_defs/hitachi-sh +30 -0
- polyfile/magic_defs/hp +433 -0
- polyfile/magic_defs/human68k +26 -0
- polyfile/magic_defs/ibm370 +52 -0
- polyfile/magic_defs/ibm6000 +35 -0
- polyfile/magic_defs/icc +214 -0
- polyfile/magic_defs/iff +80 -0
- polyfile/magic_defs/images +4210 -0
- polyfile/magic_defs/inform +9 -0
- polyfile/magic_defs/intel +310 -0
- polyfile/magic_defs/interleaf +9 -0
- polyfile/magic_defs/island +10 -0
- polyfile/magic_defs/ispell +63 -0
- polyfile/magic_defs/isz +15 -0
- polyfile/magic_defs/java +52 -0
- polyfile/magic_defs/javascript +171 -0
- polyfile/magic_defs/jpeg +252 -0
- polyfile/magic_defs/json +8 -0
- polyfile/magic_defs/karma +9 -0
- polyfile/magic_defs/kde +11 -0
- polyfile/magic_defs/keepass +20 -0
- polyfile/magic_defs/kerberos +45 -0
- polyfile/magic_defs/kicad +85 -0
- polyfile/magic_defs/kml +34 -0
- polyfile/magic_defs/lammps +64 -0
- polyfile/magic_defs/lecter +6 -0
- polyfile/magic_defs/lex +12 -0
- polyfile/magic_defs/lif +50 -0
- polyfile/magic_defs/linux +557 -0
- polyfile/magic_defs/lisp +78 -0
- polyfile/magic_defs/llvm +22 -0
- polyfile/magic_defs/locoscript +12 -0
- polyfile/magic_defs/lua +31 -0
- polyfile/magic_defs/luks +126 -0
- polyfile/magic_defs/m4 +11 -0
- polyfile/magic_defs/mach +303 -0
- polyfile/magic_defs/macintosh +505 -0
- polyfile/magic_defs/macos +7 -0
- polyfile/magic_defs/magic +10 -0
- polyfile/magic_defs/magic.mgc +0 -0
- polyfile/magic_defs/mail.news +132 -0
- polyfile/magic_defs/make +21 -0
- polyfile/magic_defs/map +413 -0
- polyfile/magic_defs/maple +109 -0
- polyfile/magic_defs/marc21 +30 -0
- polyfile/magic_defs/mathcad +8 -0
- polyfile/magic_defs/mathematica +188 -0
- polyfile/magic_defs/matroska +17 -0
- polyfile/magic_defs/mcrypt +52 -0
- polyfile/magic_defs/measure +44 -0
- polyfile/magic_defs/mercurial +13 -0
- polyfile/magic_defs/metastore +8 -0
- polyfile/magic_defs/meteorological +53 -0
- polyfile/magic_defs/microfocus +21 -0
- polyfile/magic_defs/mime +9 -0
- polyfile/magic_defs/mips +120 -0
- polyfile/magic_defs/mirage +8 -0
- polyfile/magic_defs/misctools +140 -0
- polyfile/magic_defs/mkid +11 -0
- polyfile/magic_defs/mlssa +8 -0
- polyfile/magic_defs/mmdf +6 -0
- polyfile/magic_defs/modem +92 -0
- polyfile/magic_defs/modulefile +9 -0
- polyfile/magic_defs/motorola +71 -0
- polyfile/magic_defs/mozilla +37 -0
- polyfile/magic_defs/msdos +2304 -0
- polyfile/magic_defs/msooxml +68 -0
- polyfile/magic_defs/msvc +222 -0
- polyfile/magic_defs/msx +309 -0
- polyfile/magic_defs/mup +24 -0
- polyfile/magic_defs/music +17 -0
- polyfile/magic_defs/nasa +7 -0
- polyfile/magic_defs/natinst +24 -0
- polyfile/magic_defs/ncr +49 -0
- polyfile/magic_defs/neko +12 -0
- polyfile/magic_defs/netbsd +251 -0
- polyfile/magic_defs/netscape +26 -0
- polyfile/magic_defs/netware +11 -0
- polyfile/magic_defs/news +13 -0
- polyfile/magic_defs/nifty +202 -0
- polyfile/magic_defs/nim-lang +29 -0
- polyfile/magic_defs/nitpicker +14 -0
- polyfile/magic_defs/numpy +9 -0
- polyfile/magic_defs/oasis +12 -0
- polyfile/magic_defs/ocaml +14 -0
- polyfile/magic_defs/octave +6 -0
- polyfile/magic_defs/ole2compounddocs +760 -0
- polyfile/magic_defs/olf +98 -0
- polyfile/magic_defs/openfst +17 -0
- polyfile/magic_defs/opentimestamps +16 -0
- polyfile/magic_defs/oric +16 -0
- polyfile/magic_defs/os2 +186 -0
- polyfile/magic_defs/os400 +39 -0
- polyfile/magic_defs/os9 +80 -0
- polyfile/magic_defs/osf1 +10 -0
- polyfile/magic_defs/palm +156 -0
- polyfile/magic_defs/parix +13 -0
- polyfile/magic_defs/parrot +22 -0
- polyfile/magic_defs/pascal +39 -0
- polyfile/magic_defs/pbf +11 -0
- polyfile/magic_defs/pbm +8 -0
- polyfile/magic_defs/pc88 +24 -0
- polyfile/magic_defs/pc98 +77 -0
- polyfile/magic_defs/pci_ids +116 -0
- polyfile/magic_defs/pcjr +8 -0
- polyfile/magic_defs/pdf +51 -0
- polyfile/magic_defs/pdp +42 -0
- polyfile/magic_defs/perl +100 -0
- polyfile/magic_defs/pgf +52 -0
- polyfile/magic_defs/pgp +581 -0
- polyfile/magic_defs/pgp-binary-keys +388 -0
- polyfile/magic_defs/pkgadd +7 -0
- polyfile/magic_defs/plan9 +25 -0
- polyfile/magic_defs/playdate +57 -0
- polyfile/magic_defs/plus5 +18 -0
- polyfile/magic_defs/pmem +46 -0
- polyfile/magic_defs/polyfile_zip +5 -0
- polyfile/magic_defs/polyml +23 -0
- polyfile/magic_defs/printer +269 -0
- polyfile/magic_defs/project +10 -0
- polyfile/magic_defs/psdbms +14 -0
- polyfile/magic_defs/psl +14 -0
- polyfile/magic_defs/pulsar +13 -0
- polyfile/magic_defs/puzzle +17 -0
- polyfile/magic_defs/pwsafe +14 -0
- polyfile/magic_defs/pyramid +12 -0
- polyfile/magic_defs/python +305 -0
- polyfile/magic_defs/qt +30 -0
- polyfile/magic_defs/revision +66 -0
- polyfile/magic_defs/riff +840 -0
- polyfile/magic_defs/rinex +44 -0
- polyfile/magic_defs/ringdove +45 -0
- polyfile/magic_defs/rpi +52 -0
- polyfile/magic_defs/rpm +45 -0
- polyfile/magic_defs/rpmsg +7 -0
- polyfile/magic_defs/rst +11 -0
- polyfile/magic_defs/rtf +94 -0
- polyfile/magic_defs/ruby +55 -0
- polyfile/magic_defs/rust +21 -0
- polyfile/magic_defs/sc +7 -0
- polyfile/magic_defs/sccs +24 -0
- polyfile/magic_defs/scientific +144 -0
- polyfile/magic_defs/securitycerts +6 -0
- polyfile/magic_defs/selinux +24 -0
- polyfile/magic_defs/sendmail +37 -0
- polyfile/magic_defs/sequent +42 -0
- polyfile/magic_defs/sereal +35 -0
- polyfile/magic_defs/sgi +144 -0
- polyfile/magic_defs/sgml +161 -0
- polyfile/magic_defs/sharc +23 -0
- polyfile/magic_defs/sinclair +40 -0
- polyfile/magic_defs/sisu +18 -0
- polyfile/magic_defs/sketch +6 -0
- polyfile/magic_defs/smalltalk +25 -0
- polyfile/magic_defs/smile +34 -0
- polyfile/magic_defs/sniffer +482 -0
- polyfile/magic_defs/softquad +40 -0
- polyfile/magic_defs/sosi +40 -0
- polyfile/magic_defs/spec +21 -0
- polyfile/magic_defs/spectrum +184 -0
- polyfile/magic_defs/sql +288 -0
- polyfile/magic_defs/ssh +39 -0
- polyfile/magic_defs/ssl +20 -0
- polyfile/magic_defs/statistics +45 -0
- polyfile/magic_defs/subtitle +38 -0
- polyfile/magic_defs/sun +141 -0
- polyfile/magic_defs/svf +5 -0
- polyfile/magic_defs/sylk +36 -0
- polyfile/magic_defs/symbos +42 -0
- polyfile/magic_defs/sysex +429 -0
- polyfile/magic_defs/tcl +29 -0
- polyfile/magic_defs/teapot +6 -0
- polyfile/magic_defs/terminfo +63 -0
- polyfile/magic_defs/tex +141 -0
- polyfile/magic_defs/tgif +7 -0
- polyfile/magic_defs/ti-8x +239 -0
- polyfile/magic_defs/timezone +42 -0
- polyfile/magic_defs/tplink +95 -0
- polyfile/magic_defs/troff +38 -0
- polyfile/magic_defs/tuxedo +8 -0
- polyfile/magic_defs/typeset +8 -0
- polyfile/magic_defs/uf2 +72 -0
- polyfile/magic_defs/unicode +15 -0
- polyfile/magic_defs/unisig +12 -0
- polyfile/magic_defs/unknown +34 -0
- polyfile/magic_defs/usd +21 -0
- polyfile/magic_defs/uterus +16 -0
- polyfile/magic_defs/uuencode +28 -0
- polyfile/magic_defs/vacuum-cleaner +54 -0
- polyfile/magic_defs/varied.out +46 -0
- polyfile/magic_defs/varied.script +21 -0
- polyfile/magic_defs/vax +32 -0
- polyfile/magic_defs/vicar +17 -0
- polyfile/magic_defs/virtual +307 -0
- polyfile/magic_defs/virtutech +12 -0
- polyfile/magic_defs/visx +32 -0
- polyfile/magic_defs/vms +30 -0
- polyfile/magic_defs/vmware +6 -0
- polyfile/magic_defs/vorbis +155 -0
- polyfile/magic_defs/vxl +14 -0
- polyfile/magic_defs/warc +16 -0
- polyfile/magic_defs/weak +16 -0
- polyfile/magic_defs/web +18 -0
- polyfile/magic_defs/webassembly +17 -0
- polyfile/magic_defs/windows +1811 -0
- polyfile/magic_defs/wireless +7 -0
- polyfile/magic_defs/wordprocessors +630 -0
- polyfile/magic_defs/wsdl +23 -0
- polyfile/magic_defs/x68000 +25 -0
- polyfile/magic_defs/xdelta +13 -0
- polyfile/magic_defs/xenix +106 -0
- polyfile/magic_defs/xilinx +58 -0
- polyfile/magic_defs/xo65 +37 -0
- polyfile/magic_defs/xwindows +43 -0
- polyfile/magic_defs/yara +17 -0
- polyfile/magic_defs/zfs +96 -0
- polyfile/magic_defs/zilog +12 -0
- polyfile/magic_defs/zip +126 -0
- polyfile/magic_defs/zyxel +17 -0
- polyfile/nes.py +144 -0
- polyfile/nitf.py +15 -0
- polyfile/pdf.py +1264 -0
- polyfile/pickles.py +45 -0
- polyfile/polyfile.py +409 -0
- polyfile/profiling.py +115 -0
- polyfile/repl.py +624 -0
- polyfile/search.py +310 -0
- polyfile/serialization.py +323 -0
- polyfile/structmatcher.py +46 -0
- polyfile/structs.py +281 -0
- polyfile/templates/download.js +162 -0
- polyfile/templates/hexdump.css +268 -0
- polyfile/templates/hexdump.js +756 -0
- polyfile/templates/jquery-3.4.1.min.js +2 -0
- polyfile/templates/template.html +119 -0
- polyfile/wildcards.py +62 -0
- polyfile/zipmatcher.py +183 -0
- polyfile_weave-0.5.5.dist-info/METADATA +173 -0
- polyfile_weave-0.5.5.dist-info/RECORD +585 -0
- polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
- polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
- polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
- polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
- polymerge/__init__.py +1 -0
- polymerge/__main__.py +296 -0
- polymerge/cfg.py +127 -0
- polymerge/polymerge.py +227 -0
- polymerge/polytracker.py +190 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version
|
|
4
|
+
import kaitaistruct
|
|
5
|
+
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
|
6
|
+
from enum import Enum
|
|
7
|
+
import collections
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
|
|
11
|
+
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
12
|
+
|
|
13
|
+
class GimpBrush(KaitaiStruct):
|
|
14
|
+
"""GIMP brush format is native to the GIMP image editor for storing a brush or a texture.
|
|
15
|
+
It can be used in all [Paint Tools](https://docs.gimp.org/2.10/en/gimp-tools-paint.html),
|
|
16
|
+
for example Pencil and Paintbrush. It works by repeating the brush bitmap as you move
|
|
17
|
+
the tool. The Spacing parameter sets the distance between the brush marks as a percentage
|
|
18
|
+
of brush width. Its default value can be set in the brush file.
|
|
19
|
+
|
|
20
|
+
You can also use GIMP to create new brushes in this format. Custom brushes can be loaded
|
|
21
|
+
into GIMP for use in the paint tools by copying them into one of the Brush Folders -
|
|
22
|
+
select **Edit** > **Preferences** in the menu bar, expand the **Folders** section
|
|
23
|
+
and choose **Brushes** to see the recognized Brush Folders or to add new ones.
|
|
24
|
+
|
|
25
|
+
.. seealso::
|
|
26
|
+
Source - https://github.com/GNOME/gimp/blob/441631322b/devel-docs/gbr.txt
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
class ColorDepth(Enum):
|
|
30
|
+
grayscale = 1
|
|
31
|
+
rgba = 4
|
|
32
|
+
SEQ_FIELDS = ["len_header", "header"]
|
|
33
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
34
|
+
self._io = _io
|
|
35
|
+
self._parent = _parent
|
|
36
|
+
self._root = _root if _root else self
|
|
37
|
+
self._debug = collections.defaultdict(dict)
|
|
38
|
+
|
|
39
|
+
def _read(self):
|
|
40
|
+
self._debug['len_header']['start'] = self._io.pos()
|
|
41
|
+
self.len_header = self._io.read_u4be()
|
|
42
|
+
self._debug['len_header']['end'] = self._io.pos()
|
|
43
|
+
self._debug['header']['start'] = self._io.pos()
|
|
44
|
+
self._raw_header = self._io.read_bytes((self.len_header - 4))
|
|
45
|
+
_io__raw_header = KaitaiStream(BytesIO(self._raw_header))
|
|
46
|
+
self.header = GimpBrush.Header(_io__raw_header, self, self._root)
|
|
47
|
+
self.header._read()
|
|
48
|
+
self._debug['header']['end'] = self._io.pos()
|
|
49
|
+
|
|
50
|
+
class Header(KaitaiStruct):
|
|
51
|
+
SEQ_FIELDS = ["version", "width", "height", "bytes_per_pixel", "magic", "spacing", "brush_name"]
|
|
52
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
53
|
+
self._io = _io
|
|
54
|
+
self._parent = _parent
|
|
55
|
+
self._root = _root if _root else self
|
|
56
|
+
self._debug = collections.defaultdict(dict)
|
|
57
|
+
|
|
58
|
+
def _read(self):
|
|
59
|
+
self._debug['version']['start'] = self._io.pos()
|
|
60
|
+
self.version = self._io.read_u4be()
|
|
61
|
+
self._debug['version']['end'] = self._io.pos()
|
|
62
|
+
if not self.version == 2:
|
|
63
|
+
raise kaitaistruct.ValidationNotEqualError(2, self.version, self._io, u"/types/header/seq/0")
|
|
64
|
+
self._debug['width']['start'] = self._io.pos()
|
|
65
|
+
self.width = self._io.read_u4be()
|
|
66
|
+
self._debug['width']['end'] = self._io.pos()
|
|
67
|
+
if not self.width >= 1:
|
|
68
|
+
raise kaitaistruct.ValidationLessThanError(1, self.width, self._io, u"/types/header/seq/1")
|
|
69
|
+
if not self.width <= 10000:
|
|
70
|
+
raise kaitaistruct.ValidationGreaterThanError(10000, self.width, self._io, u"/types/header/seq/1")
|
|
71
|
+
self._debug['height']['start'] = self._io.pos()
|
|
72
|
+
self.height = self._io.read_u4be()
|
|
73
|
+
self._debug['height']['end'] = self._io.pos()
|
|
74
|
+
if not self.height >= 1:
|
|
75
|
+
raise kaitaistruct.ValidationLessThanError(1, self.height, self._io, u"/types/header/seq/2")
|
|
76
|
+
if not self.height <= 10000:
|
|
77
|
+
raise kaitaistruct.ValidationGreaterThanError(10000, self.height, self._io, u"/types/header/seq/2")
|
|
78
|
+
self._debug['bytes_per_pixel']['start'] = self._io.pos()
|
|
79
|
+
self.bytes_per_pixel = KaitaiStream.resolve_enum(GimpBrush.ColorDepth, self._io.read_u4be())
|
|
80
|
+
self._debug['bytes_per_pixel']['end'] = self._io.pos()
|
|
81
|
+
self._debug['magic']['start'] = self._io.pos()
|
|
82
|
+
self.magic = self._io.read_bytes(4)
|
|
83
|
+
self._debug['magic']['end'] = self._io.pos()
|
|
84
|
+
if not self.magic == b"\x47\x49\x4D\x50":
|
|
85
|
+
raise kaitaistruct.ValidationNotEqualError(b"\x47\x49\x4D\x50", self.magic, self._io, u"/types/header/seq/4")
|
|
86
|
+
self._debug['spacing']['start'] = self._io.pos()
|
|
87
|
+
self.spacing = self._io.read_u4be()
|
|
88
|
+
self._debug['spacing']['end'] = self._io.pos()
|
|
89
|
+
self._debug['brush_name']['start'] = self._io.pos()
|
|
90
|
+
self.brush_name = (KaitaiStream.bytes_terminate(self._io.read_bytes_full(), 0, False)).decode(u"UTF-8")
|
|
91
|
+
self._debug['brush_name']['end'] = self._io.pos()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Bitmap(KaitaiStruct):
|
|
95
|
+
SEQ_FIELDS = ["rows"]
|
|
96
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
97
|
+
self._io = _io
|
|
98
|
+
self._parent = _parent
|
|
99
|
+
self._root = _root if _root else self
|
|
100
|
+
self._debug = collections.defaultdict(dict)
|
|
101
|
+
|
|
102
|
+
def _read(self):
|
|
103
|
+
self._debug['rows']['start'] = self._io.pos()
|
|
104
|
+
self.rows = [None] * (self._root.header.height)
|
|
105
|
+
for i in range(self._root.header.height):
|
|
106
|
+
if not 'arr' in self._debug['rows']:
|
|
107
|
+
self._debug['rows']['arr'] = []
|
|
108
|
+
self._debug['rows']['arr'].append({'start': self._io.pos()})
|
|
109
|
+
_t_rows = GimpBrush.Row(self._io, self, self._root)
|
|
110
|
+
_t_rows._read()
|
|
111
|
+
self.rows[i] = _t_rows
|
|
112
|
+
self._debug['rows']['arr'][i]['end'] = self._io.pos()
|
|
113
|
+
|
|
114
|
+
self._debug['rows']['end'] = self._io.pos()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class Row(KaitaiStruct):
|
|
118
|
+
SEQ_FIELDS = ["pixels"]
|
|
119
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
120
|
+
self._io = _io
|
|
121
|
+
self._parent = _parent
|
|
122
|
+
self._root = _root if _root else self
|
|
123
|
+
self._debug = collections.defaultdict(dict)
|
|
124
|
+
|
|
125
|
+
def _read(self):
|
|
126
|
+
self._debug['pixels']['start'] = self._io.pos()
|
|
127
|
+
self.pixels = [None] * (self._root.header.width)
|
|
128
|
+
for i in range(self._root.header.width):
|
|
129
|
+
if not 'arr' in self._debug['pixels']:
|
|
130
|
+
self._debug['pixels']['arr'] = []
|
|
131
|
+
self._debug['pixels']['arr'].append({'start': self._io.pos()})
|
|
132
|
+
_on = self._root.header.bytes_per_pixel
|
|
133
|
+
if _on == GimpBrush.ColorDepth.grayscale:
|
|
134
|
+
if not 'arr' in self._debug['pixels']:
|
|
135
|
+
self._debug['pixels']['arr'] = []
|
|
136
|
+
self._debug['pixels']['arr'].append({'start': self._io.pos()})
|
|
137
|
+
_t_pixels = GimpBrush.Row.PixelGray(self._io, self, self._root)
|
|
138
|
+
_t_pixels._read()
|
|
139
|
+
self.pixels[i] = _t_pixels
|
|
140
|
+
self._debug['pixels']['arr'][i]['end'] = self._io.pos()
|
|
141
|
+
elif _on == GimpBrush.ColorDepth.rgba:
|
|
142
|
+
if not 'arr' in self._debug['pixels']:
|
|
143
|
+
self._debug['pixels']['arr'] = []
|
|
144
|
+
self._debug['pixels']['arr'].append({'start': self._io.pos()})
|
|
145
|
+
_t_pixels = GimpBrush.Row.PixelRgba(self._io, self, self._root)
|
|
146
|
+
_t_pixels._read()
|
|
147
|
+
self.pixels[i] = _t_pixels
|
|
148
|
+
self._debug['pixels']['arr'][i]['end'] = self._io.pos()
|
|
149
|
+
self._debug['pixels']['arr'][i]['end'] = self._io.pos()
|
|
150
|
+
|
|
151
|
+
self._debug['pixels']['end'] = self._io.pos()
|
|
152
|
+
|
|
153
|
+
class PixelGray(KaitaiStruct):
|
|
154
|
+
SEQ_FIELDS = ["gray"]
|
|
155
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
156
|
+
self._io = _io
|
|
157
|
+
self._parent = _parent
|
|
158
|
+
self._root = _root if _root else self
|
|
159
|
+
self._debug = collections.defaultdict(dict)
|
|
160
|
+
|
|
161
|
+
def _read(self):
|
|
162
|
+
self._debug['gray']['start'] = self._io.pos()
|
|
163
|
+
self.gray = self._io.read_u1()
|
|
164
|
+
self._debug['gray']['end'] = self._io.pos()
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def red(self):
|
|
168
|
+
if hasattr(self, '_m_red'):
|
|
169
|
+
return self._m_red if hasattr(self, '_m_red') else None
|
|
170
|
+
|
|
171
|
+
self._m_red = 0
|
|
172
|
+
return self._m_red if hasattr(self, '_m_red') else None
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def green(self):
|
|
176
|
+
if hasattr(self, '_m_green'):
|
|
177
|
+
return self._m_green if hasattr(self, '_m_green') else None
|
|
178
|
+
|
|
179
|
+
self._m_green = 0
|
|
180
|
+
return self._m_green if hasattr(self, '_m_green') else None
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def blue(self):
|
|
184
|
+
if hasattr(self, '_m_blue'):
|
|
185
|
+
return self._m_blue if hasattr(self, '_m_blue') else None
|
|
186
|
+
|
|
187
|
+
self._m_blue = 0
|
|
188
|
+
return self._m_blue if hasattr(self, '_m_blue') else None
|
|
189
|
+
|
|
190
|
+
@property
|
|
191
|
+
def alpha(self):
|
|
192
|
+
if hasattr(self, '_m_alpha'):
|
|
193
|
+
return self._m_alpha if hasattr(self, '_m_alpha') else None
|
|
194
|
+
|
|
195
|
+
self._m_alpha = self.gray
|
|
196
|
+
return self._m_alpha if hasattr(self, '_m_alpha') else None
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class PixelRgba(KaitaiStruct):
|
|
200
|
+
SEQ_FIELDS = ["red", "green", "blue", "alpha"]
|
|
201
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
202
|
+
self._io = _io
|
|
203
|
+
self._parent = _parent
|
|
204
|
+
self._root = _root if _root else self
|
|
205
|
+
self._debug = collections.defaultdict(dict)
|
|
206
|
+
|
|
207
|
+
def _read(self):
|
|
208
|
+
self._debug['red']['start'] = self._io.pos()
|
|
209
|
+
self.red = self._io.read_u1()
|
|
210
|
+
self._debug['red']['end'] = self._io.pos()
|
|
211
|
+
self._debug['green']['start'] = self._io.pos()
|
|
212
|
+
self.green = self._io.read_u1()
|
|
213
|
+
self._debug['green']['end'] = self._io.pos()
|
|
214
|
+
self._debug['blue']['start'] = self._io.pos()
|
|
215
|
+
self.blue = self._io.read_u1()
|
|
216
|
+
self._debug['blue']['end'] = self._io.pos()
|
|
217
|
+
self._debug['alpha']['start'] = self._io.pos()
|
|
218
|
+
self.alpha = self._io.read_u1()
|
|
219
|
+
self._debug['alpha']['end'] = self._io.pos()
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def len_body(self):
|
|
225
|
+
if hasattr(self, '_m_len_body'):
|
|
226
|
+
return self._m_len_body if hasattr(self, '_m_len_body') else None
|
|
227
|
+
|
|
228
|
+
self._m_len_body = ((self.header.width * self.header.height) * self.header.bytes_per_pixel.value)
|
|
229
|
+
return self._m_len_body if hasattr(self, '_m_len_body') else None
|
|
230
|
+
|
|
231
|
+
@property
|
|
232
|
+
def body(self):
|
|
233
|
+
if hasattr(self, '_m_body'):
|
|
234
|
+
return self._m_body if hasattr(self, '_m_body') else None
|
|
235
|
+
|
|
236
|
+
_pos = self._io.pos()
|
|
237
|
+
self._io.seek(self.len_header)
|
|
238
|
+
self._debug['_m_body']['start'] = self._io.pos()
|
|
239
|
+
self._m_body = self._io.read_bytes(self.len_body)
|
|
240
|
+
self._debug['_m_body']['end'] = self._io.pos()
|
|
241
|
+
self._io.seek(_pos)
|
|
242
|
+
return self._m_body if hasattr(self, '_m_body') else None
|
|
243
|
+
|
|
244
|
+
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version
|
|
4
|
+
import kaitaistruct
|
|
5
|
+
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
|
6
|
+
from enum import Enum
|
|
7
|
+
import collections
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
|
|
11
|
+
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
12
|
+
|
|
13
|
+
class GlibcUtmp(KaitaiStruct):
|
|
14
|
+
|
|
15
|
+
class EntryType(Enum):
|
|
16
|
+
empty = 0
|
|
17
|
+
run_lvl = 1
|
|
18
|
+
boot_time = 2
|
|
19
|
+
new_time = 3
|
|
20
|
+
old_time = 4
|
|
21
|
+
init_process = 5
|
|
22
|
+
login_process = 6
|
|
23
|
+
user_process = 7
|
|
24
|
+
dead_process = 8
|
|
25
|
+
accounting = 9
|
|
26
|
+
SEQ_FIELDS = ["records"]
|
|
27
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
28
|
+
self._io = _io
|
|
29
|
+
self._parent = _parent
|
|
30
|
+
self._root = _root if _root else self
|
|
31
|
+
self._debug = collections.defaultdict(dict)
|
|
32
|
+
|
|
33
|
+
def _read(self):
|
|
34
|
+
self._debug['records']['start'] = self._io.pos()
|
|
35
|
+
self._raw_records = []
|
|
36
|
+
self.records = []
|
|
37
|
+
i = 0
|
|
38
|
+
while not self._io.is_eof():
|
|
39
|
+
if not 'arr' in self._debug['records']:
|
|
40
|
+
self._debug['records']['arr'] = []
|
|
41
|
+
self._debug['records']['arr'].append({'start': self._io.pos()})
|
|
42
|
+
self._raw_records.append(self._io.read_bytes(384))
|
|
43
|
+
_io__raw_records = KaitaiStream(BytesIO(self._raw_records[-1]))
|
|
44
|
+
_t_records = GlibcUtmp.Record(_io__raw_records, self, self._root)
|
|
45
|
+
_t_records._read()
|
|
46
|
+
self.records.append(_t_records)
|
|
47
|
+
self._debug['records']['arr'][len(self.records) - 1]['end'] = self._io.pos()
|
|
48
|
+
i += 1
|
|
49
|
+
|
|
50
|
+
self._debug['records']['end'] = self._io.pos()
|
|
51
|
+
|
|
52
|
+
class Record(KaitaiStruct):
|
|
53
|
+
SEQ_FIELDS = ["ut_type", "pid", "line", "id", "user", "host", "exit", "session", "tv", "addr_v6", "reserved"]
|
|
54
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
55
|
+
self._io = _io
|
|
56
|
+
self._parent = _parent
|
|
57
|
+
self._root = _root if _root else self
|
|
58
|
+
self._debug = collections.defaultdict(dict)
|
|
59
|
+
|
|
60
|
+
def _read(self):
|
|
61
|
+
self._debug['ut_type']['start'] = self._io.pos()
|
|
62
|
+
self.ut_type = KaitaiStream.resolve_enum(GlibcUtmp.EntryType, self._io.read_s4le())
|
|
63
|
+
self._debug['ut_type']['end'] = self._io.pos()
|
|
64
|
+
self._debug['pid']['start'] = self._io.pos()
|
|
65
|
+
self.pid = self._io.read_u4le()
|
|
66
|
+
self._debug['pid']['end'] = self._io.pos()
|
|
67
|
+
self._debug['line']['start'] = self._io.pos()
|
|
68
|
+
self.line = (self._io.read_bytes(32)).decode(u"UTF-8")
|
|
69
|
+
self._debug['line']['end'] = self._io.pos()
|
|
70
|
+
self._debug['id']['start'] = self._io.pos()
|
|
71
|
+
self.id = (self._io.read_bytes(4)).decode(u"UTF-8")
|
|
72
|
+
self._debug['id']['end'] = self._io.pos()
|
|
73
|
+
self._debug['user']['start'] = self._io.pos()
|
|
74
|
+
self.user = (self._io.read_bytes(32)).decode(u"UTF-8")
|
|
75
|
+
self._debug['user']['end'] = self._io.pos()
|
|
76
|
+
self._debug['host']['start'] = self._io.pos()
|
|
77
|
+
self.host = (self._io.read_bytes(256)).decode(u"UTF-8")
|
|
78
|
+
self._debug['host']['end'] = self._io.pos()
|
|
79
|
+
self._debug['exit']['start'] = self._io.pos()
|
|
80
|
+
self.exit = self._io.read_u4le()
|
|
81
|
+
self._debug['exit']['end'] = self._io.pos()
|
|
82
|
+
self._debug['session']['start'] = self._io.pos()
|
|
83
|
+
self.session = self._io.read_s4le()
|
|
84
|
+
self._debug['session']['end'] = self._io.pos()
|
|
85
|
+
self._debug['tv']['start'] = self._io.pos()
|
|
86
|
+
self.tv = GlibcUtmp.Timeval(self._io, self, self._root)
|
|
87
|
+
self.tv._read()
|
|
88
|
+
self._debug['tv']['end'] = self._io.pos()
|
|
89
|
+
self._debug['addr_v6']['start'] = self._io.pos()
|
|
90
|
+
self.addr_v6 = self._io.read_bytes(16)
|
|
91
|
+
self._debug['addr_v6']['end'] = self._io.pos()
|
|
92
|
+
self._debug['reserved']['start'] = self._io.pos()
|
|
93
|
+
self.reserved = self._io.read_bytes(20)
|
|
94
|
+
self._debug['reserved']['end'] = self._io.pos()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class Timeval(KaitaiStruct):
|
|
98
|
+
SEQ_FIELDS = ["sec", "usec"]
|
|
99
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
100
|
+
self._io = _io
|
|
101
|
+
self._parent = _parent
|
|
102
|
+
self._root = _root if _root else self
|
|
103
|
+
self._debug = collections.defaultdict(dict)
|
|
104
|
+
|
|
105
|
+
def _read(self):
|
|
106
|
+
self._debug['sec']['start'] = self._io.pos()
|
|
107
|
+
self.sec = self._io.read_s4le()
|
|
108
|
+
self._debug['sec']['end'] = self._io.pos()
|
|
109
|
+
self._debug['usec']['start'] = self._io.pos()
|
|
110
|
+
self.usec = self._io.read_s4le()
|
|
111
|
+
self._debug['usec']['end'] = self._io.pos()
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version
|
|
4
|
+
import kaitaistruct
|
|
5
|
+
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
|
6
|
+
from enum import Enum
|
|
7
|
+
import collections
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
|
|
11
|
+
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
12
|
+
|
|
13
|
+
class GltfBinary(KaitaiStruct):
|
|
14
|
+
"""glTF is a format for distribution of 3D models optimized for being used in software
|
|
15
|
+
|
|
16
|
+
.. seealso::
|
|
17
|
+
Source - https://github.com/KhronosGroup/glTF/tree/2354846/specification/2.0#binary-gltf-layout
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
class ChunkType(Enum):
|
|
21
|
+
bin = 5130562
|
|
22
|
+
json = 1313821514
|
|
23
|
+
SEQ_FIELDS = ["header", "chunks"]
|
|
24
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
25
|
+
self._io = _io
|
|
26
|
+
self._parent = _parent
|
|
27
|
+
self._root = _root if _root else self
|
|
28
|
+
self._debug = collections.defaultdict(dict)
|
|
29
|
+
|
|
30
|
+
def _read(self):
|
|
31
|
+
self._debug['header']['start'] = self._io.pos()
|
|
32
|
+
self.header = GltfBinary.Header(self._io, self, self._root)
|
|
33
|
+
self.header._read()
|
|
34
|
+
self._debug['header']['end'] = self._io.pos()
|
|
35
|
+
self._debug['chunks']['start'] = self._io.pos()
|
|
36
|
+
self.chunks = []
|
|
37
|
+
i = 0
|
|
38
|
+
while not self._io.is_eof():
|
|
39
|
+
if not 'arr' in self._debug['chunks']:
|
|
40
|
+
self._debug['chunks']['arr'] = []
|
|
41
|
+
self._debug['chunks']['arr'].append({'start': self._io.pos()})
|
|
42
|
+
_t_chunks = GltfBinary.Chunk(self._io, self, self._root)
|
|
43
|
+
_t_chunks._read()
|
|
44
|
+
self.chunks.append(_t_chunks)
|
|
45
|
+
self._debug['chunks']['arr'][len(self.chunks) - 1]['end'] = self._io.pos()
|
|
46
|
+
i += 1
|
|
47
|
+
|
|
48
|
+
self._debug['chunks']['end'] = self._io.pos()
|
|
49
|
+
|
|
50
|
+
class Header(KaitaiStruct):
|
|
51
|
+
SEQ_FIELDS = ["magic", "version", "length"]
|
|
52
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
53
|
+
self._io = _io
|
|
54
|
+
self._parent = _parent
|
|
55
|
+
self._root = _root if _root else self
|
|
56
|
+
self._debug = collections.defaultdict(dict)
|
|
57
|
+
|
|
58
|
+
def _read(self):
|
|
59
|
+
self._debug['magic']['start'] = self._io.pos()
|
|
60
|
+
self.magic = self._io.read_bytes(4)
|
|
61
|
+
self._debug['magic']['end'] = self._io.pos()
|
|
62
|
+
if not self.magic == b"\x67\x6C\x54\x46":
|
|
63
|
+
raise kaitaistruct.ValidationNotEqualError(b"\x67\x6C\x54\x46", self.magic, self._io, u"/types/header/seq/0")
|
|
64
|
+
self._debug['version']['start'] = self._io.pos()
|
|
65
|
+
self.version = self._io.read_u4le()
|
|
66
|
+
self._debug['version']['end'] = self._io.pos()
|
|
67
|
+
self._debug['length']['start'] = self._io.pos()
|
|
68
|
+
self.length = self._io.read_u4le()
|
|
69
|
+
self._debug['length']['end'] = self._io.pos()
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class Chunk(KaitaiStruct):
|
|
73
|
+
SEQ_FIELDS = ["len_data", "type", "data"]
|
|
74
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
75
|
+
self._io = _io
|
|
76
|
+
self._parent = _parent
|
|
77
|
+
self._root = _root if _root else self
|
|
78
|
+
self._debug = collections.defaultdict(dict)
|
|
79
|
+
|
|
80
|
+
def _read(self):
|
|
81
|
+
self._debug['len_data']['start'] = self._io.pos()
|
|
82
|
+
self.len_data = self._io.read_u4le()
|
|
83
|
+
self._debug['len_data']['end'] = self._io.pos()
|
|
84
|
+
self._debug['type']['start'] = self._io.pos()
|
|
85
|
+
self.type = KaitaiStream.resolve_enum(GltfBinary.ChunkType, self._io.read_u4le())
|
|
86
|
+
self._debug['type']['end'] = self._io.pos()
|
|
87
|
+
self._debug['data']['start'] = self._io.pos()
|
|
88
|
+
_on = self.type
|
|
89
|
+
if _on == GltfBinary.ChunkType.json:
|
|
90
|
+
self._raw_data = self._io.read_bytes(self.len_data)
|
|
91
|
+
_io__raw_data = KaitaiStream(BytesIO(self._raw_data))
|
|
92
|
+
self.data = GltfBinary.Json(_io__raw_data, self, self._root)
|
|
93
|
+
self.data._read()
|
|
94
|
+
elif _on == GltfBinary.ChunkType.bin:
|
|
95
|
+
self._raw_data = self._io.read_bytes(self.len_data)
|
|
96
|
+
_io__raw_data = KaitaiStream(BytesIO(self._raw_data))
|
|
97
|
+
self.data = GltfBinary.Bin(_io__raw_data, self, self._root)
|
|
98
|
+
self.data._read()
|
|
99
|
+
else:
|
|
100
|
+
self.data = self._io.read_bytes(self.len_data)
|
|
101
|
+
self._debug['data']['end'] = self._io.pos()
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class Json(KaitaiStruct):
|
|
105
|
+
SEQ_FIELDS = ["data"]
|
|
106
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
107
|
+
self._io = _io
|
|
108
|
+
self._parent = _parent
|
|
109
|
+
self._root = _root if _root else self
|
|
110
|
+
self._debug = collections.defaultdict(dict)
|
|
111
|
+
|
|
112
|
+
def _read(self):
|
|
113
|
+
self._debug['data']['start'] = self._io.pos()
|
|
114
|
+
self.data = (self._io.read_bytes_full()).decode(u"UTF-8")
|
|
115
|
+
self._debug['data']['end'] = self._io.pos()
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class Bin(KaitaiStruct):
|
|
119
|
+
SEQ_FIELDS = ["data"]
|
|
120
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
121
|
+
self._io = _io
|
|
122
|
+
self._parent = _parent
|
|
123
|
+
self._root = _root if _root else self
|
|
124
|
+
self._debug = collections.defaultdict(dict)
|
|
125
|
+
|
|
126
|
+
def _read(self):
|
|
127
|
+
self._debug['data']['start'] = self._io.pos()
|
|
128
|
+
self.data = self._io.read_bytes_full()
|
|
129
|
+
self._debug['data']['end'] = self._io.pos()
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
|
|
2
|
+
|
|
3
|
+
from pkg_resources import parse_version
|
|
4
|
+
import kaitaistruct
|
|
5
|
+
from kaitaistruct import KaitaiStruct, KaitaiStream, BytesIO
|
|
6
|
+
import collections
|
|
7
|
+
from enum import Enum
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
|
|
11
|
+
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
12
|
+
|
|
13
|
+
from polyfile.kaitai.parsers import vlq_base128_le
|
|
14
|
+
class GoogleProtobuf(KaitaiStruct):
|
|
15
|
+
"""Google Protocol Buffers (AKA protobuf) is a popular data
|
|
16
|
+
serialization scheme used for communication protocols, data storage,
|
|
17
|
+
etc. There are implementations are available for almost every
|
|
18
|
+
popular language. The focus points of this scheme are brevity (data
|
|
19
|
+
is encoded in a very size-efficient manner) and extensibility (one
|
|
20
|
+
can add keys to the structure, while keeping it readable in previous
|
|
21
|
+
version of software).
|
|
22
|
+
|
|
23
|
+
Protobuf uses semi-self-describing encoding scheme for its
|
|
24
|
+
messages. It means that it is possible to parse overall structure of
|
|
25
|
+
the message (skipping over fields one can't understand), but to
|
|
26
|
+
fully understand the message, one needs a protocol definition file
|
|
27
|
+
(`.proto`). To be specific:
|
|
28
|
+
|
|
29
|
+
* "Keys" in key-value pairs provided in the message are identified
|
|
30
|
+
only with an integer "field tag". `.proto` file provides info on
|
|
31
|
+
which symbolic field names these field tags map to.
|
|
32
|
+
* "Keys" also provide something called "wire type". It's not a data
|
|
33
|
+
type in its common sense (i.e. you can't, for example, distinguish
|
|
34
|
+
`sint32` vs `uint32` vs some enum, or `string` from `bytes`), but
|
|
35
|
+
it's enough information to determine how many bytes to
|
|
36
|
+
parse. Interpretation of the value should be done according to the
|
|
37
|
+
type specified in `.proto` file.
|
|
38
|
+
* There's no direct information on which fields are optional /
|
|
39
|
+
required, which fields may be repeated or constitute a map, what
|
|
40
|
+
restrictions are placed on fields usage in a single message, what
|
|
41
|
+
are the fields' default values, etc, etc.
|
|
42
|
+
|
|
43
|
+
.. seealso::
|
|
44
|
+
Source - https://protobuf.dev/programming-guides/encoding/
|
|
45
|
+
"""
|
|
46
|
+
SEQ_FIELDS = ["pairs"]
|
|
47
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
48
|
+
self._io = _io
|
|
49
|
+
self._parent = _parent
|
|
50
|
+
self._root = _root if _root else self
|
|
51
|
+
self._debug = collections.defaultdict(dict)
|
|
52
|
+
|
|
53
|
+
def _read(self):
|
|
54
|
+
self._debug['pairs']['start'] = self._io.pos()
|
|
55
|
+
self.pairs = []
|
|
56
|
+
i = 0
|
|
57
|
+
while not self._io.is_eof():
|
|
58
|
+
if not 'arr' in self._debug['pairs']:
|
|
59
|
+
self._debug['pairs']['arr'] = []
|
|
60
|
+
self._debug['pairs']['arr'].append({'start': self._io.pos()})
|
|
61
|
+
_t_pairs = GoogleProtobuf.Pair(self._io, self, self._root)
|
|
62
|
+
_t_pairs._read()
|
|
63
|
+
self.pairs.append(_t_pairs)
|
|
64
|
+
self._debug['pairs']['arr'][len(self.pairs) - 1]['end'] = self._io.pos()
|
|
65
|
+
i += 1
|
|
66
|
+
|
|
67
|
+
self._debug['pairs']['end'] = self._io.pos()
|
|
68
|
+
|
|
69
|
+
class Pair(KaitaiStruct):
|
|
70
|
+
"""Key-value pair."""
|
|
71
|
+
|
|
72
|
+
class WireTypes(Enum):
|
|
73
|
+
varint = 0
|
|
74
|
+
bit_64 = 1
|
|
75
|
+
len_delimited = 2
|
|
76
|
+
group_start = 3
|
|
77
|
+
group_end = 4
|
|
78
|
+
bit_32 = 5
|
|
79
|
+
SEQ_FIELDS = ["key", "value"]
|
|
80
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
81
|
+
self._io = _io
|
|
82
|
+
self._parent = _parent
|
|
83
|
+
self._root = _root if _root else self
|
|
84
|
+
self._debug = collections.defaultdict(dict)
|
|
85
|
+
|
|
86
|
+
def _read(self):
|
|
87
|
+
self._debug['key']['start'] = self._io.pos()
|
|
88
|
+
self.key = vlq_base128_le.VlqBase128Le(self._io)
|
|
89
|
+
self.key._read()
|
|
90
|
+
self._debug['key']['end'] = self._io.pos()
|
|
91
|
+
self._debug['value']['start'] = self._io.pos()
|
|
92
|
+
_on = self.wire_type
|
|
93
|
+
if _on == GoogleProtobuf.Pair.WireTypes.varint:
|
|
94
|
+
self.value = vlq_base128_le.VlqBase128Le(self._io)
|
|
95
|
+
self.value._read()
|
|
96
|
+
elif _on == GoogleProtobuf.Pair.WireTypes.len_delimited:
|
|
97
|
+
self.value = GoogleProtobuf.DelimitedBytes(self._io, self, self._root)
|
|
98
|
+
self.value._read()
|
|
99
|
+
elif _on == GoogleProtobuf.Pair.WireTypes.bit_64:
|
|
100
|
+
self.value = self._io.read_u8le()
|
|
101
|
+
elif _on == GoogleProtobuf.Pair.WireTypes.bit_32:
|
|
102
|
+
self.value = self._io.read_u4le()
|
|
103
|
+
self._debug['value']['end'] = self._io.pos()
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def wire_type(self):
|
|
107
|
+
""""Wire type" is a part of the "key" that carries enough
|
|
108
|
+
information to parse value from the wire, i.e. read correct
|
|
109
|
+
amount of bytes, but there's not enough informaton to
|
|
110
|
+
interprete in unambiguously. For example, one can't clearly
|
|
111
|
+
distinguish 64-bit fixed-sized integers from 64-bit floats,
|
|
112
|
+
signed zigzag-encoded varints from regular unsigned varints,
|
|
113
|
+
arbitrary bytes from UTF-8 encoded strings, etc.
|
|
114
|
+
"""
|
|
115
|
+
if hasattr(self, '_m_wire_type'):
|
|
116
|
+
return self._m_wire_type if hasattr(self, '_m_wire_type') else None
|
|
117
|
+
|
|
118
|
+
self._m_wire_type = KaitaiStream.resolve_enum(GoogleProtobuf.Pair.WireTypes, (self.key.value & 7))
|
|
119
|
+
return self._m_wire_type if hasattr(self, '_m_wire_type') else None
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def field_tag(self):
|
|
123
|
+
"""Identifies a field of protocol. One can look up symbolic
|
|
124
|
+
field name in a `.proto` file by this field tag.
|
|
125
|
+
"""
|
|
126
|
+
if hasattr(self, '_m_field_tag'):
|
|
127
|
+
return self._m_field_tag if hasattr(self, '_m_field_tag') else None
|
|
128
|
+
|
|
129
|
+
self._m_field_tag = (self.key.value >> 3)
|
|
130
|
+
return self._m_field_tag if hasattr(self, '_m_field_tag') else None
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class DelimitedBytes(KaitaiStruct):
|
|
134
|
+
SEQ_FIELDS = ["len", "body"]
|
|
135
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
136
|
+
self._io = _io
|
|
137
|
+
self._parent = _parent
|
|
138
|
+
self._root = _root if _root else self
|
|
139
|
+
self._debug = collections.defaultdict(dict)
|
|
140
|
+
|
|
141
|
+
def _read(self):
|
|
142
|
+
self._debug['len']['start'] = self._io.pos()
|
|
143
|
+
self.len = vlq_base128_le.VlqBase128Le(self._io)
|
|
144
|
+
self.len._read()
|
|
145
|
+
self._debug['len']['end'] = self._io.pos()
|
|
146
|
+
self._debug['body']['start'] = self._io.pos()
|
|
147
|
+
self.body = self._io.read_bytes(self.len.value)
|
|
148
|
+
self._debug['body']['end'] = self._io.pos()
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|