Any future biometric gate (see the related issue) needs a fallback for devices with no Face ID/Touch ID/fingerprint enrolled, or where the user has disabled biometrics at the OS level — currently there's no PIN system in this app at all to fall back to. Design and implement an app-level PIN as a first-class alternative, not an afterthought, including its own brute-force lockout policy (distinct from OS-level biometric lockout).
Definition of done:
- PIN setup flow during onboarding when biometrics are unavailable
- Lockout/backoff after repeated failed PIN attempts, tuned independently of any biometric lockout
- PIN itself never stored in a form that permits offline brute-forcing if SecureStore's protection is somehow bypassed (e.g. store only a salted hash comparison, not the PIN itself)
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.
Any future biometric gate (see the related issue) needs a fallback for devices with no Face ID/Touch ID/fingerprint enrolled, or where the user has disabled biometrics at the OS level — currently there's no PIN system in this app at all to fall back to. Design and implement an app-level PIN as a first-class alternative, not an afterthought, including its own brute-force lockout policy (distinct from OS-level biometric lockout).
Definition of done:
Before opening a PR for this issue, read CONTRIBUTING.md.
This is not a starter-issue. The Definition of done above is the full
acceptance criteria, not a subset to sample from — a PR that addresses part
of it is an unfinished issue, not a smaller one. Your PR must include, in
the PR description itself:
PRs missing these will be sent back before review, not reviewed and rejected — please do this up front.