[WAL-1183] feat(mobile): Add biometric key-use authorization#1936
[WAL-1183] feat(mobile): Add biometric key-use authorization#1936szijpeter wants to merge 4 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
bf90035 to
8b3b7bc
Compare
|
8b3b7bc to
afbaa48
Compare



Intent
Add opt-in, immutable key-use authorization for newly created mobile wallet signing keys.
BiometricCurrentSetrequires OS-enforced biometric authorization for every private-key signing operation, binds the key to the current biometric enrollment set, and fails closed when the requested combination cannot be enforced.This is key-use authorization, not wallet/app unlock. It does not rotate or reclassify existing keys.
What changed
NoneandBiometricCurrentSetpolicy contracts, localized prompt configuration, stable protected-key failures, and capability/backing metadata.AndroidKeyandIosKeyimplementations using biometric-only, auth-per-use protection with a zero timeout and current-set enrollment binding.Nonewithout inventing backing metadata.Noneonly.Supported combinations
NoneBiometricCurrentSetFragmentActivityand enrolledBIOMETRIC_STRONG; Android Keystore auth-per-use and current-set invalidationOther protected key-type combinations return an explicit unsupported result and never fall back to software storage. RSA3072 and RSA4096 remain outside the current mobile provider's existing algorithm support.
Compatibility and caveats
Noneremains the default. Existing configuration and legacy(KeyType) -> Keygenerators retain their unprotected behavior; legacy generators are not interpreted as supporting protected requests.None, and changing a wallet default affects future keys only. Existing keys are neither replaced nor reclassified.AuthorizationFailedoutcome; exception messages and numeric codes are not parsed.Explicit non-goals
Wallet launch/PIN handling, app unlock, action-scoped or batch authorization, existing-key rotation/migration (WAL-749/WAL-999), remote/HSM signing (WAL-998), wallet/key attestation (WAL-1060), and the broader typed-error redesign (WAL-1066) remain out of scope.
The use of platform biometrics, Keystore, Keychain, or Secure Enclave does not establish WSCD, LoA High, ISO 18045, EUDI, or HAIP certification.
Breaking changes
Existing
Nonesource call sites remain compatible through defaults and overloads. The KMP binary ABI changes through expanded configuration, metadata, and store-capability surfaces, so precompiled consumers must rebuild against the updated artifacts. Swift callers with exhaustive switches overWalletErrormust handle the new.keyUseAuthorizationcase.