Files
pm3py/pyproject.toml
michael b0b46b3919 feat(flash): firmware pin + matches_pin detection + pm3flash CLI
Adds the 'is the device running the right firmware, and flash it if not'
layer on top of the flasher.

- _firmware.py: FirmwarePin (pinned to the firmware/ submodule commit) and
  matches() — a device version-string test against the pinned git SHA (or a
  release tag, once tagged releases exist).
- FirmwareInfo gains expected_firmware + matches_pin, computed on connect, so
  pm3.firmware.matches_pin tells you whether the fork build is present.
- pm3flash console-script: auto-detect, compare to the pin, resolve the image
  (--image / $PM3PY_FIRMWARE / local build), confirm, flash with progress,
  then reopen and verify the new version. Flashes only on mismatch unless
  --force; fullimage-only unless --allow-bootrom.

Detection + CLI are unit-tested; the auto-download layer (fetch the pinned
release asset) and hardware validation are still to come. Suite 1034 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 21:37:46 -07:00

54 lines
1.3 KiB
TOML

[build-system]
requires = ["setuptools>=77.0.0"]
build-backend = "setuptools.build_meta"
[project]
name = "pm3py"
version = "0.1.0"
description = "Pure-Python async client for the Proxmark3 NG wire protocol over USB serial."
readme = "README.md"
requires-python = ">=3.10"
license = "MIT"
license-files = ["LICENSE"]
authors = [{ name = "Dangerous Things", email = "ops@dangerousthings.com" }]
keywords = [
"proxmark3",
"rfid",
"nfc",
"iso14443",
"iso15693",
"mifare",
"ntag",
"t55xx",
"smartcard",
]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Security",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"pyserial-asyncio>=0.6",
"bitarray>=2.0",
"pycryptodome>=3.10",
]
[project.optional-dependencies]
dev = ["pytest"]
[project.scripts]
pm3flash = "pm3py.flash_cli:main"
[tool.setuptools.packages.find]
include = ["pm3py*"]
[tool.pytest.ini_options]
testpaths = ["tests"]