Skip to content

Releases: seamlessqm/PersoSim

PersoSim@SQM 2.10.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 21 Jul 09:33

PersoSim@SQM v2.10.0

What's New Since v2.9.0

Password panel automation

The Standard reader's password panel (add/remove passwords, select one for
AutoLogin) can now be driven remotely instead of clicking through the
Interface tab by hand:

client.add_password("123456")
client.remove_password("123456")
client.get_passwords()
client.set_auto_login("123456")
client.get_auto_login()
client.clear_auto_login()

Backed by three new HTTP endpoints (/passwords, /passwords/remove,
/autologin), all scoped to the Standard reader — they return an error if
the reader is currently Basic or None, since that's the only reader with a
password panel at all. The password list itself persists across restarts
(Eclipse preferences), same as manual additions through the UI.

Passwords in startup config

persosim-startup.properties gained two new keys, applied right after
driver (since the password panel only exists once the Standard reader is
active):

passwords=123456,999999
autoLoginPassword=123456

passwords ensures each listed PIN exists in the panel (already-present
entries are silently skipped, so restarts are idempotent). autoLoginPassword
selects one for AutoLogin at startup — it's added automatically first if not
already in the list, so passwords= isn't required just for this one value.

Internal Changelog

v2.10.0 Password panel automation: add/remove/list passwords and
select/clear AutoLogin over HTTP (SqmPasswordControl bridge),
startup config support (passwords=, autoLoginPassword=),
persosim_client.py helpers
v2.9.0 Startup config file (persosim-startup.properties, PERSOSIM_STARTUP_CONFIG
env var override), Remote IFD added as an automatable driver action
(HTTP, startup config, and persosim_client.py)
v2.8.0 Remote driver/reader switching (POST /driver), setup_persosim() client
helper, build script support for the driver connector UI JAR

PersoSim@SQM 2.9.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 15 Jul 11:48

PersoSim@SQM v2.9.0

What's New Since v2.8.0

Startup config (persosim-startup.properties)

PersoSim can now be pre-configured on launch instead of needing a human to
click through menus or fire off HTTP calls after the fact — handy for test
servers. Drop a persosim-startup.properties file next to where PersoSim
runs from (or point PERSOSIM_STARTUP_CONFIG at an absolute path elsewhere,
so the config survives every redeploy):

persoFile=/path/to/profile.perso
driver=basic
autoReload=true
loadDialog=false
failReads=false
failWrites=false

All keys are optional and independent. driver accepts a comma-separated
sequence (e.g. driver=virtual,standard) since a bare virtual action
always forces the Basic reader — same two-step dance setup_persosim()
already does over HTTP.

Remote IFD automation

remoteifd joins virtual / basic / standard as a selectable driver
action — over HTTP (POST /driver body remoteifd), in startup config
(driver=remoteifd), and in the Python client (client.use_remote_ifd()).
It reconnects to whatever device was already paired through the Interface
menu's Configure dialog. Pairing a brand-new device is still a manual,
one-time step — this only automates picking "Use Remote IFD" on every
subsequent launch.

Internal Changelog

v2.9.0 Startup config file (persosim-startup.properties, PERSOSIM_STARTUP_CONFIG
env var override), Remote IFD added as an automatable driver action
(HTTP, startup config, and persosim_client.py)
v2.8.0 Remote driver/reader switching (POST /driver), setup_persosim() client
helper, build script support for the driver connector UI JAR

PersoSim@SQM 2.8.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 03 Jul 12:04

PersoSim@SQM v2.8.0

What's New Since v2.7.0

Switch reader/driver via HTTP

The Interface menu (File / Personalization / Interface) can now be driven
remotely - no clicking required. Send a POST /driver request to select the
virtual driver, then Basic or Standard reader:

GET|POST http://localhost:7777/driver

POST body: "virtual" | "basic" | "standard"

Each call blocks until the switch actually completes (or fails) and returns a
definitive result:

200  {"ok": true,  "readerType": "BASIC", "commType": "VIRTUAL"}
500  {"ok": false, "error": "..."}                                switch failed
503  {"ok": false, "error": "reader control not available yet"}   simulator not ready
400  {"ok": false, "error": "unknown driver action: ..."}         bad request body

GET /driver returns the current selection without changing anything.

Python client: setup_persosim()

persosim_client.py adds a helper that chains the virtual-driver switch and
reader selection into one call, blocking at each step:

client.setup_persosim("basic")     # or "standard"
client.get_driver()                # {"readerType": ..., "commType": ...}

Raises PersoSimError if either step fails - most commonly because nothing is
listening on localhost:5678 (the external virtual PCSC driver process).

Internal Changelog

v2.8.0 Remote driver/reader switching (POST /driver), setup_persosim() client
helper, build script support for the driver connector UI JAR

PersoSim@SQM 2.7.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 30 Jun 12:22

PersoSim@SQM v2.7.0

Note: Versions 2.4.0–2.6.0 were internal releases not published to GitHub.
This release bundles all changes since v2.3.0.

What's New Since v2.3.0

Load profiles via HTTP (no UI required)

PersoSim can now load a .perso profile from external automation — no clicking
required, and no prior manual UI load needed. Send a POST /load request to the
control server with the absolute file path as the body:

POST http://localhost:7777/load
Content-Type: text/plain

C:\path\to\profile.perso

The call blocks until the load completes and returns a definitive result:

200  {"loaded": true,  "path": "..."}           success
500  {"loaded": false, "error": "..."}           load failed or timed out
503  {"loaded": false, "error": "no callback"}   simulator not ready yet

Error injection for read and write operations

Two new toggles let you simulate card errors during a live AusweisApp session.
When enabled, PersoSim returns 0x6982 (security status not satisfied) on reads
or writes to DG17/DG18 — the address files — while leaving all other files
unaffected so AusweisApp can still detect the card and start the flow.

GET|POST /failread   — toggle read error injection
GET|POST /failwrite  — toggle write error injection

Both are OFF by default.

Error dialog suppression

The /loaddialog toggle now suppresses both the success dialog and the error
dialog. Previously only the success dialog was suppressed.

Python client library

persosim_client.py wraps the HTTP control server for test automation.
No external dependencies — stdlib only.

from persosim_client import PersoSimClient, PersoSimError

client = PersoSimClient()                  # connects to localhost:7777
client.load("/path/to/profile.perso")     # blocks until done, raises PersoSimError on failure
client.set_load_dialog(False)              # suppress success + error dialogs
client.set_auto_reload(True)
client.set_fail_reads(True)               # inject 0x6982 on DG17/DG18 reads
client.set_fail_writes(True)              # inject 0x6982 on DG17/DG18 writes
logs = client.get_logs()                   # fetch sqm-debug.log as string

Full method list:

load(path)                  load a .perso file, blocks until done
get_logs()                  return sqm-debug.log as a string
get/set/toggle_auto_reload()
get/set/toggle_load_dialog()
get/set/toggle_fail_reads()
get/set/toggle_fail_writes()

PersoSimError is raised on network failures, load timeouts, or invalid paths.

Log viewer improvements

  • New Fail reads / Fail writes toggle buttons in the header
  • All icons replaced with Tabler Icons (no more emoji)
  • Toggle buttons turn green when ON, red when error injection is active
  • INJECTED FAIL log entries highlighted in red
  • Removed the Copy all button

Internal Changelog

v2.4.0 Load profile via HTTP (POST /load), Python client library
v2.5.0 Reliable load detection (CompletableFuture), no prior UI load required,
error dialog suppression, fail read/write endpoints
v2.6.0 Error injection scoped to DG17/DG18 only, INJECTED FAIL log entries
v2.7.0 Log viewer: fail read/write buttons, Tabler Icons, colored button states

PersoSim@SQM-v2.3.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 16 Jun 10:47

What's new!

  • Auto-reload after address writeback: PersoSim's in-memory profile is automatically reloaded after a successful address change flow, so the new address is immediately active without manual intervention. Can be toggled on/off from the log viewer.
  • Load dialog toggle: The "Perso loaded" success popup can be suppressed from the log viewer or via POST /loaddialog, enabling test automation to load profiles without a blocking dialog click.
  • Partial date decoding: Dates with missing month/day now display as YYYY-MM-XX or YYYY-XX-XX instead of raw digits, with the original raw value shown in parentheses e.g. 1985-01-XX (198501).
  • Build: clean command: python build.py clean removes log files and .bak backups from both platforms before packaging, replacing the Makefile release-full target.

PersoSim@SQM-v2.2.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 05 Jun 13:49

v2.2.0

What's new

  • Open Logs Viewer from the UI : a new "Open Logs Viewer" option in the Personalization menu opens the live log page in the default browser directly from PersoSim, no need to type the address manually.
  • Automatic perso file backup : before writing an updated address back to the perso file, a .bak backup of the original is now created automatically. The backup is logged so you always know when it happened.
  • Copy buttons in the log viewer : a "Copy all" button in the header copies the full log to clipboard. Each value field also has an individual copy icon (visible on hover) for quick access to specific values.
  • External log viewer : the log viewer page (sqm-log-viewer.html) is now a standalone file in the PersoSim installation directory, making it easy to customize without recompiling.
  • Reduced refresh rate : the log viewer now refreshes every 10 seconds instead of 3
image

Fixes

  • Wrong version on UI : The version displayed on the UI was wrong in the last version. Now it's fixed and showing the correct version.

PersoSim@SQM-v2.1.1

Choose a tag to compare

@joseph0x45 joseph0x45 released this 28 May 18:18

Quick fix

Fix EF.DG5. Change from "Familiy names (alt)" to "Birth names"

PersoSim@SQM-v2.1.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 28 May 13:57

v2.1.0

What's new

  • Live log viewer : PersoSim@SQM now serves a live log viewer at http://localhost:7777. Opens automatically when the simulator starts. Supports light and dark mode.
  • Human readable logs : all card operations (READ/WRITE) are logged with the field name, decoded value, and data source (file or cache). Address fields are decoded into street, city, postal code and country.
  • Address change flow marker : the log viewer now clearly marks when an address change flow begins, making it easy to follow the workflow.
  • Session markers : a clear separator is added to the log each time a new profile is loaded.

Fixes & improvements

  • Fixed UTF-8 encoding issues on Windows (special characters like umlauts now display correctly)
  • Field name mapping corrected to match actual APDU traffic
  • Binary fields (certificates, security files) now display cleanly instead of garbled text
  • Cross-platform build script (build.py), compile once on Linux, deploy to both platforms in one command
image image

PersoSim@SQM-v2.0.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 15 May 13:51

v2.0.0

What's new

  • Address change support — PersoSim@SQM now successfully handles AusweisApp's address change flow. Written address data is cached in memory and returned on subsequent reads, making AusweisApp believe the update was applied to the card.
  • Automatic perso file update — after a successful address change flow, the new address is automatically written back to the loaded .perso file so the change persists across sessions.
  • Runtime cache control — a TCP control server runs on port 7777 and accepts commands (cache on, cache off, cache clear, status) allowing external tools to control simulator behaviour at runtime without restarting.

PersoSim@SQM-v1.3.0

Choose a tag to compare

@joseph0x45 joseph0x45 released this 22 Apr 13:23

The following changes were added in this version:

Updated window title

The window title was updated from "PersoSim GUI" to "PersoSim@SQM GUI"

Removed Help tab

The help tab was removed and replaced by the internal SQM version

Display of SQM version

The internal SQM version is now being displayed on the UI

image