Skip to content

v8.2.0

Latest

Choose a tag to compare

@w-ensink w-ensink released this 14 Aug 07:39
· 37 commits to master since this release
f6522a1

Added

  • Face verification for document (passport, ID card, driving licence) issuance: after reading the chip over NFC, the app runs a Regula liveness session and passes the resulting liveness transaction id to the passport issuer, which matches the live face against the chip portrait. The Play Store / App Store build uses Regula's native Face SDK; the F-Droid build runs Regula's web Face SDK in an embedded WebView that loads a Yivi-hosted capture page, so no proprietary native code ships in the APK. Whether the step runs is decided per session by the passport issuer (its face verification policy), which also names the Face API the liveness session targets — so face verification can be switched off remotely and no environment is pinned in the app.
  • Show a confirmation message when you log out from the More tab, so the PIN screen that follows is not mistaken for part of logging out
  • Certificates installed through the debug certificate management screen can now be deleted again from that screen
  • Support for Token Status List revocation of SD-JWT credentials issued over OpenID4VCI

Changed

  • Credential and issuer text is resolved in the app language by the Go client instead of being picked in the app, and text the issuer did not translate falls back to English, or to a language it did supply, rather than reading "[translation missing]"
  • Logos missing for the language you use are fetched in the background at startup and after a language switch, and appear once they arrive

Fixed

  • Credential logos supplied as SVG now render correctly instead of appearing blank
  • The loading spinner is red on every screen; on some screens it was grey
  • Finishing or dismissing a session while the app believes a session is still active underneath it no longer pops every screen off the navigation stack, which left the app unusable until it was restarted
  • The Data tab no longer briefly reloads once an hour, nor every few tens of seconds while you hold a revoked credential: the wallet re-reads its credentials only when something about them actually changed
  • A screen reader now reads out what the terms and conditions checkbox is for, instead of only that it is a checkbox and whether it is ticked; the link to the terms stays separately reachable next to it
  • The same for the optional error reporting checkbox, and the sentence beside it is read as one phrase rather than broken into "Optional:", "Share error messages and app status" and "with Yivi"
  • On the PIN screen, a screen reader announces the "Enter your PIN" heading and how many digits you have entered as separate items; the whole screen used to be a single item that fused the two and offered a pointless tap
  • The screen that sends you back to your browser on iOS is read out as soon as it appears, so you are told what to do rather than being left on a silent screen, and the decorative arrow is no longer announced as an unnamed image
  • Reading a driving licence now performs Active Authentication when the chip carries the licence's authentication key in DG13; it was previously only performed for documents that store that key in DG15, so it was never attempted for a licence
  • On iOS the app is no longer covered by a full-screen blur while the NFC reader sheet is up, so the scanning animation and its progress text stay readable for the whole read. The biometric prompt is uncovered too, as it already was. While either is up the app switcher shows the screen underneath unblurred: the scanning animation, or whatever the prompt was raised over, which can be the unlocked wallet

Internal

  • The Go client schedules the credential status refresh again and wakes the app itself through the new ClientHandler.CredentialsChanged
  • Remove the unused RecentActivity widget
  • Add an integration test for the required-update screen
  • Add an integration test for switching the app language
  • Add widget tests asserting the semantics of the two enrollment checkboxes, the PIN screen and the iOS back-to-browser screen, so the labels, roles and live regions screen readers rely on are covered
  • Updated Git submodules
  • Fix swallowed errors on cancelling embedded issuance flows
  • The F-Droid build steps now live in yivi_fdroid/fdroid_build.sh with a test that runs them against stub tooling, instead of being inlined in the fdroiddata recipe once per release
  • Upgrade the Android Kotlin Gradle plugin from 2.2.0 to 2.3.20, resolving the Flutter build warning that support for the old Kotlin version would soon be dropped
  • Upgrade vcmrtd to v4.1.0: the BAC, PACE and secure-messaging MAC comparisons are constant-time, and the challenge/response and APDU hex dumps are behind the sensitive-data log gate rather than plain verbose logging
  • The passport issuer's session URL is checked before the signed IRMA issuance request, which carries the attributes read off the chip, is posted to it: it must be https and on an explicit allowlist of IRMA server hosts
  • The two flows that draw system UI in front of the app, the iOS NFC reader sheet and the OS biometric prompt, now suspend the privacy screen while they are up instead of switching it off and restoring it from the screenshot preference afterwards: suspensions are counted, are undone even when the flow throws, and leave that preference alone. Backgrounding the app blurs whatever the count says
  • The iOS privacy-screen overlay can no longer stack or get stranded on screen: it is tracked by reference rather than looked up again by view tag through the deprecated keyWindow, adding it is idempotent, and removing it is no longer skipped when the privacy screen was switched off while the overlay was up
  • Upgrade irmago to v1.3.0