Commit Graph
797 Commits
Author SHA1 Message Date
Paul KilarandClaude Opus 5 bd34414c6d ePassport: fix the FILES and LOG panes going blank
Clicking a file that holds a picture - EF_DG2, EF_DG7 - showed nothing at
all: no image, no hex dump, and no error either.

Both panes drew their text into a single Kivy Label, and a Label is one
OpenGL texture, capped at commonly 16384px. A monospace line here is 13px,
so past roughly 1260 lines the texture fails to be created and the pane
draws nothing. A DG2 portrait is 15-25kB, which is 940-1560 dump lines at
16 bytes a row and four times that in a narrow pane, where the dump falls
back to 4 bytes a row. The LOG pane holds 4000 lines, so it blanked as
well once a dump got talkative. The 64kB cap already in the hex view
guarded the wrong bound: it was sized for how long a Label takes to lay
out, not for what the GPU will hold.

Split both over several Labels. split_blocks() chunks at 512 rows, and the
log at 256 because its lines wrap and so cover more rows than they hold.
The log reuses its Labels and only assigns the ones whose text changed, so
streaming output still re-renders just the tail.

The FILES tab now also shows the picture above the dump for the files that
carry one, which is what you actually want to see for a DG2. The PNG is
already decoded at load time for the data page, so image_for() only hands
over what is there.

Behaviour change: a file carrying an image shows it above the hex dump,
with the dump still underneath. Nothing is truncated that was not before.

Testing: 270 passed, 2 skipped (was 265). Checked on screen against a
generated sample - EF_DG2 shows the portrait, EF_DG7 the signature, EF_SOD
the dump at full height, and the LOG tab renders a full 4000-line buffer
as 16 Labels, tallest texture 3328px against the 16384px maximum. black
clean. Python only, so no client or firmware build matrix applies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-31 10:45:57 -04:00
Paul KilarandClaude Opus 5 dc718d3e29 ePassport: fix the segfault on startup
The app died with SIGSEGV before drawing anything, on every entry point
including --help.

The window minimum size was pre-seeded into Kivy's Config, and
WindowBase.__init__ is the only place Kivy reads it - so it was applied from
inside WindowSDL.create_window(), while Window.initialized was still False.
If the window SDL has just made is smaller than that minimum, SDL resizes it
on the spot; the resize comes back through the SDL event filter into
EventLoop.idle(), which runs the clock and re-enters create_window(). Still
not initialised, that call runs setup_window() again and resizes again, until
the C stack gives out.

A scaled HiDPI session is enough to reach it: with sdl2-compat on SDL3 under
Wayland sizes come back in logical points, so the inherited 800x600 default
arrives as a 500x375 window, under the 760x520 minimum. Set the minimum on
Window once it exists instead, where the same resize takes Kivy's cheap
already-initialised path.

That exposed a second fault on the same path. _install_kivy_logging attached a
bare StreamHandler() to Kivy's own logger, and kivy.logger replaces sys.stderr
with a stream that feeds whatever is written to it back in as a warning -
kivy/logger.py cautions about exactly this. Any warning _KivyNoise did not
drop answered itself until the recursion limit stopped it, with stderr as the
broken part, so nothing legible came out. Not theoretical: this machine logs
"MTD: Unable to open device" at startup, which would have killed the app as
soon as the segfault was out of the way. Point the handler at the real stderr,
which Kivy leaves alone.

Behaviour change: a window that opens smaller than 760x520 is now grown to it,
rather than the constraint being imposed while the window is built.

Testing: 257 passed, 2 skipped (was 254/2); --help, a plain launch, --dump on
a generated sample and -v all start and stay up; black clean. Python-only
change, so no client or firmware build matrix applies.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 14:17:37 -04:00
iceman1001 297d5cef4b fix argparser 2026-08-29 17:15:52 +02:00
iceman1001 0a0d7f19c3 fixed another MIX command laying around 2026-08-29 17:11:43 +02:00
iceman1001 77a9f45db6 texts 2026-08-28 01:16:30 +02:00
Msprg 2d898d31e7 fix make install after sim014 firmware removal
e2cf7dee5 removed sim014.bin but the top-level Makefile still lists it
in INSTALLSIMFW, so 'make install' fails on cp. Install sim020 instead,
and point the pm3_tests.sh existence check at the same file.
2026-08-27 23:55:50 +02:00
iceman1001 98c5897bbe a slow test should only be run during --long2 2026-08-27 15:34:06 +02:00
iceman1001 62b7f49089 add some more smart card tests for T=1 etc. Thanks Claude 2026-08-27 02:01:55 +02:00
iceman1001 6b7678edeb added some tests of etc annotations 2026-08-26 20:47:55 +02:00
dxl 893d8a6f78 Rename ePassport launcher to ePassport.py to avoid case collision
The launcher script tools/ePassport/ePassport and the package directory tools/ePassport/epassport/ differ only in case, so on case-insensitive filesystems (Windows) they occupy the same path and a fresh clone reports the tracked script as deleted. Rename the launcher to ePassport.py and update the Makefile run target, the README, and the python3 -m epassport shim docstring.
2026-08-25 13:13:21 +02:00
iceman1001 cb2b0f5fc0 A python3 kivy epassport viewer. You can read and dump a passport using BAC or CAN. There is also a screen OCR to read MZR if you like. Every dump gets its own folder. You can generate a set of sample dump folders. This project is just a fun test of what Claude can do. Hack all things! 2026-08-23 22:35:27 +02:00
Antiklesys b1d2d41a44 Added script supporting external SAM modules
This script adds support for external SAM modules to be used with Proxmark 3 Easy and Proxmark 5.
To run this script  you would need an external SIM/SAM reader such as the ACR39T or ACR40T family or similar.
2026-08-22 23:48:38 +08:00
nffq 0b9d97be2b fix: FM11RF08S key recovery generates incorrect results when nt == 0 2026-08-20 13:37:34 +02:00
Philippe Teuwen caa76f57b3 Fix pm5 recovery image 2026-08-19 19:28:17 +02:00
Philippe Teuwen 52af3f11e2 rename a couple of commands 2026-08-19 15:51:54 +02:00
DXL 0191fb78ec CMake has been implemented to manage ARM projects.
Add the mkversion bat and ps1 implementation to the Windows platform compilation.
Make armlib a static library so that bootrom and armsrc can be reused.
2026-08-19 15:51:50 +02:00
Philippe Teuwen ee4ff741ff Fix tools/mkversion.sh to follow new common_arm dir structure 2026-08-19 15:32:39 +02:00
iceman1001 92969c5173 fix test 2026-07-30 17:06:19 +02:00
Iceman 4c6e1e84a7 Merge pull request #3425 from nuschpl/fb-1
proxmark3 classic doesn't have JTAG RST lines routed at all so there …
2026-07-23 22:04:18 +07:00
nusch 904e459a12 Making deprecated 'adapter_khz' no longer default just because incompatible subvariant of 10yo legacy version (predating deprecation) exist somewhere 2026-07-23 15:40:47 +02:00
nusch b7175a8a2a proxmark3 classic doesn't have JTAG RST lines routed at all so there is no reason to having those enabled/generating warning in OpenOCD 2026-07-23 15:22:40 +02:00
iceman1001 2c6e607110 style 2026-07-15 16:39:15 +02:00
munzzyy d18d1c6713 Fix IR56 wiegand decode leaking header sentinel bit into facility code 2026-07-10 14:16:54 -05:00
iceman1001 6fe58f8e3c several coverity fixes 2026-07-02 16:29:42 +02:00
iceman1001 7af8674b22 fix saflok test output and add it to test script 2026-06-30 02:22:56 +02:00
Philippe Teuwen 10fdef1811 standalone mode HF_DOEGOX_COMMIT: DESFire suspended commit without relay 2026-06-23 00:03:00 +02:00
towelbyte 85c029b8fd pm3_tests.sh: Adapt COTAG tests for the new implementation
"lf cotag demod" now works directly on g_GraphBuffer:
Thus, adapt the existing test. Additionally, add 3 more cotag tests.
2026-06-12 22:49:07 +02:00
achazal d6ed3c18c2 mad: Add unified MAD read/write/verify with ops struct abstraction 2026-06-09 18:48:25 +02:00
CinderSocket 0791bcc32c fix-emulator-hardening 2026-06-08 18:08:26 -07:00
Iceman 71b0df6cc5 Merge pull request #3368 from cindersocket/feat-iclass-non06-aia
Support non-06 iCLASS SE AIA SIO blocks
2026-06-08 14:13:38 +02:00
CinderSocket b05a4f9bcf Support non-06 iCLASS SE AIA SIO blocks 2026-06-08 04:37:26 -07:00
CinderSocket 81a5211594 Fix a situation where memory is improperly cleared 2026-06-07 16:37:32 -07:00
Philippe Teuwen efcc34a698 make style 2026-06-07 23:01:20 +02:00
CinderSocket d02c42eb10 Add DES and plain iCLASS transport 2026-06-07 11:15:17 -07:00
iceman1001 72ca3bd37b text style 2026-06-02 20:25:40 +02:00
Connor Milligan 46398d855b CUDA implementation of mfulc_des_brute 2026-05-22 00:25:32 +02:00
Philippe Teuwen b3d4e692ec mfulc_des_brute: add dynamic work pool support 2026-05-22 00:20:55 +02:00
Philippe Teuwen d078e8a62b make style 2026-05-21 20:54:44 +02:00
Philippe Teuwen d8c7f84598 Add Makefile PLATFORM_FILE variable to specify another Makefile.platform file 2026-05-19 00:10:17 +02:00
iceman1001 cbb572afad style 2026-05-11 14:36:17 +02:00
iceman1001 d6d1df6969 Claude was nice and made an interactive script for editing of trace files. Finally its easy to clean up traces 2026-05-03 13:13:39 +07:00
Philippe Teuwen 148871b3b5 few docker tests adjustments 2026-04-14 10:15:46 +02:00
Philippe Teuwen c0ecb1c626 fpga_compress: fix heap corruption 2026-04-14 10:14:38 +02:00
iceman1001 92426a26a4 update test to match new param name 2026-04-09 12:36:55 +07:00
Iceman a054177949 Merge pull request #3156 from cindersocket/fix-3041
Fixes RfidResearchGroup/proxmark3#3041
2026-03-25 07:40:53 +07:00
kormax e44e1f1cbb Introduce simple regex utils 2026-03-24 20:21:51 +02:00
Philippe Teuwen b7aefdc2bc complete zlib reqs in docs & docker 2026-03-23 22:36:47 +01:00
CinderSocket 19b6534436 Fixes RfidResearchGroup/proxmark3#3041
Adds --ascii option
2026-03-19 22:27:33 -07:00
CinderSocket 6639009681 client: document wiegand layer and improve online tests
Add inline comments throughout wiegand_formatutils and callers to explain
sentinel-bit stripping, HID transport framing, and the normalization contract
between input modes and downstream consumers.

Replace sim-only LF HID online tests with T55xx clone+readback flows and add
a full encode/decode roundtrip harness for hf mf encodehid, including sector
restore/cleanup and an optional --manual flag for external reader verification.
2026-03-17 16:45:14 -07:00
CinderSocket 2c403e157d client: unify wiegand input handling
Extract the reusable Wiegand normalization and packing flow into
wiegand_formatutils and move existing callers onto that shared path.
This rebuilds the feat-wiegand branch as one focused commit against
upstream/master instead of trying to preserve the original commit chain.

Key changes:
- add shared helpers for plain binary, raw HID, new PACS, and formatted
  Wiegand input
- centralize binary rendering used by cmdwiegand and PACS decode output
- update lf hid sim/clone to resolve one input mode through the shared
  Wiegand layer and enforce the LF packed transport limit explicitly
- update hf mf encodehid to accept bin/raw/new/formatted Wiegand input
  through the same normalization path
- preserve legacy raw HID transport behavior while clarifying the
  packed-HID vs LF transport limits in error reporting
- add offline regression coverage for the new PACS decode output and add
  interactive online targets for LF HID Wiegand and MIFARE encodehid

Validation performed:
- make client
- bash -n tools/pm3_tests.sh
- bash -n tools/pm3_online_tests.sh
- ./tools/pm3_online_tests.sh -h
- ./client/proxmark3 -c 'wiegand encode -w H10301 --fc 31 --cn 337'
- ./client/proxmark3 -c 'wiegand encode -w H10301 --fc 31 --cn 337 --new'
- ./client/proxmark3 -c 'wiegand decode --new 068F80A8C0'
2026-03-17 16:45:14 -07:00