Skip to content

Feat: Qt keycard support with nfc and pcsc#19545

Merged
alexjba merged 24 commits intomasterfrom
feat/keycard-nfc
Jan 14, 2026
Merged

Feat: Qt keycard support with nfc and pcsc#19545
alexjba merged 24 commits intomasterfrom
feat/keycard-nfc

Conversation

@alexjba
Copy link
Contributor

@alexjba alexjba commented Dec 10, 2025

What does the PR do

PRs included

#19546
#19547
#19548
#19549

Add https://github.com/status-im/status-keycard-qt lib as a keycard integration option.

This commit adds the status-keycard-qt submodule and updates the build configuration to support it.

In this initial version the status-keycard-qt option can be enabled by using the USE_STATUS_KEYCARD_QT flag.

  • desktop: USE_STATUS_KEYCARD_QT will enable/disable the qt implementation. By default the go version is used
  • ios: USE_STATUS_KEYCARD_QT will enable/disable the qt implementation. On IOS the developer experience is quite bad and I've tried not to make it worse here. When compiling the app with keycard support a paid apple developer account is needed to sign the app. For this reason the USE_STATUS_KEYCARD_QT is disabled by default in the mobile makefile. People with apple accounts can use the DEVELOPMENT_TEAM flag to configure the signing before running the app.
  • android: the qt implementation is enabled by default. Cannot be disabled by USE_STATUS_KEYCARD_QT

Acceptance criteria

  • The app compiles on all platforms
  • The keycard feature is not working properly when using the qt lib (specific fixes in the following PRs)

NOTE: Tests can be done in the final PR #19549

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

✔️ status-desktop/e2e/prspr19545 🔹 ~15 min 🔹 8bb7613 🔹 📦 tests/e2e package

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

✔️ status-desktop/e2e/prspr19545 🔹 ~16 min 🔹 450a51f 🔹 📦 tests/e2e package

@status-im-auto
Copy link
Member

✔️ status-desktop/prs/android/arm64/package/PR-19545#3 🔹 ~11 min 🔹 77b27f38 🔹 📦 android/arm64 package

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@status-im-auto
Copy link
Member

@alexjba alexjba requested review from vkjr and removed request for a team January 14, 2026 11:39
This commit adds the status-keycard-qt submodule and updates the build configuration to support it.

In this initial version the `status-keycard-qt` option can be enabled by using the `USE_STATUS_KEYCARD_QT` flag.
- desktop: `USE_STATUS_KEYCARD_QT` will enable/disable the qt implementation. By default the go version is used
- ios: `USE_STATUS_KEYCARD_QT` will enable/disable the qt implementation
- android: the qt implementation is enabled by default

to squash - first commit
- squash: bump status-keycard-qt

bump - squash

to squash - bump
GlobalPlatform crypto needs the legacy providers. While it will potentially work OOTB with android since we're using dynamic linking, for IOS we need to compile with `no-module`. This will bundle the providers in the lib.
- src/app/modules/main/wallet_section/send_new/module.nim Verify if both password and pin are empty before emitting the `authenticationCancelled` signal
- handle card disconnect/reconnect when the user input is needed (enter pin, puk etc)
- treat keycard message with empty error as successful
- src/app_service/service/keycard/service.nim - avoid modifying the json container with itself. We're currently iterating the container and modifying the service member - leading to a freeze.
this commit updates the makefile to determine some of the keycard lib link params based on a single argument - the lib path
This is a fix for the mobile platforms that will show a drawer when the keycard is needed. We'll need to avoid showing the drawer every time at app start.
The keycard channel events will inform the app of the channel state (waiting for keycard, reading, error, idle). This will be used on mobile platforms to control a drawer that informs the user when it's required to tap the keycard.
…keycard interactions

Adding a `KeycardChannelDrawer` that's guiding the user whenever the keycard is needed.

On IOS the system drawer is used
…ponents

- use a single KeycardStateDisplay instance with the necessary states
- The state queue, transitions and entire logic moved to KeycardChannelStateManager component
- Adding states for HW adaptor states
- Implement `Dismiss` action
…ing blocked

This commit updates parts of the login flows. Adds a new `Scan keycard` button to trigger keycard detection on demand.
+ Update keycard states in the login flow
+ Show digits only on soft keyboard for pin input

to squash - fix: User needs to be able to dismiss the keycard drawer without getting blocked
@alexjba alexjba merged commit 3b5054d into master Jan 14, 2026
11 of 13 checks passed
@alexjba alexjba deleted the feat/keycard-nfc branch January 14, 2026 12:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants