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.

Files changed (585) hide show
  1. polyfile/__init__.py +15 -0
  2. polyfile/__main__.py +394 -0
  3. polyfile/arithmetic.py +27 -0
  4. polyfile/ast.py +114 -0
  5. polyfile/debugger.py +1039 -0
  6. polyfile/expressions.py +346 -0
  7. polyfile/fileutils.py +343 -0
  8. polyfile/html.py +135 -0
  9. polyfile/http/__init__.py +1 -0
  10. polyfile/http/defacto.py +37 -0
  11. polyfile/http/deprecated.py +51 -0
  12. polyfile/http/experimental.py +67 -0
  13. polyfile/http/http_11.py +548 -0
  14. polyfile/http/matcher.py +37 -0
  15. polyfile/http/structured_headers.py +48 -0
  16. polyfile/iterators.py +72 -0
  17. polyfile/jpeg.py +24 -0
  18. polyfile/kaitai/__init__.py +0 -0
  19. polyfile/kaitai/compiler.py +156 -0
  20. polyfile/kaitai/parser.py +312 -0
  21. polyfile/kaitai/parsers/__init__.py +0 -0
  22. polyfile/kaitai/parsers/aix_utmp.py +116 -0
  23. polyfile/kaitai/parsers/allegro_dat.py +367 -0
  24. polyfile/kaitai/parsers/andes_firmware.py +64 -0
  25. polyfile/kaitai/parsers/android_bootldr_asus.py +105 -0
  26. polyfile/kaitai/parsers/android_bootldr_huawei.py +181 -0
  27. polyfile/kaitai/parsers/android_bootldr_qcom.py +217 -0
  28. polyfile/kaitai/parsers/android_dto.py +138 -0
  29. polyfile/kaitai/parsers/android_img.py +319 -0
  30. polyfile/kaitai/parsers/android_nanoapp_header.py +83 -0
  31. polyfile/kaitai/parsers/android_opengl_shaders_cache.py +151 -0
  32. polyfile/kaitai/parsers/android_sparse.py +237 -0
  33. polyfile/kaitai/parsers/android_super.py +401 -0
  34. polyfile/kaitai/parsers/apm_partition_table.py +196 -0
  35. polyfile/kaitai/parsers/apple_single_double.py +180 -0
  36. polyfile/kaitai/parsers/asn1_der.py +235 -0
  37. polyfile/kaitai/parsers/au.py +138 -0
  38. polyfile/kaitai/parsers/avantes_roh60.py +112 -0
  39. polyfile/kaitai/parsers/avi.py +296 -0
  40. polyfile/kaitai/parsers/bcd.py +111 -0
  41. polyfile/kaitai/parsers/bitcoin_transaction.py +210 -0
  42. polyfile/kaitai/parsers/blender_blend.py +334 -0
  43. polyfile/kaitai/parsers/bmp.py +780 -0
  44. polyfile/kaitai/parsers/bson.py +411 -0
  45. polyfile/kaitai/parsers/btrfs_stream.py +318 -0
  46. polyfile/kaitai/parsers/bytes_with_io.py +27 -0
  47. polyfile/kaitai/parsers/chrome_pak.py +194 -0
  48. polyfile/kaitai/parsers/code_6502.py +456 -0
  49. polyfile/kaitai/parsers/compressed_resource.py +217 -0
  50. polyfile/kaitai/parsers/cpio_old_le.py +154 -0
  51. polyfile/kaitai/parsers/cramfs.py +344 -0
  52. polyfile/kaitai/parsers/creative_voice_file.py +342 -0
  53. polyfile/kaitai/parsers/dbf.py +274 -0
  54. polyfile/kaitai/parsers/dcmp_0.py +664 -0
  55. polyfile/kaitai/parsers/dcmp_1.py +422 -0
  56. polyfile/kaitai/parsers/dcmp_2.py +312 -0
  57. polyfile/kaitai/parsers/dcmp_variable_length_integer.py +66 -0
  58. polyfile/kaitai/parsers/dex.py +1086 -0
  59. polyfile/kaitai/parsers/dicom.py +4370 -0
  60. polyfile/kaitai/parsers/dime_message.py +201 -0
  61. polyfile/kaitai/parsers/dns_packet.py +569 -0
  62. polyfile/kaitai/parsers/doom_wad.py +654 -0
  63. polyfile/kaitai/parsers/dos_datetime.py +191 -0
  64. polyfile/kaitai/parsers/dos_mz.py +172 -0
  65. polyfile/kaitai/parsers/ds_store.py +513 -0
  66. polyfile/kaitai/parsers/dtb.py +310 -0
  67. polyfile/kaitai/parsers/dune_2_pak.py +126 -0
  68. polyfile/kaitai/parsers/edid.py +472 -0
  69. polyfile/kaitai/parsers/efivar_signature_list.py +331 -0
  70. polyfile/kaitai/parsers/elf.py +2482 -0
  71. polyfile/kaitai/parsers/ethernet_frame.py +114 -0
  72. polyfile/kaitai/parsers/exif.py +723 -0
  73. polyfile/kaitai/parsers/ext2.py +537 -0
  74. polyfile/kaitai/parsers/fallout2_dat.py +187 -0
  75. polyfile/kaitai/parsers/fallout_dat.py +156 -0
  76. polyfile/kaitai/parsers/fasttracker_xm_module.py +558 -0
  77. polyfile/kaitai/parsers/ftl_dat.py +90 -0
  78. polyfile/kaitai/parsers/genmidi_op2.py +161 -0
  79. polyfile/kaitai/parsers/gettext_mo.py +541 -0
  80. polyfile/kaitai/parsers/gif.py +492 -0
  81. polyfile/kaitai/parsers/gimp_brush.py +244 -0
  82. polyfile/kaitai/parsers/glibc_utmp.py +114 -0
  83. polyfile/kaitai/parsers/gltf_binary.py +132 -0
  84. polyfile/kaitai/parsers/google_protobuf.py +151 -0
  85. polyfile/kaitai/parsers/gpt_partition_table.py +175 -0
  86. polyfile/kaitai/parsers/gran_turismo_vol.py +140 -0
  87. polyfile/kaitai/parsers/grub2_font.py +337 -0
  88. polyfile/kaitai/parsers/gzip.py +232 -0
  89. polyfile/kaitai/parsers/hashcat_restore.py +60 -0
  90. polyfile/kaitai/parsers/hccap.py +111 -0
  91. polyfile/kaitai/parsers/hccapx.py +103 -0
  92. polyfile/kaitai/parsers/heaps_pak.py +177 -0
  93. polyfile/kaitai/parsers/heroes_of_might_and_magic_agg.py +116 -0
  94. polyfile/kaitai/parsers/heroes_of_might_and_magic_bmp.py +34 -0
  95. polyfile/kaitai/parsers/icmp_packet.py +136 -0
  96. polyfile/kaitai/parsers/ico.py +129 -0
  97. polyfile/kaitai/parsers/id3v1_1.py +220 -0
  98. polyfile/kaitai/parsers/id3v2_3.py +324 -0
  99. polyfile/kaitai/parsers/id3v2_4.py +423 -0
  100. polyfile/kaitai/parsers/ines.py +282 -0
  101. polyfile/kaitai/parsers/ipv4_packet.py +158 -0
  102. polyfile/kaitai/parsers/ipv6_packet.py +55 -0
  103. polyfile/kaitai/parsers/iso9660.py +544 -0
  104. polyfile/kaitai/parsers/java_class.py +1113 -0
  105. polyfile/kaitai/parsers/jpeg.py +361 -0
  106. polyfile/kaitai/parsers/luks.py +149 -0
  107. polyfile/kaitai/parsers/lzh.py +165 -0
  108. polyfile/kaitai/parsers/mac_os_resource_snd.py +493 -0
  109. polyfile/kaitai/parsers/mach_o.py +3033 -0
  110. polyfile/kaitai/parsers/mach_o_fat.py +92 -0
  111. polyfile/kaitai/parsers/magicavoxel_vox.py +391 -0
  112. polyfile/kaitai/parsers/manifest.json +1 -0
  113. polyfile/kaitai/parsers/mbr_partition_table.py +119 -0
  114. polyfile/kaitai/parsers/mcap.py +1015 -0
  115. polyfile/kaitai/parsers/microsoft_cfb.py +293 -0
  116. polyfile/kaitai/parsers/microsoft_network_monitor_v2.py +309 -0
  117. polyfile/kaitai/parsers/microsoft_pe.py +765 -0
  118. polyfile/kaitai/parsers/mifare_classic.py +706 -0
  119. polyfile/kaitai/parsers/minecraft_nbt.py +449 -0
  120. polyfile/kaitai/parsers/monomakh_sapr_chg.py +69 -0
  121. polyfile/kaitai/parsers/mozilla_mar.py +239 -0
  122. polyfile/kaitai/parsers/mp4.py +333 -0
  123. polyfile/kaitai/parsers/msgpack.py +467 -0
  124. polyfile/kaitai/parsers/nitf.py +1189 -0
  125. polyfile/kaitai/parsers/nt_mdt_pal.py +155 -0
  126. polyfile/kaitai/parsers/ogg.py +118 -0
  127. polyfile/kaitai/parsers/openpgp_message.py +993 -0
  128. polyfile/kaitai/parsers/packet_ppi.py +515 -0
  129. polyfile/kaitai/parsers/pcap.py +344 -0
  130. polyfile/kaitai/parsers/pcf_font.py +506 -0
  131. polyfile/kaitai/parsers/pcx.py +195 -0
  132. polyfile/kaitai/parsers/pcx_dcx.py +79 -0
  133. polyfile/kaitai/parsers/phar_without_stub.py +399 -0
  134. polyfile/kaitai/parsers/php_serialized_value.py +505 -0
  135. polyfile/kaitai/parsers/png.py +721 -0
  136. polyfile/kaitai/parsers/protocol_body.py +260 -0
  137. polyfile/kaitai/parsers/psx_tim.py +104 -0
  138. polyfile/kaitai/parsers/python_pickle.py +718 -0
  139. polyfile/kaitai/parsers/python_pyc_27.py +510 -0
  140. polyfile/kaitai/parsers/quake_mdl.py +441 -0
  141. polyfile/kaitai/parsers/quake_pak.py +112 -0
  142. polyfile/kaitai/parsers/quicktime_mov.py +634 -0
  143. polyfile/kaitai/parsers/rar.py +265 -0
  144. polyfile/kaitai/parsers/regf.py +569 -0
  145. polyfile/kaitai/parsers/renderware_binary_stream.py +877 -0
  146. polyfile/kaitai/parsers/resource_fork.py +611 -0
  147. polyfile/kaitai/parsers/respack.py +57 -0
  148. polyfile/kaitai/parsers/riff.py +409 -0
  149. polyfile/kaitai/parsers/rpm.py +964 -0
  150. polyfile/kaitai/parsers/rtcp_payload.py +579 -0
  151. polyfile/kaitai/parsers/rtp_packet.py +150 -0
  152. polyfile/kaitai/parsers/rtpdump.py +115 -0
  153. polyfile/kaitai/parsers/ruby_marshal.py +423 -0
  154. polyfile/kaitai/parsers/s3m.py +493 -0
  155. polyfile/kaitai/parsers/saints_row_2_vpp_pc.py +254 -0
  156. polyfile/kaitai/parsers/shapefile_index.py +174 -0
  157. polyfile/kaitai/parsers/shapefile_main.py +893 -0
  158. polyfile/kaitai/parsers/some_ip.py +209 -0
  159. polyfile/kaitai/parsers/some_ip_container.py +37 -0
  160. polyfile/kaitai/parsers/some_ip_sd.py +86 -0
  161. polyfile/kaitai/parsers/some_ip_sd_entries.py +160 -0
  162. polyfile/kaitai/parsers/some_ip_sd_options.py +374 -0
  163. polyfile/kaitai/parsers/specpr.py +404 -0
  164. polyfile/kaitai/parsers/sqlite3.py +472 -0
  165. polyfile/kaitai/parsers/ssh_public_key.py +252 -0
  166. polyfile/kaitai/parsers/standard_midi_file.py +390 -0
  167. polyfile/kaitai/parsers/stl.py +111 -0
  168. polyfile/kaitai/parsers/sudoers_ts.py +201 -0
  169. polyfile/kaitai/parsers/swf.py +406 -0
  170. polyfile/kaitai/parsers/systemd_journal.py +361 -0
  171. polyfile/kaitai/parsers/tcp_segment.py +57 -0
  172. polyfile/kaitai/parsers/tga.py +213 -0
  173. polyfile/kaitai/parsers/tls_client_hello.py +293 -0
  174. polyfile/kaitai/parsers/tr_dos_image.py +322 -0
  175. polyfile/kaitai/parsers/tsm.py +198 -0
  176. polyfile/kaitai/parsers/ttf.py +1847 -0
  177. polyfile/kaitai/parsers/udp_datagram.py +42 -0
  178. polyfile/kaitai/parsers/uefi_te.py +236 -0
  179. polyfile/kaitai/parsers/uimage.py +198 -0
  180. polyfile/kaitai/parsers/utf8_string.py +137 -0
  181. polyfile/kaitai/parsers/vfat.py +410 -0
  182. polyfile/kaitai/parsers/vlq_base128_be.py +104 -0
  183. polyfile/kaitai/parsers/vlq_base128_le.py +129 -0
  184. polyfile/kaitai/parsers/vmware_vmdk.py +167 -0
  185. polyfile/kaitai/parsers/vp8_ivf.py +112 -0
  186. polyfile/kaitai/parsers/warcraft_2_pud.py +423 -0
  187. polyfile/kaitai/parsers/wav.py +1014 -0
  188. polyfile/kaitai/parsers/websocket.py +167 -0
  189. polyfile/kaitai/parsers/windows_evt_log.py +304 -0
  190. polyfile/kaitai/parsers/windows_lnk_file.py +467 -0
  191. polyfile/kaitai/parsers/windows_minidump.py +575 -0
  192. polyfile/kaitai/parsers/windows_resource_file.py +243 -0
  193. polyfile/kaitai/parsers/windows_shell_items.py +190 -0
  194. polyfile/kaitai/parsers/windows_systemtime.py +52 -0
  195. polyfile/kaitai/parsers/wmf.py +502 -0
  196. polyfile/kaitai/parsers/xar.py +181 -0
  197. polyfile/kaitai/parsers/xwd.py +189 -0
  198. polyfile/kaitai/parsers/zip.py +685 -0
  199. polyfile/kaitai/parsers/zisofs.py +158 -0
  200. polyfile/kaitai/parsers/zx_spectrum_tap.py +184 -0
  201. polyfile/kaitaimatcher.py +113 -0
  202. polyfile/languagematcher.py +217 -0
  203. polyfile/logger.py +135 -0
  204. polyfile/magic.py +2983 -0
  205. polyfile/magic_defs/COPYING +29 -0
  206. polyfile/magic_defs/__init__.py +0 -0
  207. polyfile/magic_defs/acorn +102 -0
  208. polyfile/magic_defs/adi +13 -0
  209. polyfile/magic_defs/adventure +122 -0
  210. polyfile/magic_defs/aes +29 -0
  211. polyfile/magic_defs/algol68 +35 -0
  212. polyfile/magic_defs/allegro +9 -0
  213. polyfile/magic_defs/alliant +18 -0
  214. polyfile/magic_defs/alpha +32 -0
  215. polyfile/magic_defs/amanda +12 -0
  216. polyfile/magic_defs/amigaos +218 -0
  217. polyfile/magic_defs/android +259 -0
  218. polyfile/magic_defs/animation +1197 -0
  219. polyfile/magic_defs/aout +46 -0
  220. polyfile/magic_defs/apache +28 -0
  221. polyfile/magic_defs/apl +7 -0
  222. polyfile/magic_defs/apple +773 -0
  223. polyfile/magic_defs/application +7 -0
  224. polyfile/magic_defs/applix +13 -0
  225. polyfile/magic_defs/apt +52 -0
  226. polyfile/magic_defs/archive +2586 -0
  227. polyfile/magic_defs/aria +38 -0
  228. polyfile/magic_defs/arm +50 -0
  229. polyfile/magic_defs/asf +132 -0
  230. polyfile/magic_defs/assembler +18 -0
  231. polyfile/magic_defs/asterix +18 -0
  232. polyfile/magic_defs/att3b +41 -0
  233. polyfile/magic_defs/audio +1291 -0
  234. polyfile/magic_defs/avm +33 -0
  235. polyfile/magic_defs/basis +18 -0
  236. polyfile/magic_defs/beetle +7 -0
  237. polyfile/magic_defs/ber +65 -0
  238. polyfile/magic_defs/bflt +14 -0
  239. polyfile/magic_defs/bhl +10 -0
  240. polyfile/magic_defs/bioinformatics +178 -0
  241. polyfile/magic_defs/biosig +154 -0
  242. polyfile/magic_defs/blackberry +8 -0
  243. polyfile/magic_defs/blcr +25 -0
  244. polyfile/magic_defs/blender +50 -0
  245. polyfile/magic_defs/blit +24 -0
  246. polyfile/magic_defs/bm +10 -0
  247. polyfile/magic_defs/bout +11 -0
  248. polyfile/magic_defs/bsdi +33 -0
  249. polyfile/magic_defs/bsi +10 -0
  250. polyfile/magic_defs/btsnoop +13 -0
  251. polyfile/magic_defs/burp +7 -0
  252. polyfile/magic_defs/bytecode +41 -0
  253. polyfile/magic_defs/c-lang +110 -0
  254. polyfile/magic_defs/c64 +531 -0
  255. polyfile/magic_defs/cad +437 -0
  256. polyfile/magic_defs/cafebabe +107 -0
  257. polyfile/magic_defs/cbor +21 -0
  258. polyfile/magic_defs/ccf +14 -0
  259. polyfile/magic_defs/cddb +12 -0
  260. polyfile/magic_defs/chord +15 -0
  261. polyfile/magic_defs/cisco +12 -0
  262. polyfile/magic_defs/citrus +12 -0
  263. polyfile/magic_defs/clarion +27 -0
  264. polyfile/magic_defs/claris +48 -0
  265. polyfile/magic_defs/clipper +65 -0
  266. polyfile/magic_defs/clojure +30 -0
  267. polyfile/magic_defs/coff +98 -0
  268. polyfile/magic_defs/commands +201 -0
  269. polyfile/magic_defs/communications +22 -0
  270. polyfile/magic_defs/compress +461 -0
  271. polyfile/magic_defs/console +1213 -0
  272. polyfile/magic_defs/convex +69 -0
  273. polyfile/magic_defs/coverage +91 -0
  274. polyfile/magic_defs/cracklib +14 -0
  275. polyfile/magic_defs/crypto +31 -0
  276. polyfile/magic_defs/csv +8 -0
  277. polyfile/magic_defs/ctags +6 -0
  278. polyfile/magic_defs/ctf +23 -0
  279. polyfile/magic_defs/cubemap +8 -0
  280. polyfile/magic_defs/cups +56 -0
  281. polyfile/magic_defs/dact +11 -0
  282. polyfile/magic_defs/database +886 -0
  283. polyfile/magic_defs/dataone +47 -0
  284. polyfile/magic_defs/dbpf +15 -0
  285. polyfile/magic_defs/der +146 -0
  286. polyfile/magic_defs/diamond +12 -0
  287. polyfile/magic_defs/dif +33 -0
  288. polyfile/magic_defs/diff +41 -0
  289. polyfile/magic_defs/digital +59 -0
  290. polyfile/magic_defs/dolby +69 -0
  291. polyfile/magic_defs/dsf +25 -0
  292. polyfile/magic_defs/dump +96 -0
  293. polyfile/magic_defs/dwarfs +45 -0
  294. polyfile/magic_defs/dyadic +61 -0
  295. polyfile/magic_defs/ebml +8 -0
  296. polyfile/magic_defs/edid +11 -0
  297. polyfile/magic_defs/editors +43 -0
  298. polyfile/magic_defs/efi +15 -0
  299. polyfile/magic_defs/elf +379 -0
  300. polyfile/magic_defs/encore +22 -0
  301. polyfile/magic_defs/epoc +62 -0
  302. polyfile/magic_defs/erlang +21 -0
  303. polyfile/magic_defs/espressif +57 -0
  304. polyfile/magic_defs/esri +28 -0
  305. polyfile/magic_defs/etf +33 -0
  306. polyfile/magic_defs/fcs +9 -0
  307. polyfile/magic_defs/filesystems +2694 -0
  308. polyfile/magic_defs/finger +16 -0
  309. polyfile/magic_defs/firmware +133 -0
  310. polyfile/magic_defs/flash +62 -0
  311. polyfile/magic_defs/flif +36 -0
  312. polyfile/magic_defs/fonts +449 -0
  313. polyfile/magic_defs/forth +82 -0
  314. polyfile/magic_defs/fortran +9 -0
  315. polyfile/magic_defs/frame +62 -0
  316. polyfile/magic_defs/freebsd +164 -0
  317. polyfile/magic_defs/fsav +128 -0
  318. polyfile/magic_defs/fusecompress +12 -0
  319. polyfile/magic_defs/games +696 -0
  320. polyfile/magic_defs/gcc +17 -0
  321. polyfile/magic_defs/gconv +10 -0
  322. polyfile/magic_defs/gentoo +85 -0
  323. polyfile/magic_defs/geo +166 -0
  324. polyfile/magic_defs/geos +20 -0
  325. polyfile/magic_defs/gimp +77 -0
  326. polyfile/magic_defs/git +13 -0
  327. polyfile/magic_defs/glibc +21 -0
  328. polyfile/magic_defs/gnome +59 -0
  329. polyfile/magic_defs/gnu +173 -0
  330. polyfile/magic_defs/gnumeric +8 -0
  331. polyfile/magic_defs/gpt +240 -0
  332. polyfile/magic_defs/gpu +28 -0
  333. polyfile/magic_defs/grace +21 -0
  334. polyfile/magic_defs/graphviz +12 -0
  335. polyfile/magic_defs/gringotts +48 -0
  336. polyfile/magic_defs/guile +13 -0
  337. polyfile/magic_defs/hardware +12 -0
  338. polyfile/magic_defs/hitachi-sh +30 -0
  339. polyfile/magic_defs/hp +433 -0
  340. polyfile/magic_defs/human68k +26 -0
  341. polyfile/magic_defs/ibm370 +52 -0
  342. polyfile/magic_defs/ibm6000 +35 -0
  343. polyfile/magic_defs/icc +214 -0
  344. polyfile/magic_defs/iff +80 -0
  345. polyfile/magic_defs/images +4210 -0
  346. polyfile/magic_defs/inform +9 -0
  347. polyfile/magic_defs/intel +310 -0
  348. polyfile/magic_defs/interleaf +9 -0
  349. polyfile/magic_defs/island +10 -0
  350. polyfile/magic_defs/ispell +63 -0
  351. polyfile/magic_defs/isz +15 -0
  352. polyfile/magic_defs/java +52 -0
  353. polyfile/magic_defs/javascript +171 -0
  354. polyfile/magic_defs/jpeg +252 -0
  355. polyfile/magic_defs/json +8 -0
  356. polyfile/magic_defs/karma +9 -0
  357. polyfile/magic_defs/kde +11 -0
  358. polyfile/magic_defs/keepass +20 -0
  359. polyfile/magic_defs/kerberos +45 -0
  360. polyfile/magic_defs/kicad +85 -0
  361. polyfile/magic_defs/kml +34 -0
  362. polyfile/magic_defs/lammps +64 -0
  363. polyfile/magic_defs/lecter +6 -0
  364. polyfile/magic_defs/lex +12 -0
  365. polyfile/magic_defs/lif +50 -0
  366. polyfile/magic_defs/linux +557 -0
  367. polyfile/magic_defs/lisp +78 -0
  368. polyfile/magic_defs/llvm +22 -0
  369. polyfile/magic_defs/locoscript +12 -0
  370. polyfile/magic_defs/lua +31 -0
  371. polyfile/magic_defs/luks +126 -0
  372. polyfile/magic_defs/m4 +11 -0
  373. polyfile/magic_defs/mach +303 -0
  374. polyfile/magic_defs/macintosh +505 -0
  375. polyfile/magic_defs/macos +7 -0
  376. polyfile/magic_defs/magic +10 -0
  377. polyfile/magic_defs/magic.mgc +0 -0
  378. polyfile/magic_defs/mail.news +132 -0
  379. polyfile/magic_defs/make +21 -0
  380. polyfile/magic_defs/map +413 -0
  381. polyfile/magic_defs/maple +109 -0
  382. polyfile/magic_defs/marc21 +30 -0
  383. polyfile/magic_defs/mathcad +8 -0
  384. polyfile/magic_defs/mathematica +188 -0
  385. polyfile/magic_defs/matroska +17 -0
  386. polyfile/magic_defs/mcrypt +52 -0
  387. polyfile/magic_defs/measure +44 -0
  388. polyfile/magic_defs/mercurial +13 -0
  389. polyfile/magic_defs/metastore +8 -0
  390. polyfile/magic_defs/meteorological +53 -0
  391. polyfile/magic_defs/microfocus +21 -0
  392. polyfile/magic_defs/mime +9 -0
  393. polyfile/magic_defs/mips +120 -0
  394. polyfile/magic_defs/mirage +8 -0
  395. polyfile/magic_defs/misctools +140 -0
  396. polyfile/magic_defs/mkid +11 -0
  397. polyfile/magic_defs/mlssa +8 -0
  398. polyfile/magic_defs/mmdf +6 -0
  399. polyfile/magic_defs/modem +92 -0
  400. polyfile/magic_defs/modulefile +9 -0
  401. polyfile/magic_defs/motorola +71 -0
  402. polyfile/magic_defs/mozilla +37 -0
  403. polyfile/magic_defs/msdos +2304 -0
  404. polyfile/magic_defs/msooxml +68 -0
  405. polyfile/magic_defs/msvc +222 -0
  406. polyfile/magic_defs/msx +309 -0
  407. polyfile/magic_defs/mup +24 -0
  408. polyfile/magic_defs/music +17 -0
  409. polyfile/magic_defs/nasa +7 -0
  410. polyfile/magic_defs/natinst +24 -0
  411. polyfile/magic_defs/ncr +49 -0
  412. polyfile/magic_defs/neko +12 -0
  413. polyfile/magic_defs/netbsd +251 -0
  414. polyfile/magic_defs/netscape +26 -0
  415. polyfile/magic_defs/netware +11 -0
  416. polyfile/magic_defs/news +13 -0
  417. polyfile/magic_defs/nifty +202 -0
  418. polyfile/magic_defs/nim-lang +29 -0
  419. polyfile/magic_defs/nitpicker +14 -0
  420. polyfile/magic_defs/numpy +9 -0
  421. polyfile/magic_defs/oasis +12 -0
  422. polyfile/magic_defs/ocaml +14 -0
  423. polyfile/magic_defs/octave +6 -0
  424. polyfile/magic_defs/ole2compounddocs +760 -0
  425. polyfile/magic_defs/olf +98 -0
  426. polyfile/magic_defs/openfst +17 -0
  427. polyfile/magic_defs/opentimestamps +16 -0
  428. polyfile/magic_defs/oric +16 -0
  429. polyfile/magic_defs/os2 +186 -0
  430. polyfile/magic_defs/os400 +39 -0
  431. polyfile/magic_defs/os9 +80 -0
  432. polyfile/magic_defs/osf1 +10 -0
  433. polyfile/magic_defs/palm +156 -0
  434. polyfile/magic_defs/parix +13 -0
  435. polyfile/magic_defs/parrot +22 -0
  436. polyfile/magic_defs/pascal +39 -0
  437. polyfile/magic_defs/pbf +11 -0
  438. polyfile/magic_defs/pbm +8 -0
  439. polyfile/magic_defs/pc88 +24 -0
  440. polyfile/magic_defs/pc98 +77 -0
  441. polyfile/magic_defs/pci_ids +116 -0
  442. polyfile/magic_defs/pcjr +8 -0
  443. polyfile/magic_defs/pdf +51 -0
  444. polyfile/magic_defs/pdp +42 -0
  445. polyfile/magic_defs/perl +100 -0
  446. polyfile/magic_defs/pgf +52 -0
  447. polyfile/magic_defs/pgp +581 -0
  448. polyfile/magic_defs/pgp-binary-keys +388 -0
  449. polyfile/magic_defs/pkgadd +7 -0
  450. polyfile/magic_defs/plan9 +25 -0
  451. polyfile/magic_defs/playdate +57 -0
  452. polyfile/magic_defs/plus5 +18 -0
  453. polyfile/magic_defs/pmem +46 -0
  454. polyfile/magic_defs/polyfile_zip +5 -0
  455. polyfile/magic_defs/polyml +23 -0
  456. polyfile/magic_defs/printer +269 -0
  457. polyfile/magic_defs/project +10 -0
  458. polyfile/magic_defs/psdbms +14 -0
  459. polyfile/magic_defs/psl +14 -0
  460. polyfile/magic_defs/pulsar +13 -0
  461. polyfile/magic_defs/puzzle +17 -0
  462. polyfile/magic_defs/pwsafe +14 -0
  463. polyfile/magic_defs/pyramid +12 -0
  464. polyfile/magic_defs/python +305 -0
  465. polyfile/magic_defs/qt +30 -0
  466. polyfile/magic_defs/revision +66 -0
  467. polyfile/magic_defs/riff +840 -0
  468. polyfile/magic_defs/rinex +44 -0
  469. polyfile/magic_defs/ringdove +45 -0
  470. polyfile/magic_defs/rpi +52 -0
  471. polyfile/magic_defs/rpm +45 -0
  472. polyfile/magic_defs/rpmsg +7 -0
  473. polyfile/magic_defs/rst +11 -0
  474. polyfile/magic_defs/rtf +94 -0
  475. polyfile/magic_defs/ruby +55 -0
  476. polyfile/magic_defs/rust +21 -0
  477. polyfile/magic_defs/sc +7 -0
  478. polyfile/magic_defs/sccs +24 -0
  479. polyfile/magic_defs/scientific +144 -0
  480. polyfile/magic_defs/securitycerts +6 -0
  481. polyfile/magic_defs/selinux +24 -0
  482. polyfile/magic_defs/sendmail +37 -0
  483. polyfile/magic_defs/sequent +42 -0
  484. polyfile/magic_defs/sereal +35 -0
  485. polyfile/magic_defs/sgi +144 -0
  486. polyfile/magic_defs/sgml +161 -0
  487. polyfile/magic_defs/sharc +23 -0
  488. polyfile/magic_defs/sinclair +40 -0
  489. polyfile/magic_defs/sisu +18 -0
  490. polyfile/magic_defs/sketch +6 -0
  491. polyfile/magic_defs/smalltalk +25 -0
  492. polyfile/magic_defs/smile +34 -0
  493. polyfile/magic_defs/sniffer +482 -0
  494. polyfile/magic_defs/softquad +40 -0
  495. polyfile/magic_defs/sosi +40 -0
  496. polyfile/magic_defs/spec +21 -0
  497. polyfile/magic_defs/spectrum +184 -0
  498. polyfile/magic_defs/sql +288 -0
  499. polyfile/magic_defs/ssh +39 -0
  500. polyfile/magic_defs/ssl +20 -0
  501. polyfile/magic_defs/statistics +45 -0
  502. polyfile/magic_defs/subtitle +38 -0
  503. polyfile/magic_defs/sun +141 -0
  504. polyfile/magic_defs/svf +5 -0
  505. polyfile/magic_defs/sylk +36 -0
  506. polyfile/magic_defs/symbos +42 -0
  507. polyfile/magic_defs/sysex +429 -0
  508. polyfile/magic_defs/tcl +29 -0
  509. polyfile/magic_defs/teapot +6 -0
  510. polyfile/magic_defs/terminfo +63 -0
  511. polyfile/magic_defs/tex +141 -0
  512. polyfile/magic_defs/tgif +7 -0
  513. polyfile/magic_defs/ti-8x +239 -0
  514. polyfile/magic_defs/timezone +42 -0
  515. polyfile/magic_defs/tplink +95 -0
  516. polyfile/magic_defs/troff +38 -0
  517. polyfile/magic_defs/tuxedo +8 -0
  518. polyfile/magic_defs/typeset +8 -0
  519. polyfile/magic_defs/uf2 +72 -0
  520. polyfile/magic_defs/unicode +15 -0
  521. polyfile/magic_defs/unisig +12 -0
  522. polyfile/magic_defs/unknown +34 -0
  523. polyfile/magic_defs/usd +21 -0
  524. polyfile/magic_defs/uterus +16 -0
  525. polyfile/magic_defs/uuencode +28 -0
  526. polyfile/magic_defs/vacuum-cleaner +54 -0
  527. polyfile/magic_defs/varied.out +46 -0
  528. polyfile/magic_defs/varied.script +21 -0
  529. polyfile/magic_defs/vax +32 -0
  530. polyfile/magic_defs/vicar +17 -0
  531. polyfile/magic_defs/virtual +307 -0
  532. polyfile/magic_defs/virtutech +12 -0
  533. polyfile/magic_defs/visx +32 -0
  534. polyfile/magic_defs/vms +30 -0
  535. polyfile/magic_defs/vmware +6 -0
  536. polyfile/magic_defs/vorbis +155 -0
  537. polyfile/magic_defs/vxl +14 -0
  538. polyfile/magic_defs/warc +16 -0
  539. polyfile/magic_defs/weak +16 -0
  540. polyfile/magic_defs/web +18 -0
  541. polyfile/magic_defs/webassembly +17 -0
  542. polyfile/magic_defs/windows +1811 -0
  543. polyfile/magic_defs/wireless +7 -0
  544. polyfile/magic_defs/wordprocessors +630 -0
  545. polyfile/magic_defs/wsdl +23 -0
  546. polyfile/magic_defs/x68000 +25 -0
  547. polyfile/magic_defs/xdelta +13 -0
  548. polyfile/magic_defs/xenix +106 -0
  549. polyfile/magic_defs/xilinx +58 -0
  550. polyfile/magic_defs/xo65 +37 -0
  551. polyfile/magic_defs/xwindows +43 -0
  552. polyfile/magic_defs/yara +17 -0
  553. polyfile/magic_defs/zfs +96 -0
  554. polyfile/magic_defs/zilog +12 -0
  555. polyfile/magic_defs/zip +126 -0
  556. polyfile/magic_defs/zyxel +17 -0
  557. polyfile/nes.py +144 -0
  558. polyfile/nitf.py +15 -0
  559. polyfile/pdf.py +1264 -0
  560. polyfile/pickles.py +45 -0
  561. polyfile/polyfile.py +409 -0
  562. polyfile/profiling.py +115 -0
  563. polyfile/repl.py +624 -0
  564. polyfile/search.py +310 -0
  565. polyfile/serialization.py +323 -0
  566. polyfile/structmatcher.py +46 -0
  567. polyfile/structs.py +281 -0
  568. polyfile/templates/download.js +162 -0
  569. polyfile/templates/hexdump.css +268 -0
  570. polyfile/templates/hexdump.js +756 -0
  571. polyfile/templates/jquery-3.4.1.min.js +2 -0
  572. polyfile/templates/template.html +119 -0
  573. polyfile/wildcards.py +62 -0
  574. polyfile/zipmatcher.py +183 -0
  575. polyfile_weave-0.5.5.dist-info/METADATA +173 -0
  576. polyfile_weave-0.5.5.dist-info/RECORD +585 -0
  577. polyfile_weave-0.5.5.dist-info/WHEEL +5 -0
  578. polyfile_weave-0.5.5.dist-info/entry_points.txt +2 -0
  579. polyfile_weave-0.5.5.dist-info/licenses/LICENSE +202 -0
  580. polyfile_weave-0.5.5.dist-info/top_level.txt +2 -0
  581. polymerge/__init__.py +1 -0
  582. polymerge/__main__.py +296 -0
  583. polymerge/cfg.py +127 -0
  584. polymerge/polymerge.py +227 -0
  585. 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
+