Hi there, I'm using GrapheneOS on a Pixel 8 (codename shiba) and I'm looking to migrate from Bitwarden to KeePassXC and KeePassDX on mobile.
I'm running into a problem that so far I could not solve: the software seemingly lets me set up the biometric (and device pin) unlock device, but when I try to unlock my database with it, it seems to have forgotten it. Here's what happens step by step:
Setting up:
- On the Unlock screen I enter my correct password and on the bottom left I click "Device unlock link".
- A fingerprint prompt opens reading "KeePassDX Link to device unlocking - You still need to remember your vault main credential if you use device unlock recognition". I touch the fingerprint sensor. It accepts.
- A toast appears briefly: "AdvancedUnlockManager not initialized".
- To test it, I lock the database again, and I'm back on the Unlock screen
- Now it offers "Unlock" with the fingerprint icon next to it, but when I give it the fingerprint, it gives another toast saying "Cipher not initialized".
So far I haven't found out anything about this on the web, so maybe it is unique to GrapheneOS or something on my device? This is my main profile where all this is happening. Maybe any of this rings any bells. Thanks in advance for your thoughts on this.
According to logcat in the last step this happens
07-30 11:53:52.989 4518 4518 I ImeTracker: system_server:45b0dc66: onCancelled at PHASE_CLIENT_ON_CONTROLS_CHANGED
07-30 11:53:53.032 4518 4518 W WindowOnBackDispatcher: sendCancelIfRunning: isInProgress=false callback=ImeCallback=ImeOnBackInvokedCallback@257210804 Callback=android.window.IOnBackInvokedCallback$Stub$Proxy@6bfd452
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: Unable to decrypt data
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: java.lang.IllegalStateException: Cipher not initialized
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at javax.crypto.Cipher.checkCipherState(Cipher.java:1659)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at javax.crypto.Cipher.doFinal(Cipher.java:2066)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.biometric.AdvancedUnlockManager.decryptData(AdvancedUnlockManager.kt:287)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.biometric.AdvancedUnlockFragment$onAuthenticationSucceeded$1$1$1.invoke(AdvancedUnlockFragment.kt:542)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.biometric.AdvancedUnlockFragment$onAuthenticationSucceeded$1$1$1.invoke(AdvancedUnlockFragment.kt:540)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.app.database.CipherDatabaseAction$getCipherDatabase$3.invoke(CipherDatabaseAction.kt:174)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.app.database.CipherDatabaseAction$getCipherDatabase$3.invoke(CipherDatabaseAction.kt:176)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.kunzisoft.keepass.utils.IOActionTask$execute$1$1$1.invokeSuspend(IOActionTask.kt:45)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at android.os.Handler.handleCallback(Handler.java:995)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at android.os.Handler.dispatchMessage(Handler.java:103)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at android.os.Looper.loopOnce(Looper.java:248)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at android.os.Looper.loop(Looper.java:338)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at android.app.ActivityThread.main(ActivityThread.java:9106)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at java.lang.reflect.Method.invoke(Native Method)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.android.internal.os.ExecInit.main(ExecInit.java:50)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
07-30 11:53:58.119 4518 4518 E com.kunzisoft.keepass.biometric.AdvancedUnlockManager: at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:371)
07-30 11:53:58.155 4518 4518 E ImeBackDispatcher: Ime callback not found. Ignoring unregisterReceivedCallback. callbackId: 257210804
07-30 11:53:58.180 4518 4518 D InsetsController: show(ime(), fromIme=false)
07-30 11:53:58.180 4518 4518 I ImeTracker: com.kunzisoft.keepass.free:881de545: onCancelled at PHASE_CLIENT_REPORT_REQUESTED_VISIBLE_TYPES
07-30 11:53:58.469 4518 4518 I ImeTracker: system_server:4c9a8776: onShown