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,706 @@
|
|
|
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
|
+
|
|
8
|
+
|
|
9
|
+
if parse_version(kaitaistruct.__version__) < parse_version('0.9'):
|
|
10
|
+
raise Exception("Incompatible Kaitai Struct Python API: 0.9 or later is required, but you have %s" % (kaitaistruct.__version__))
|
|
11
|
+
|
|
12
|
+
class MifareClassic(KaitaiStruct):
|
|
13
|
+
"""You can get a dump for testing from this link:
|
|
14
|
+
<https://github.com/zhovner/mfdread/raw/master/dump.mfd>
|
|
15
|
+
|
|
16
|
+
.. seealso::
|
|
17
|
+
Source - https://github.com/nfc-tools/libnfc
|
|
18
|
+
https://www.nxp.com/docs/en/data-sheet/MF1S70YYX_V1.pdf
|
|
19
|
+
"""
|
|
20
|
+
SEQ_FIELDS = ["sectors"]
|
|
21
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
22
|
+
self._io = _io
|
|
23
|
+
self._parent = _parent
|
|
24
|
+
self._root = _root if _root else self
|
|
25
|
+
self._debug = collections.defaultdict(dict)
|
|
26
|
+
|
|
27
|
+
def _read(self):
|
|
28
|
+
self._debug['sectors']['start'] = self._io.pos()
|
|
29
|
+
self._raw_sectors = []
|
|
30
|
+
self.sectors = []
|
|
31
|
+
i = 0
|
|
32
|
+
while not self._io.is_eof():
|
|
33
|
+
if not 'arr' in self._debug['sectors']:
|
|
34
|
+
self._debug['sectors']['arr'] = []
|
|
35
|
+
self._debug['sectors']['arr'].append({'start': self._io.pos()})
|
|
36
|
+
self._raw_sectors.append(self._io.read_bytes((((4 if i >= 32 else 1) * 4) * 16)))
|
|
37
|
+
_io__raw_sectors = KaitaiStream(BytesIO(self._raw_sectors[-1]))
|
|
38
|
+
_t_sectors = MifareClassic.Sector(i == 0, _io__raw_sectors, self, self._root)
|
|
39
|
+
_t_sectors._read()
|
|
40
|
+
self.sectors.append(_t_sectors)
|
|
41
|
+
self._debug['sectors']['arr'][len(self.sectors) - 1]['end'] = self._io.pos()
|
|
42
|
+
i += 1
|
|
43
|
+
|
|
44
|
+
self._debug['sectors']['end'] = self._io.pos()
|
|
45
|
+
|
|
46
|
+
class Key(KaitaiStruct):
|
|
47
|
+
SEQ_FIELDS = ["key"]
|
|
48
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
49
|
+
self._io = _io
|
|
50
|
+
self._parent = _parent
|
|
51
|
+
self._root = _root if _root else self
|
|
52
|
+
self._debug = collections.defaultdict(dict)
|
|
53
|
+
|
|
54
|
+
def _read(self):
|
|
55
|
+
self._debug['key']['start'] = self._io.pos()
|
|
56
|
+
self.key = self._io.read_bytes(6)
|
|
57
|
+
self._debug['key']['end'] = self._io.pos()
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class Sector(KaitaiStruct):
|
|
61
|
+
SEQ_FIELDS = ["manufacturer", "data_filler", "trailer"]
|
|
62
|
+
def __init__(self, has_manufacturer, _io, _parent=None, _root=None):
|
|
63
|
+
self._io = _io
|
|
64
|
+
self._parent = _parent
|
|
65
|
+
self._root = _root if _root else self
|
|
66
|
+
self.has_manufacturer = has_manufacturer
|
|
67
|
+
self._debug = collections.defaultdict(dict)
|
|
68
|
+
|
|
69
|
+
def _read(self):
|
|
70
|
+
if self.has_manufacturer:
|
|
71
|
+
self._debug['manufacturer']['start'] = self._io.pos()
|
|
72
|
+
self.manufacturer = MifareClassic.Manufacturer(self._io, self, self._root)
|
|
73
|
+
self.manufacturer._read()
|
|
74
|
+
self._debug['manufacturer']['end'] = self._io.pos()
|
|
75
|
+
|
|
76
|
+
self._debug['data_filler']['start'] = self._io.pos()
|
|
77
|
+
self._raw_data_filler = self._io.read_bytes(((self._io.size() - self._io.pos()) - 16))
|
|
78
|
+
_io__raw_data_filler = KaitaiStream(BytesIO(self._raw_data_filler))
|
|
79
|
+
self.data_filler = MifareClassic.Sector.Filler(_io__raw_data_filler, self, self._root)
|
|
80
|
+
self.data_filler._read()
|
|
81
|
+
self._debug['data_filler']['end'] = self._io.pos()
|
|
82
|
+
self._debug['trailer']['start'] = self._io.pos()
|
|
83
|
+
self.trailer = MifareClassic.Trailer(self._io, self, self._root)
|
|
84
|
+
self.trailer._read()
|
|
85
|
+
self._debug['trailer']['end'] = self._io.pos()
|
|
86
|
+
|
|
87
|
+
class Values(KaitaiStruct):
|
|
88
|
+
SEQ_FIELDS = ["values"]
|
|
89
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
90
|
+
self._io = _io
|
|
91
|
+
self._parent = _parent
|
|
92
|
+
self._root = _root if _root else self
|
|
93
|
+
self._debug = collections.defaultdict(dict)
|
|
94
|
+
|
|
95
|
+
def _read(self):
|
|
96
|
+
self._debug['values']['start'] = self._io.pos()
|
|
97
|
+
self.values = []
|
|
98
|
+
i = 0
|
|
99
|
+
while not self._io.is_eof():
|
|
100
|
+
if not 'arr' in self._debug['values']:
|
|
101
|
+
self._debug['values']['arr'] = []
|
|
102
|
+
self._debug['values']['arr'].append({'start': self._io.pos()})
|
|
103
|
+
_t_values = MifareClassic.Sector.Values.ValueBlock(self._io, self, self._root)
|
|
104
|
+
_t_values._read()
|
|
105
|
+
self.values.append(_t_values)
|
|
106
|
+
self._debug['values']['arr'][len(self.values) - 1]['end'] = self._io.pos()
|
|
107
|
+
i += 1
|
|
108
|
+
|
|
109
|
+
self._debug['values']['end'] = self._io.pos()
|
|
110
|
+
|
|
111
|
+
class ValueBlock(KaitaiStruct):
|
|
112
|
+
SEQ_FIELDS = ["valuez", "addrz"]
|
|
113
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
114
|
+
self._io = _io
|
|
115
|
+
self._parent = _parent
|
|
116
|
+
self._root = _root if _root else self
|
|
117
|
+
self._debug = collections.defaultdict(dict)
|
|
118
|
+
|
|
119
|
+
def _read(self):
|
|
120
|
+
self._debug['valuez']['start'] = self._io.pos()
|
|
121
|
+
self.valuez = [None] * (3)
|
|
122
|
+
for i in range(3):
|
|
123
|
+
if not 'arr' in self._debug['valuez']:
|
|
124
|
+
self._debug['valuez']['arr'] = []
|
|
125
|
+
self._debug['valuez']['arr'].append({'start': self._io.pos()})
|
|
126
|
+
self.valuez[i] = self._io.read_u4le()
|
|
127
|
+
self._debug['valuez']['arr'][i]['end'] = self._io.pos()
|
|
128
|
+
|
|
129
|
+
self._debug['valuez']['end'] = self._io.pos()
|
|
130
|
+
self._debug['addrz']['start'] = self._io.pos()
|
|
131
|
+
self.addrz = [None] * (4)
|
|
132
|
+
for i in range(4):
|
|
133
|
+
if not 'arr' in self._debug['addrz']:
|
|
134
|
+
self._debug['addrz']['arr'] = []
|
|
135
|
+
self._debug['addrz']['arr'].append({'start': self._io.pos()})
|
|
136
|
+
self.addrz[i] = self._io.read_u1()
|
|
137
|
+
self._debug['addrz']['arr'][i]['end'] = self._io.pos()
|
|
138
|
+
|
|
139
|
+
self._debug['addrz']['end'] = self._io.pos()
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def addr(self):
|
|
143
|
+
if hasattr(self, '_m_addr'):
|
|
144
|
+
return self._m_addr if hasattr(self, '_m_addr') else None
|
|
145
|
+
|
|
146
|
+
if self.valid:
|
|
147
|
+
self._m_addr = self.addrz[0]
|
|
148
|
+
|
|
149
|
+
return self._m_addr if hasattr(self, '_m_addr') else None
|
|
150
|
+
|
|
151
|
+
@property
|
|
152
|
+
def addr_valid(self):
|
|
153
|
+
if hasattr(self, '_m_addr_valid'):
|
|
154
|
+
return self._m_addr_valid if hasattr(self, '_m_addr_valid') else None
|
|
155
|
+
|
|
156
|
+
self._m_addr_valid = ((self.addrz[0] == ~(self.addrz[1])) and (self.addrz[0] == self.addrz[2]) and (self.addrz[1] == self.addrz[3]))
|
|
157
|
+
return self._m_addr_valid if hasattr(self, '_m_addr_valid') else None
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def valid(self):
|
|
161
|
+
if hasattr(self, '_m_valid'):
|
|
162
|
+
return self._m_valid if hasattr(self, '_m_valid') else None
|
|
163
|
+
|
|
164
|
+
self._m_valid = ((self.value_valid) and (self.addr_valid))
|
|
165
|
+
return self._m_valid if hasattr(self, '_m_valid') else None
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def value_valid(self):
|
|
169
|
+
if hasattr(self, '_m_value_valid'):
|
|
170
|
+
return self._m_value_valid if hasattr(self, '_m_value_valid') else None
|
|
171
|
+
|
|
172
|
+
self._m_value_valid = ((self.valuez[0] == ~(self.valuez[1])) and (self.valuez[0] == self.valuez[2]))
|
|
173
|
+
return self._m_value_valid if hasattr(self, '_m_value_valid') else None
|
|
174
|
+
|
|
175
|
+
@property
|
|
176
|
+
def value(self):
|
|
177
|
+
if hasattr(self, '_m_value'):
|
|
178
|
+
return self._m_value if hasattr(self, '_m_value') else None
|
|
179
|
+
|
|
180
|
+
if self.valid:
|
|
181
|
+
self._m_value = self.valuez[0]
|
|
182
|
+
|
|
183
|
+
return self._m_value if hasattr(self, '_m_value') else None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class Filler(KaitaiStruct):
|
|
188
|
+
"""only to create _io."""
|
|
189
|
+
SEQ_FIELDS = ["data"]
|
|
190
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
191
|
+
self._io = _io
|
|
192
|
+
self._parent = _parent
|
|
193
|
+
self._root = _root if _root else self
|
|
194
|
+
self._debug = collections.defaultdict(dict)
|
|
195
|
+
|
|
196
|
+
def _read(self):
|
|
197
|
+
self._debug['data']['start'] = self._io.pos()
|
|
198
|
+
self.data = self._io.read_bytes(self._io.size())
|
|
199
|
+
self._debug['data']['end'] = self._io.pos()
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def block_size(self):
|
|
204
|
+
if hasattr(self, '_m_block_size'):
|
|
205
|
+
return self._m_block_size if hasattr(self, '_m_block_size') else None
|
|
206
|
+
|
|
207
|
+
self._m_block_size = 16
|
|
208
|
+
return self._m_block_size if hasattr(self, '_m_block_size') else None
|
|
209
|
+
|
|
210
|
+
@property
|
|
211
|
+
def data(self):
|
|
212
|
+
if hasattr(self, '_m_data'):
|
|
213
|
+
return self._m_data if hasattr(self, '_m_data') else None
|
|
214
|
+
|
|
215
|
+
self._m_data = self.data_filler.data
|
|
216
|
+
return self._m_data if hasattr(self, '_m_data') else None
|
|
217
|
+
|
|
218
|
+
@property
|
|
219
|
+
def blocks(self):
|
|
220
|
+
if hasattr(self, '_m_blocks'):
|
|
221
|
+
return self._m_blocks if hasattr(self, '_m_blocks') else None
|
|
222
|
+
|
|
223
|
+
io = self.data_filler._io
|
|
224
|
+
_pos = io.pos()
|
|
225
|
+
io.seek(0)
|
|
226
|
+
self._debug['_m_blocks']['start'] = io.pos()
|
|
227
|
+
self._m_blocks = []
|
|
228
|
+
i = 0
|
|
229
|
+
while not io.is_eof():
|
|
230
|
+
if not 'arr' in self._debug['_m_blocks']:
|
|
231
|
+
self._debug['_m_blocks']['arr'] = []
|
|
232
|
+
self._debug['_m_blocks']['arr'].append({'start': io.pos()})
|
|
233
|
+
self._m_blocks.append(io.read_bytes(self.block_size))
|
|
234
|
+
self._debug['_m_blocks']['arr'][len(self._m_blocks) - 1]['end'] = io.pos()
|
|
235
|
+
i += 1
|
|
236
|
+
|
|
237
|
+
self._debug['_m_blocks']['end'] = io.pos()
|
|
238
|
+
io.seek(_pos)
|
|
239
|
+
return self._m_blocks if hasattr(self, '_m_blocks') else None
|
|
240
|
+
|
|
241
|
+
@property
|
|
242
|
+
def values(self):
|
|
243
|
+
if hasattr(self, '_m_values'):
|
|
244
|
+
return self._m_values if hasattr(self, '_m_values') else None
|
|
245
|
+
|
|
246
|
+
io = self.data_filler._io
|
|
247
|
+
_pos = io.pos()
|
|
248
|
+
io.seek(0)
|
|
249
|
+
self._debug['_m_values']['start'] = io.pos()
|
|
250
|
+
self._m_values = MifareClassic.Sector.Values(io, self, self._root)
|
|
251
|
+
self._m_values._read()
|
|
252
|
+
self._debug['_m_values']['end'] = io.pos()
|
|
253
|
+
io.seek(_pos)
|
|
254
|
+
return self._m_values if hasattr(self, '_m_values') else None
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class Manufacturer(KaitaiStruct):
|
|
258
|
+
SEQ_FIELDS = ["nuid", "bcc", "sak", "atqa", "manufacturer"]
|
|
259
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
260
|
+
self._io = _io
|
|
261
|
+
self._parent = _parent
|
|
262
|
+
self._root = _root if _root else self
|
|
263
|
+
self._debug = collections.defaultdict(dict)
|
|
264
|
+
|
|
265
|
+
def _read(self):
|
|
266
|
+
self._debug['nuid']['start'] = self._io.pos()
|
|
267
|
+
self.nuid = self._io.read_u4le()
|
|
268
|
+
self._debug['nuid']['end'] = self._io.pos()
|
|
269
|
+
self._debug['bcc']['start'] = self._io.pos()
|
|
270
|
+
self.bcc = self._io.read_u1()
|
|
271
|
+
self._debug['bcc']['end'] = self._io.pos()
|
|
272
|
+
self._debug['sak']['start'] = self._io.pos()
|
|
273
|
+
self.sak = self._io.read_u1()
|
|
274
|
+
self._debug['sak']['end'] = self._io.pos()
|
|
275
|
+
self._debug['atqa']['start'] = self._io.pos()
|
|
276
|
+
self.atqa = self._io.read_u2le()
|
|
277
|
+
self._debug['atqa']['end'] = self._io.pos()
|
|
278
|
+
self._debug['manufacturer']['start'] = self._io.pos()
|
|
279
|
+
self.manufacturer = self._io.read_bytes(8)
|
|
280
|
+
self._debug['manufacturer']['end'] = self._io.pos()
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class Trailer(KaitaiStruct):
|
|
284
|
+
SEQ_FIELDS = ["key_a", "access_bits", "user_byte", "key_b"]
|
|
285
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
286
|
+
self._io = _io
|
|
287
|
+
self._parent = _parent
|
|
288
|
+
self._root = _root if _root else self
|
|
289
|
+
self._debug = collections.defaultdict(dict)
|
|
290
|
+
|
|
291
|
+
def _read(self):
|
|
292
|
+
self._debug['key_a']['start'] = self._io.pos()
|
|
293
|
+
self.key_a = MifareClassic.Key(self._io, self, self._root)
|
|
294
|
+
self.key_a._read()
|
|
295
|
+
self._debug['key_a']['end'] = self._io.pos()
|
|
296
|
+
self._debug['access_bits']['start'] = self._io.pos()
|
|
297
|
+
self._raw_access_bits = self._io.read_bytes(3)
|
|
298
|
+
_io__raw_access_bits = KaitaiStream(BytesIO(self._raw_access_bits))
|
|
299
|
+
self.access_bits = MifareClassic.Trailer.AccessConditions(_io__raw_access_bits, self, self._root)
|
|
300
|
+
self.access_bits._read()
|
|
301
|
+
self._debug['access_bits']['end'] = self._io.pos()
|
|
302
|
+
self._debug['user_byte']['start'] = self._io.pos()
|
|
303
|
+
self.user_byte = self._io.read_u1()
|
|
304
|
+
self._debug['user_byte']['end'] = self._io.pos()
|
|
305
|
+
self._debug['key_b']['start'] = self._io.pos()
|
|
306
|
+
self.key_b = MifareClassic.Key(self._io, self, self._root)
|
|
307
|
+
self.key_b._read()
|
|
308
|
+
self._debug['key_b']['end'] = self._io.pos()
|
|
309
|
+
|
|
310
|
+
class AccessConditions(KaitaiStruct):
|
|
311
|
+
SEQ_FIELDS = ["raw_chunks"]
|
|
312
|
+
def __init__(self, _io, _parent=None, _root=None):
|
|
313
|
+
self._io = _io
|
|
314
|
+
self._parent = _parent
|
|
315
|
+
self._root = _root if _root else self
|
|
316
|
+
self._debug = collections.defaultdict(dict)
|
|
317
|
+
|
|
318
|
+
def _read(self):
|
|
319
|
+
self._debug['raw_chunks']['start'] = self._io.pos()
|
|
320
|
+
self.raw_chunks = [None] * (self._parent.ac_count_of_chunks)
|
|
321
|
+
for i in range(self._parent.ac_count_of_chunks):
|
|
322
|
+
if not 'arr' in self._debug['raw_chunks']:
|
|
323
|
+
self._debug['raw_chunks']['arr'] = []
|
|
324
|
+
self._debug['raw_chunks']['arr'].append({'start': self._io.pos()})
|
|
325
|
+
self.raw_chunks[i] = self._io.read_bits_int_be(4)
|
|
326
|
+
self._debug['raw_chunks']['arr'][i]['end'] = self._io.pos()
|
|
327
|
+
|
|
328
|
+
self._debug['raw_chunks']['end'] = self._io.pos()
|
|
329
|
+
|
|
330
|
+
class TrailerAc(KaitaiStruct):
|
|
331
|
+
SEQ_FIELDS = []
|
|
332
|
+
def __init__(self, ac, _io, _parent=None, _root=None):
|
|
333
|
+
self._io = _io
|
|
334
|
+
self._parent = _parent
|
|
335
|
+
self._root = _root if _root else self
|
|
336
|
+
self.ac = ac
|
|
337
|
+
self._debug = collections.defaultdict(dict)
|
|
338
|
+
|
|
339
|
+
def _read(self):
|
|
340
|
+
pass
|
|
341
|
+
|
|
342
|
+
@property
|
|
343
|
+
def can_read_key_b(self):
|
|
344
|
+
"""key A is required."""
|
|
345
|
+
if hasattr(self, '_m_can_read_key_b'):
|
|
346
|
+
return self._m_can_read_key_b if hasattr(self, '_m_can_read_key_b') else None
|
|
347
|
+
|
|
348
|
+
self._m_can_read_key_b = self.ac.inv_shift_val <= 2
|
|
349
|
+
return self._m_can_read_key_b if hasattr(self, '_m_can_read_key_b') else None
|
|
350
|
+
|
|
351
|
+
@property
|
|
352
|
+
def can_write_keys(self):
|
|
353
|
+
if hasattr(self, '_m_can_write_keys'):
|
|
354
|
+
return self._m_can_write_keys if hasattr(self, '_m_can_write_keys') else None
|
|
355
|
+
|
|
356
|
+
self._m_can_write_keys = ((((self.ac.inv_shift_val + 1) % 3) != 0) and (self.ac.inv_shift_val < 6))
|
|
357
|
+
return self._m_can_write_keys if hasattr(self, '_m_can_write_keys') else None
|
|
358
|
+
|
|
359
|
+
@property
|
|
360
|
+
def can_write_access_bits(self):
|
|
361
|
+
if hasattr(self, '_m_can_write_access_bits'):
|
|
362
|
+
return self._m_can_write_access_bits if hasattr(self, '_m_can_write_access_bits') else None
|
|
363
|
+
|
|
364
|
+
self._m_can_write_access_bits = self.ac.bits[2].b
|
|
365
|
+
return self._m_can_write_access_bits if hasattr(self, '_m_can_write_access_bits') else None
|
|
366
|
+
|
|
367
|
+
@property
|
|
368
|
+
def key_b_controls_write(self):
|
|
369
|
+
if hasattr(self, '_m_key_b_controls_write'):
|
|
370
|
+
return self._m_key_b_controls_write if hasattr(self, '_m_key_b_controls_write') else None
|
|
371
|
+
|
|
372
|
+
self._m_key_b_controls_write = not (self.can_read_key_b)
|
|
373
|
+
return self._m_key_b_controls_write if hasattr(self, '_m_key_b_controls_write') else None
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
class ChunkBitRemap(KaitaiStruct):
|
|
377
|
+
SEQ_FIELDS = []
|
|
378
|
+
def __init__(self, bit_no, _io, _parent=None, _root=None):
|
|
379
|
+
self._io = _io
|
|
380
|
+
self._parent = _parent
|
|
381
|
+
self._root = _root if _root else self
|
|
382
|
+
self.bit_no = bit_no
|
|
383
|
+
self._debug = collections.defaultdict(dict)
|
|
384
|
+
|
|
385
|
+
def _read(self):
|
|
386
|
+
pass
|
|
387
|
+
|
|
388
|
+
@property
|
|
389
|
+
def shift_value(self):
|
|
390
|
+
if hasattr(self, '_m_shift_value'):
|
|
391
|
+
return self._m_shift_value if hasattr(self, '_m_shift_value') else None
|
|
392
|
+
|
|
393
|
+
self._m_shift_value = (-1 if self.bit_no == 1 else 1)
|
|
394
|
+
return self._m_shift_value if hasattr(self, '_m_shift_value') else None
|
|
395
|
+
|
|
396
|
+
@property
|
|
397
|
+
def chunk_no(self):
|
|
398
|
+
if hasattr(self, '_m_chunk_no'):
|
|
399
|
+
return self._m_chunk_no if hasattr(self, '_m_chunk_no') else None
|
|
400
|
+
|
|
401
|
+
self._m_chunk_no = (((self.inv_chunk_no + self.shift_value) + self._parent._parent.ac_count_of_chunks) % self._parent._parent.ac_count_of_chunks)
|
|
402
|
+
return self._m_chunk_no if hasattr(self, '_m_chunk_no') else None
|
|
403
|
+
|
|
404
|
+
@property
|
|
405
|
+
def inv_chunk_no(self):
|
|
406
|
+
if hasattr(self, '_m_inv_chunk_no'):
|
|
407
|
+
return self._m_inv_chunk_no if hasattr(self, '_m_inv_chunk_no') else None
|
|
408
|
+
|
|
409
|
+
self._m_inv_chunk_no = (self.bit_no + self.shift_value)
|
|
410
|
+
return self._m_inv_chunk_no if hasattr(self, '_m_inv_chunk_no') else None
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
class DataAc(KaitaiStruct):
|
|
414
|
+
SEQ_FIELDS = []
|
|
415
|
+
def __init__(self, ac, _io, _parent=None, _root=None):
|
|
416
|
+
self._io = _io
|
|
417
|
+
self._parent = _parent
|
|
418
|
+
self._root = _root if _root else self
|
|
419
|
+
self.ac = ac
|
|
420
|
+
self._debug = collections.defaultdict(dict)
|
|
421
|
+
|
|
422
|
+
def _read(self):
|
|
423
|
+
pass
|
|
424
|
+
|
|
425
|
+
@property
|
|
426
|
+
def read_key_a_required(self):
|
|
427
|
+
if hasattr(self, '_m_read_key_a_required'):
|
|
428
|
+
return self._m_read_key_a_required if hasattr(self, '_m_read_key_a_required') else None
|
|
429
|
+
|
|
430
|
+
self._m_read_key_a_required = self.ac.val <= 4
|
|
431
|
+
return self._m_read_key_a_required if hasattr(self, '_m_read_key_a_required') else None
|
|
432
|
+
|
|
433
|
+
@property
|
|
434
|
+
def write_key_b_required(self):
|
|
435
|
+
if hasattr(self, '_m_write_key_b_required'):
|
|
436
|
+
return self._m_write_key_b_required if hasattr(self, '_m_write_key_b_required') else None
|
|
437
|
+
|
|
438
|
+
self._m_write_key_b_required = (( ((not (self.read_key_a_required)) or (self.read_key_b_required)) ) and (not (self.ac.bits[0].b)))
|
|
439
|
+
return self._m_write_key_b_required if hasattr(self, '_m_write_key_b_required') else None
|
|
440
|
+
|
|
441
|
+
@property
|
|
442
|
+
def write_key_a_required(self):
|
|
443
|
+
if hasattr(self, '_m_write_key_a_required'):
|
|
444
|
+
return self._m_write_key_a_required if hasattr(self, '_m_write_key_a_required') else None
|
|
445
|
+
|
|
446
|
+
self._m_write_key_a_required = self.ac.val == 0
|
|
447
|
+
return self._m_write_key_a_required if hasattr(self, '_m_write_key_a_required') else None
|
|
448
|
+
|
|
449
|
+
@property
|
|
450
|
+
def read_key_b_required(self):
|
|
451
|
+
if hasattr(self, '_m_read_key_b_required'):
|
|
452
|
+
return self._m_read_key_b_required if hasattr(self, '_m_read_key_b_required') else None
|
|
453
|
+
|
|
454
|
+
self._m_read_key_b_required = self.ac.val <= 6
|
|
455
|
+
return self._m_read_key_b_required if hasattr(self, '_m_read_key_b_required') else None
|
|
456
|
+
|
|
457
|
+
@property
|
|
458
|
+
def decrement_available(self):
|
|
459
|
+
if hasattr(self, '_m_decrement_available'):
|
|
460
|
+
return self._m_decrement_available if hasattr(self, '_m_decrement_available') else None
|
|
461
|
+
|
|
462
|
+
self._m_decrement_available = (( ((self.ac.bits[1].b) or (not (self.ac.bits[0].b))) ) and (not (self.ac.bits[2].b)))
|
|
463
|
+
return self._m_decrement_available if hasattr(self, '_m_decrement_available') else None
|
|
464
|
+
|
|
465
|
+
@property
|
|
466
|
+
def increment_available(self):
|
|
467
|
+
if hasattr(self, '_m_increment_available'):
|
|
468
|
+
return self._m_increment_available if hasattr(self, '_m_increment_available') else None
|
|
469
|
+
|
|
470
|
+
self._m_increment_available = (( ((not (self.ac.bits[0].b)) and (not (self.read_key_a_required)) and (not (self.read_key_b_required))) ) or ( ((not (self.ac.bits[0].b)) and (self.read_key_a_required) and (self.read_key_b_required)) ))
|
|
471
|
+
return self._m_increment_available if hasattr(self, '_m_increment_available') else None
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
class Ac(KaitaiStruct):
|
|
475
|
+
SEQ_FIELDS = []
|
|
476
|
+
def __init__(self, index, _io, _parent=None, _root=None):
|
|
477
|
+
self._io = _io
|
|
478
|
+
self._parent = _parent
|
|
479
|
+
self._root = _root if _root else self
|
|
480
|
+
self.index = index
|
|
481
|
+
self._debug = collections.defaultdict(dict)
|
|
482
|
+
|
|
483
|
+
def _read(self):
|
|
484
|
+
pass
|
|
485
|
+
|
|
486
|
+
class AcBit(KaitaiStruct):
|
|
487
|
+
SEQ_FIELDS = []
|
|
488
|
+
def __init__(self, i, chunk, _io, _parent=None, _root=None):
|
|
489
|
+
self._io = _io
|
|
490
|
+
self._parent = _parent
|
|
491
|
+
self._root = _root if _root else self
|
|
492
|
+
self.i = i
|
|
493
|
+
self.chunk = chunk
|
|
494
|
+
self._debug = collections.defaultdict(dict)
|
|
495
|
+
|
|
496
|
+
def _read(self):
|
|
497
|
+
pass
|
|
498
|
+
|
|
499
|
+
@property
|
|
500
|
+
def n(self):
|
|
501
|
+
if hasattr(self, '_m_n'):
|
|
502
|
+
return self._m_n if hasattr(self, '_m_n') else None
|
|
503
|
+
|
|
504
|
+
self._m_n = ((self.chunk >> self.i) & 1)
|
|
505
|
+
return self._m_n if hasattr(self, '_m_n') else None
|
|
506
|
+
|
|
507
|
+
@property
|
|
508
|
+
def b(self):
|
|
509
|
+
if hasattr(self, '_m_b'):
|
|
510
|
+
return self._m_b if hasattr(self, '_m_b') else None
|
|
511
|
+
|
|
512
|
+
self._m_b = self.n == 1
|
|
513
|
+
return self._m_b if hasattr(self, '_m_b') else None
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
@property
|
|
517
|
+
def bits(self):
|
|
518
|
+
if hasattr(self, '_m_bits'):
|
|
519
|
+
return self._m_bits if hasattr(self, '_m_bits') else None
|
|
520
|
+
|
|
521
|
+
_pos = self._io.pos()
|
|
522
|
+
self._io.seek(0)
|
|
523
|
+
self._debug['_m_bits']['start'] = self._io.pos()
|
|
524
|
+
self._m_bits = [None] * (self._parent._parent.ac_bits)
|
|
525
|
+
for i in range(self._parent._parent.ac_bits):
|
|
526
|
+
if not 'arr' in self._debug['_m_bits']:
|
|
527
|
+
self._debug['_m_bits']['arr'] = []
|
|
528
|
+
self._debug['_m_bits']['arr'].append({'start': self._io.pos()})
|
|
529
|
+
_t__m_bits = MifareClassic.Trailer.AccessConditions.Ac.AcBit(self.index, self._parent.chunks[i].chunk, self._io, self, self._root)
|
|
530
|
+
_t__m_bits._read()
|
|
531
|
+
self._m_bits[i] = _t__m_bits
|
|
532
|
+
self._debug['_m_bits']['arr'][i]['end'] = self._io.pos()
|
|
533
|
+
|
|
534
|
+
self._debug['_m_bits']['end'] = self._io.pos()
|
|
535
|
+
self._io.seek(_pos)
|
|
536
|
+
return self._m_bits if hasattr(self, '_m_bits') else None
|
|
537
|
+
|
|
538
|
+
@property
|
|
539
|
+
def val(self):
|
|
540
|
+
"""c3 c2 c1."""
|
|
541
|
+
if hasattr(self, '_m_val'):
|
|
542
|
+
return self._m_val if hasattr(self, '_m_val') else None
|
|
543
|
+
|
|
544
|
+
self._m_val = (((self.bits[2].n << 2) | (self.bits[1].n << 1)) | self.bits[0].n)
|
|
545
|
+
return self._m_val if hasattr(self, '_m_val') else None
|
|
546
|
+
|
|
547
|
+
@property
|
|
548
|
+
def inv_shift_val(self):
|
|
549
|
+
if hasattr(self, '_m_inv_shift_val'):
|
|
550
|
+
return self._m_inv_shift_val if hasattr(self, '_m_inv_shift_val') else None
|
|
551
|
+
|
|
552
|
+
self._m_inv_shift_val = (((self.bits[0].n << 2) | (self.bits[1].n << 1)) | self.bits[2].n)
|
|
553
|
+
return self._m_inv_shift_val if hasattr(self, '_m_inv_shift_val') else None
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
class ValidChunk(KaitaiStruct):
|
|
557
|
+
SEQ_FIELDS = []
|
|
558
|
+
def __init__(self, inv_chunk, chunk, _io, _parent=None, _root=None):
|
|
559
|
+
self._io = _io
|
|
560
|
+
self._parent = _parent
|
|
561
|
+
self._root = _root if _root else self
|
|
562
|
+
self.inv_chunk = inv_chunk
|
|
563
|
+
self.chunk = chunk
|
|
564
|
+
self._debug = collections.defaultdict(dict)
|
|
565
|
+
|
|
566
|
+
def _read(self):
|
|
567
|
+
pass
|
|
568
|
+
|
|
569
|
+
@property
|
|
570
|
+
def valid(self):
|
|
571
|
+
if hasattr(self, '_m_valid'):
|
|
572
|
+
return self._m_valid if hasattr(self, '_m_valid') else None
|
|
573
|
+
|
|
574
|
+
self._m_valid = (self.inv_chunk ^ self.chunk) == 15
|
|
575
|
+
return self._m_valid if hasattr(self, '_m_valid') else None
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
@property
|
|
579
|
+
def data_acs(self):
|
|
580
|
+
if hasattr(self, '_m_data_acs'):
|
|
581
|
+
return self._m_data_acs if hasattr(self, '_m_data_acs') else None
|
|
582
|
+
|
|
583
|
+
_pos = self._io.pos()
|
|
584
|
+
self._io.seek(0)
|
|
585
|
+
self._debug['_m_data_acs']['start'] = self._io.pos()
|
|
586
|
+
self._m_data_acs = [None] * ((self._parent.acs_in_sector - 1))
|
|
587
|
+
for i in range((self._parent.acs_in_sector - 1)):
|
|
588
|
+
if not 'arr' in self._debug['_m_data_acs']:
|
|
589
|
+
self._debug['_m_data_acs']['arr'] = []
|
|
590
|
+
self._debug['_m_data_acs']['arr'].append({'start': self._io.pos()})
|
|
591
|
+
_t__m_data_acs = MifareClassic.Trailer.AccessConditions.DataAc(self.acs_raw[i], self._io, self, self._root)
|
|
592
|
+
_t__m_data_acs._read()
|
|
593
|
+
self._m_data_acs[i] = _t__m_data_acs
|
|
594
|
+
self._debug['_m_data_acs']['arr'][i]['end'] = self._io.pos()
|
|
595
|
+
|
|
596
|
+
self._debug['_m_data_acs']['end'] = self._io.pos()
|
|
597
|
+
self._io.seek(_pos)
|
|
598
|
+
return self._m_data_acs if hasattr(self, '_m_data_acs') else None
|
|
599
|
+
|
|
600
|
+
@property
|
|
601
|
+
def remaps(self):
|
|
602
|
+
if hasattr(self, '_m_remaps'):
|
|
603
|
+
return self._m_remaps if hasattr(self, '_m_remaps') else None
|
|
604
|
+
|
|
605
|
+
_pos = self._io.pos()
|
|
606
|
+
self._io.seek(0)
|
|
607
|
+
self._debug['_m_remaps']['start'] = self._io.pos()
|
|
608
|
+
self._m_remaps = [None] * (self._parent.ac_bits)
|
|
609
|
+
for i in range(self._parent.ac_bits):
|
|
610
|
+
if not 'arr' in self._debug['_m_remaps']:
|
|
611
|
+
self._debug['_m_remaps']['arr'] = []
|
|
612
|
+
self._debug['_m_remaps']['arr'].append({'start': self._io.pos()})
|
|
613
|
+
_t__m_remaps = MifareClassic.Trailer.AccessConditions.ChunkBitRemap(i, self._io, self, self._root)
|
|
614
|
+
_t__m_remaps._read()
|
|
615
|
+
self._m_remaps[i] = _t__m_remaps
|
|
616
|
+
self._debug['_m_remaps']['arr'][i]['end'] = self._io.pos()
|
|
617
|
+
|
|
618
|
+
self._debug['_m_remaps']['end'] = self._io.pos()
|
|
619
|
+
self._io.seek(_pos)
|
|
620
|
+
return self._m_remaps if hasattr(self, '_m_remaps') else None
|
|
621
|
+
|
|
622
|
+
@property
|
|
623
|
+
def acs_raw(self):
|
|
624
|
+
if hasattr(self, '_m_acs_raw'):
|
|
625
|
+
return self._m_acs_raw if hasattr(self, '_m_acs_raw') else None
|
|
626
|
+
|
|
627
|
+
_pos = self._io.pos()
|
|
628
|
+
self._io.seek(0)
|
|
629
|
+
self._debug['_m_acs_raw']['start'] = self._io.pos()
|
|
630
|
+
self._m_acs_raw = [None] * (self._parent.acs_in_sector)
|
|
631
|
+
for i in range(self._parent.acs_in_sector):
|
|
632
|
+
if not 'arr' in self._debug['_m_acs_raw']:
|
|
633
|
+
self._debug['_m_acs_raw']['arr'] = []
|
|
634
|
+
self._debug['_m_acs_raw']['arr'].append({'start': self._io.pos()})
|
|
635
|
+
_t__m_acs_raw = MifareClassic.Trailer.AccessConditions.Ac(i, self._io, self, self._root)
|
|
636
|
+
_t__m_acs_raw._read()
|
|
637
|
+
self._m_acs_raw[i] = _t__m_acs_raw
|
|
638
|
+
self._debug['_m_acs_raw']['arr'][i]['end'] = self._io.pos()
|
|
639
|
+
|
|
640
|
+
self._debug['_m_acs_raw']['end'] = self._io.pos()
|
|
641
|
+
self._io.seek(_pos)
|
|
642
|
+
return self._m_acs_raw if hasattr(self, '_m_acs_raw') else None
|
|
643
|
+
|
|
644
|
+
@property
|
|
645
|
+
def trailer_ac(self):
|
|
646
|
+
if hasattr(self, '_m_trailer_ac'):
|
|
647
|
+
return self._m_trailer_ac if hasattr(self, '_m_trailer_ac') else None
|
|
648
|
+
|
|
649
|
+
_pos = self._io.pos()
|
|
650
|
+
self._io.seek(0)
|
|
651
|
+
self._debug['_m_trailer_ac']['start'] = self._io.pos()
|
|
652
|
+
self._m_trailer_ac = MifareClassic.Trailer.AccessConditions.TrailerAc(self.acs_raw[(self._parent.acs_in_sector - 1)], self._io, self, self._root)
|
|
653
|
+
self._m_trailer_ac._read()
|
|
654
|
+
self._debug['_m_trailer_ac']['end'] = self._io.pos()
|
|
655
|
+
self._io.seek(_pos)
|
|
656
|
+
return self._m_trailer_ac if hasattr(self, '_m_trailer_ac') else None
|
|
657
|
+
|
|
658
|
+
@property
|
|
659
|
+
def chunks(self):
|
|
660
|
+
if hasattr(self, '_m_chunks'):
|
|
661
|
+
return self._m_chunks if hasattr(self, '_m_chunks') else None
|
|
662
|
+
|
|
663
|
+
_pos = self._io.pos()
|
|
664
|
+
self._io.seek(0)
|
|
665
|
+
self._debug['_m_chunks']['start'] = self._io.pos()
|
|
666
|
+
self._m_chunks = [None] * (self._parent.ac_bits)
|
|
667
|
+
for i in range(self._parent.ac_bits):
|
|
668
|
+
if not 'arr' in self._debug['_m_chunks']:
|
|
669
|
+
self._debug['_m_chunks']['arr'] = []
|
|
670
|
+
self._debug['_m_chunks']['arr'].append({'start': self._io.pos()})
|
|
671
|
+
_t__m_chunks = MifareClassic.Trailer.AccessConditions.ValidChunk(self.raw_chunks[self.remaps[i].inv_chunk_no], self.raw_chunks[self.remaps[i].chunk_no], self._io, self, self._root)
|
|
672
|
+
_t__m_chunks._read()
|
|
673
|
+
self._m_chunks[i] = _t__m_chunks
|
|
674
|
+
self._debug['_m_chunks']['arr'][i]['end'] = self._io.pos()
|
|
675
|
+
|
|
676
|
+
self._debug['_m_chunks']['end'] = self._io.pos()
|
|
677
|
+
self._io.seek(_pos)
|
|
678
|
+
return self._m_chunks if hasattr(self, '_m_chunks') else None
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
@property
|
|
682
|
+
def ac_bits(self):
|
|
683
|
+
if hasattr(self, '_m_ac_bits'):
|
|
684
|
+
return self._m_ac_bits if hasattr(self, '_m_ac_bits') else None
|
|
685
|
+
|
|
686
|
+
self._m_ac_bits = 3
|
|
687
|
+
return self._m_ac_bits if hasattr(self, '_m_ac_bits') else None
|
|
688
|
+
|
|
689
|
+
@property
|
|
690
|
+
def acs_in_sector(self):
|
|
691
|
+
if hasattr(self, '_m_acs_in_sector'):
|
|
692
|
+
return self._m_acs_in_sector if hasattr(self, '_m_acs_in_sector') else None
|
|
693
|
+
|
|
694
|
+
self._m_acs_in_sector = 4
|
|
695
|
+
return self._m_acs_in_sector if hasattr(self, '_m_acs_in_sector') else None
|
|
696
|
+
|
|
697
|
+
@property
|
|
698
|
+
def ac_count_of_chunks(self):
|
|
699
|
+
if hasattr(self, '_m_ac_count_of_chunks'):
|
|
700
|
+
return self._m_ac_count_of_chunks if hasattr(self, '_m_ac_count_of_chunks') else None
|
|
701
|
+
|
|
702
|
+
self._m_ac_count_of_chunks = (self.ac_bits * 2)
|
|
703
|
+
return self._m_ac_count_of_chunks if hasattr(self, '_m_ac_count_of_chunks') else None
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
|