I have such an implementation of EncryptedSharedPreferences
:
class MyEnqPrefs(ctx: Context) {
init {
...
val sharedPref = EncryptedSharedPreferences.create(
PREF_NAME,
MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC),
ctx,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
...
}
and in the crash report, I see such a log (a few times I got such crash report):
...
android.security.KeyStoreException: Unknown error
at android.security.KeyStore.getKeyStoreException()(KeyStore.java:1301)
at android.security.keystore.AndroidKeyStoreKeyGeneratorSpi.engineGenerateKey()(AndroidKeyStoreKeyGeneratorSpi.java:331)
at javax.crypto.KeyGenerator.generateKey()(KeyGenerator.java:612)
at androidx.security.crypto.MasterKeys.generateKey()(MasterKeys.java:130)
at androidx.security.crypto.MasterKeys.getOrCreate()(MasterKeys.java:88)
at application.prefs.MyEnqPrefs.<init>()(MyEnqPrefs.kt:24)
at application.MyApplication.onCreate()(MyApplication.java:453)
at android.app.Instrumentation.callApplicationOnCreate()(Instrumentation.java:1192)
at android.app.ActivityThread.handleBindApplication()(ActivityThread.java:6715)
at android.app.ActivityThread.access$1300()(ActivityThread.java:237)
at android.app.ActivityThread$H.handleMessage()(ActivityThread.java:1913)
at android.os.Handler.dispatchMessage()(Handler.java:106)
at android.os.Looper.loop()(Looper.java:223)
at android.app.ActivityThread.main()(ActivityThread.java:7660)
at java.lang.reflect.Method.invoke()(Method.java:-2)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main()(ZygoteInit.java:947)
...
so as far as I see the closest issue description from the log is:
...
at androidx.security.crypto.MasterKeys.generateKey()(MasterKeys.java:130)
at androidx.security.crypto.MasterKeys.getOrCreate()(MasterKeys.java:88)
at application.prefs.MyEnqPrefs.<init>()(MyEnqPrefs.kt:24)
at application.MyApplication.onCreate()(MyApplication.java:453)
...
According to the log looks like MyApplication
creates, then it creates MyEnqPrefs
then it tries to create MasterKeys
and crash happens.
So, the question is - what is a possible problem with the approach I use to create master key alias - MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
?