Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.1.0: Failed to unwrap key #13

Closed
jonasbark opened this issue May 22, 2018 · 19 comments
Closed

3.1.0: Failed to unwrap key #13

jonasbark opened this issue May 22, 2018 · 19 comments

Comments

@jonasbark
Copy link
Contributor

I did the upgrade to 3.1.0 from 3.0.0. Execution worked just fine, however after cleaning the app data and reinstalling the app this error showed up - which strikes me as odd.

E/FlutterSecureStoragePl(10643): Registration failed
E/FlutterSecureStoragePl(10643): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl(10643): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl(10643): 	at javax.crypto.Cipher.unwrap(Cipher.java:2121)
E/FlutterSecureStoragePl(10643): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl(10643): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl(10643): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl(10643): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
E/FlutterSecureStoragePl(10643): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:33)
E/FlutterSecureStoragePl(10643): 	at de.ffuf.uffl2.MainActivity.onCreate(MainActivity.kt:11)
E/FlutterSecureStoragePl(10643): 	at android.app.Activity.performCreate(Activity.java:6998)
E/FlutterSecureStoragePl(10643): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1230)
E/FlutterSecureStoragePl(10643): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2899)
E/FlutterSecureStoragePl(10643): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046)
E/FlutterSecureStoragePl(10643): 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
E/FlutterSecureStoragePl(10643): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
E/FlutterSecureStoragePl(10643): 	at android.os.Handler.dispatchMessage(Handler.java:105)
E/FlutterSecureStoragePl(10643): 	at android.os.Looper.loop(Looper.java:164)
E/FlutterSecureStoragePl(10643): 	at android.app.ActivityThread.main(ActivityThread.java:6798)
E/FlutterSecureStoragePl(10643): 	at java.lang.reflect.Method.invoke(Native Method)
E/FlutterSecureStoragePl(10643): 	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
E/FlutterSecureStoragePl(10643): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
E/FlutterSecureStoragePl(10643): Caused by: javax.crypto.IllegalBlockSizeException
E/FlutterSecureStoragePl(10643): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl(10643): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl(10643): 	... 19 more
E/FlutterSecureStoragePl(10643): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl(10643): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:695)
E/FlutterSecureStoragePl(10643): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl(10643): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl(10643): 	... 20 more
I/FlutterActivityDelegate(10643): onResume setting current activity to this
Syncing files to device ONEPLUS A3003...
E/flutter (10643): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (10643): MissingPluginException(No implementation found for method read on channel plugins.it_nomads.com/flutter_secure_storage)
E/flutter (10643): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:278:7)
E/flutter (10643): <asynchronous suspension>
E/flutter (10643): #1      FlutterSecureStorage.read (package:flutter_secure_storage/flutter_secure_storage.dart:16:24)
E/flutter (10643): <asynchronous suspension>
E/flutter (10643): #2      AuthService.getAccessToken (package:uffl/network/auth_service.dart:107:37)
E/flutter (10643): <asynchronous suspension>
E/flutter (10643): #3      _RegisterPageState.initState (package:uffl/feature/intro/RegisterPage.dart:42:17)
E/flutter (10643): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3751:58)
@jonasbark jonasbark changed the title Failed to unwrap key 3.1.0: Failed to unwrap key May 22, 2018
@cbenhagen
Copy link

Seeing the same when switching between profile and release builds.

Built build/app/outputs/apk/profile/app-profile.apk (13.2MB).
Installing build/app/outputs/apk/app.apk...
W/KeyStore(32540): KeyStore exception
W/KeyStore(32540): android.os.ServiceSpecificException:  (code 7)
W/KeyStore(32540): 	at android.os.Parcel.createException(Parcel.java:1956)
W/KeyStore(32540): 	at android.os.Parcel.readException(Parcel.java:1910)
W/KeyStore(32540): 	at android.os.Parcel.readException(Parcel.java:1860)
W/KeyStore(32540): 	at android.security.IKeystoreService$Stub$Proxy.get(IKeystoreService.java:786)
W/KeyStore(32540): 	at android.security.KeyStore.get(KeyStore.java:195)
W/KeyStore(32540): 	at android.security.keystore.AndroidKeyStoreSpi.engineGetCertificateChain(AndroidKeyStoreSpi.java:118)
W/KeyStore(32540): 	at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:484)
W/KeyStore(32540): 	at java.security.KeyStore.getEntry(KeyStore.java:1560)
W/KeyStore(32540): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.getEntry(RSACipher18Implementation.java:69)
W/KeyStore(32540): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:42)
W/KeyStore(32540): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
W/KeyStore(32540): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
W/KeyStore(32540): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
W/KeyStore(32540): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:26)
W/KeyStore(32540): 	at io.ottomatic.odailies.MainActivity.onCreate(MainActivity.java:12)
W/KeyStore(32540): 	at android.app.Activity.performCreate(Activity.java:7136)
W/KeyStore(32540): 	at android.app.Activity.performCreate(Activity.java:7127)
W/KeyStore(32540): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
W/KeyStore(32540): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
W/KeyStore(32540): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
W/KeyStore(32540): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
W/KeyStore(32540): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
W/KeyStore(32540): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
W/KeyStore(32540): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
W/KeyStore(32540): 	at android.os.Handler.dispatchMessage(Handler.java:106)
W/KeyStore(32540): 	at android.os.Looper.loop(Looper.java:193)
W/KeyStore(32540): 	at android.app.ActivityThread.main(ActivityThread.java:6669)
W/KeyStore(32540): 	at java.lang.reflect.Method.invoke(Native Method)
W/KeyStore(32540): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/KeyStore(32540): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
E/FlutterSecureStoragePl(32540): Registration failed
E/FlutterSecureStoragePl(32540): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl(32540): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl(32540): 	at javax.crypto.Cipher.unwrap(Cipher.java:2440)
E/FlutterSecureStoragePl(32540): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl(32540): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl(32540): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl(32540): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
E/FlutterSecureStoragePl(32540): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:26)
E/FlutterSecureStoragePl(32540): 	at io.ottomatic.odailies.MainActivity.onCreate(MainActivity.java:12)
E/FlutterSecureStoragePl(32540): 	at android.app.Activity.performCreate(Activity.java:7136)
E/FlutterSecureStoragePl(32540): 	at android.app.Activity.performCreate(Activity.java:7127)
E/FlutterSecureStoragePl(32540): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
E/FlutterSecureStoragePl(32540): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
E/FlutterSecureStoragePl(32540): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
E/FlutterSecureStoragePl(32540): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
E/FlutterSecureStoragePl(32540): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
E/FlutterSecureStoragePl(32540): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
E/FlutterSecureStoragePl(32540): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
E/FlutterSecureStoragePl(32540): 	at android.os.Handler.dispatchMessage(Handler.java:106)
E/FlutterSecureStoragePl(32540): 	at android.os.Looper.loop(Looper.java:193)
E/FlutterSecureStoragePl(32540): 	at android.app.ActivityThread.main(ActivityThread.java:6669)
E/FlutterSecureStoragePl(32540): 	at java.lang.reflect.Method.invoke(Native Method)
E/FlutterSecureStoragePl(32540): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
E/FlutterSecureStoragePl(32540): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
E/FlutterSecureStoragePl(32540): Caused by: javax.crypto.IllegalBlockSizeException
E/FlutterSecureStoragePl(32540): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl(32540): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl(32540): 	... 22 more
E/FlutterSecureStoragePl(32540): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl(32540): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:839)
E/FlutterSecureStoragePl(32540): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl(32540): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl(32540): 	... 23 more
I/FlutterActivityDelegate(32540): onResume setting current activity to this
I/OpenGLRenderer(32540): Initialized EGL, version 1.4
D/OpenGLRenderer(32540): Swap behavior 1
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.14 18A353d, locale de-CH)
[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[✓] Android Studio (version 3.1)
[✓] Connected devices (2 available)

• No issues found!

@jeroentrappers
Copy link

jeroentrappers commented Sep 3, 2018

Same issue here... works fine when installing locally via ADB, but fails when installing from Play store Alpha.

    java.security.InvalidKeyException: Failed to unwrap key
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
        at javax.crypto.Cipher.unwrap(Cipher.java:2126)
        at a.b.a.a.a.a(Unknown Source:17)
        at a.b.a.a.c.<init>(Unknown Source:86)
        at a.b.a.a.<init>(Unknown Source:27)
        at a.b.a.a.a(Unknown Source:6)
        at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(Unknown Source:13)```

@ernestomar
Copy link

ernestomar commented Sep 13, 2018

I found a workaround:

The issue was throw because Android application has backups on Google Drive enabled. After disable it in the application with:

android:allowBackup="true"

It works again..

(More info on https://developer.android.com/guide/topics/data/autobackup#EnablingAutoBackup )

ORIGINAL POST
Same issue here with 3.1.1 package version . I pulled modification fro git and then the error raised.

Right now I can't run the project. This is my output

Launching lib/main.dart on Redmi Note 5 in debug mode...
Built build/app/outputs/apk/debug/app-debug.apk.
E/FlutterSecureStoragePl(24032): Registration failed
E/FlutterSecureStoragePl(24032): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl(24032): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl(24032): 	at javax.crypto.Cipher.unwrap(Cipher.java:2126)
E/FlutterSecureStoragePl(24032): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl(24032): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl(24032): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl(24032): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
E/FlutterSecureStoragePl(24032): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:18)
E/FlutterSecureStoragePl(24032): 	at net.it.cirrus.pocketbank.MainActivity.onCreate(MainActivity.java:15)
E/FlutterSecureStoragePl(24032): 	at android.app.Activity.performCreate(Activity.java:7087)
E/FlutterSecureStoragePl(24032): 	at android.app.Activity.performCreate(Activity.java:7078)
E/FlutterSecureStoragePl(24032): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
E/FlutterSecureStoragePl(24032): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2763)
E/FlutterSecureStoragePl(24032): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2888)
E/FlutterSecureStoragePl(24032): 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
E/FlutterSecureStoragePl(24032): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1609)
E/FlutterSecureStoragePl(24032): 	at android.os.Handler.dispatchMessage(Handler.java:106)
E/FlutterSecureStoragePl(24032): 	at android.os.Looper.loop(Looper.java:171)
E/FlutterSecureStoragePl(24032): 	at android.app.ActivityThread.main(ActivityThread.java:6606)
E/FlutterSecureStoragePl(24032): 	at java.lang.reflect.Method.invoke(Native Method)
E/FlutterSecureStoragePl(24032): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
E/FlutterSecureStoragePl(24032): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
E/FlutterSecureStoragePl(24032): Caused by: javax.crypto.IllegalBlockSizeException
E/FlutterSecureStoragePl(24032): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl(24032): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl(24032): 	... 20 more
E/FlutterSecureStoragePl(24032): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl(24032): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:697)
E/FlutterSecureStoragePl(24032): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl(24032): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl(24032): 	... 21 more
D/OpenGLRenderer(24032): HWUI GL Pipeline

What I'v tried:

  1. Drop App on phone and then run again with USB cable. DON'T WORK
  2. Reinstall packages. DON'T WORK
    flutter pub pub cache repair
  3. Clean project. DON'T WORK
    flutter clean project
  4. Drop App on phone -> Clean project -> Donwngrade to 3.1.0 DON'T WORK. Stacktrace:
Launching lib/main.dart on Redmi Note 5 in debug mode...
Note: /Users/ecampohermoso/opt/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.1.0/android/src/main/java/com/it_nomads/fluttersecurestorage/FlutterSecureStoragePlugin.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Built build/app/outputs/apk/debug/app-debug.apk.
E/FlutterSecureStoragePl( 7252): Registration failed
E/FlutterSecureStoragePl( 7252): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl( 7252): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl( 7252): 	at javax.crypto.Cipher.unwrap(Cipher.java:2126)
E/FlutterSecureStoragePl( 7252): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl( 7252): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl( 7252): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl( 7252): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl( 7252): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl( 7252): 	... 20 more
E/FlutterSecureStoragePl( 7252): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl( 7252): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:697)
E/FlutterSecureStoragePl( 7252): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl( 7252): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl( 7252): 	... 21 more
D/OpenGLRenderer( 7252): HWUI GL Pipeline
I/OpenGLRenderer( 7252): Initialized EGL, version 1.4
D/OpenGLRenderer( 7252): Swap behavior 2
Application finished.
  1. Drop App on phone -> Clean project -> Donwngrade to 3.0.0 DON'T WORK. Error when try to read from secure_storage. Stacktrace:
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): Failed to handle method call
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): java.lang.IllegalArgumentException: Unsupported value: javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at io.flutter.plugin.common.StandardMessageCodec.writeValue(StandardMessageCodec.java:293)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at io.flutter.plugin.common.StandardMethodCodec.encodeErrorEnvelope(StandardMethodCodec.java:70)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:199)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.onMethodCall(FlutterSecureStoragePlugin.java:75)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:191)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at io.flutter.view.FlutterNativeView.handlePlatformMessage(FlutterNativeView.java:163)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at android.os.MessageQueue.next(MessageQueue.java:331)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at android.os.Looper.loop(Looper.java:147)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at android.app.ActivityThread.main(ActivityThread.java:6606)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
E/MethodChannel#plugins.it_nomads.com/flutter_secure_storage(18212): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
I/zygote64(18212): Background concurrent copying GC freed 4080(250KB) AllocSpace objects, 2(104KB) LOS objects, 55% free, 1219KB/2MB, paused 5.299ms total 108.261ms
W/IInputConnectionWrapper(18212): getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper(18212): getSelectedText on inactive InputConnection
W/IInputConnectionWrapper(18212): getTextAfterCursor on inactive InputConnection
  1. Drop Project -> clone Project -> flutter run. DON'T WORK. Exception:
Syncing files to device Redmi Note 5...                          
E/FlutterSecureStoragePl(26649): Registration failed
E/FlutterSecureStoragePl(26649): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl(26649): 	at javax.crypto.Cipher.unwrap(Cipher.java:2126)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
E/FlutterSecureStoragePl(26649): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:18)
E/FlutterSecureStoragePl(26649): 	at net.it.cirrus.pocketbank.MainActivity.onCreate(MainActivity.java:15)
E/FlutterSecureStoragePl(26649): 	at android.app.Activity.performCreate(Activity.java:7087)
E/FlutterSecureStoragePl(26649): 	at android.app.Activity.performCreate(Activity.java:7078)
E/FlutterSecureStoragePl(26649): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2763)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2888)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1609)
E/FlutterSecureStoragePl(26649): 	at android.os.Handler.dispatchMessage(Handler.java:106)
E/FlutterSecureStoragePl(26649): 	at android.os.Looper.loop(Looper.java:171)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.main(ActivityThread.java:6606)
E/FlutterSecureStoragePl(26649): 	at java.lang.reflect.Method.invoke(Native Method)
E/FlutterSecureStoragePl(26649): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
E/FlutterSecureStoragePl(26649): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
E/FlutterSecureStoragePl(26649): Caused by: javax.crypto.IllegalBlockSizeException
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl(26649): 	... 20 more
E/FlutterSecureStoragePl(26649): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl(26649): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:697)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl(26649): 	... 21 more
D/OpenGLRenderer(26649): HWUI GL Pipeline
I/flutter (26649): MissingPluginException(No implementation found for method read on channel plugins.it_nomads.com/flutter_secure_storage)
I/flutter (26649): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:278:7)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #1      FlutterSecureStorage.read (package:flutter_secure_storage/flutter_secure_storage.dart:16:24)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #2      SecureStorage.read (file:///Users/ecampohermoso/data/pocketX/front-mobile/lib/helpers/secure_storage.dart:16:36)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #3      _AffiliationPage.initState.<anonymous closure> (file:///Users/ecampohermoso/data/pocketX/front-mobile/lib/pages/affiliation.dart:60:23)
I/flutter (26649): #4      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (26649): #5      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:938:9)
I/flutter (26649): #6      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/b
I/OpenGLRenderer(26649): Initialized EGL, version 1.4
D/OpenGLRenderer(26649): Swap behavior 2Syncing files to device Redmi Note 5...                          
E/FlutterSecureStoragePl(26649): Registration failed
E/FlutterSecureStoragePl(26649): java.security.InvalidKeyException: Failed to unwrap key
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:682)
E/FlutterSecureStoragePl(26649): 	at javax.crypto.Cipher.unwrap(Cipher.java:2126)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:48)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
E/FlutterSecureStoragePl(26649): 	at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
E/FlutterSecureStoragePl(26649): 	at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:18)
E/FlutterSecureStoragePl(26649): 	at net.it.cirrus.pocketbank.MainActivity.onCreate(MainActivity.java:15)
E/FlutterSecureStoragePl(26649): 	at android.app.Activity.performCreate(Activity.java:7087)
E/FlutterSecureStoragePl(26649): 	at android.app.Activity.performCreate(Activity.java:7078)
E/FlutterSecureStoragePl(26649): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2763)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2888)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1609)
E/FlutterSecureStoragePl(26649): 	at android.os.Handler.dispatchMessage(Handler.java:106)
E/FlutterSecureStoragePl(26649): 	at android.os.Looper.loop(Looper.java:171)
E/FlutterSecureStoragePl(26649): 	at android.app.ActivityThread.main(ActivityThread.java:6606)
E/FlutterSecureStoragePl(26649): 	at java.lang.reflect.Method.invoke(Native Method)
E/FlutterSecureStoragePl(26649): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
E/FlutterSecureStoragePl(26649): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
E/FlutterSecureStoragePl(26649): Caused by: javax.crypto.IllegalBlockSizeException
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:519)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:680)
E/FlutterSecureStoragePl(26649): 	... 20 more
E/FlutterSecureStoragePl(26649): Caused by: android.security.KeyStoreException: Unknown error
E/FlutterSecureStoragePl(26649): 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:697)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
E/FlutterSecureStoragePl(26649): 	at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
E/FlutterSecureStoragePl(26649): 	... 21 more
D/OpenGLRenderer(26649): HWUI GL Pipeline
I/flutter (26649): MissingPluginException(No implementation found for method read on channel plugins.it_nomads.com/flutter_secure_storage)
I/flutter (26649): #0      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:278:7)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #1      FlutterSecureStorage.read (package:flutter_secure_storage/flutter_secure_storage.dart:16:24)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #2      SecureStorage.read (file:///Users/ecampohermoso/data/pocketX/front-mobile/lib/helpers/secure_storage.dart:16:36)
I/flutter (26649): <asynchronous suspension>
I/flutter (26649): #3      _AffiliationPage.initState.<anonymous closure> (file:///Users/ecampohermoso/data/pocketX/front-mobile/lib/pages/affiliation.dart:60:23)
I/flutter (26649): #4      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (26649): #5      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:938:9)
I/flutter (26649): #6      _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/b
I/OpenGLRenderer(26649): Initialized EGL, version 1.4
D/OpenGLRenderer(26649): Swap behavior 2

My Flutter Doctor

[✓] Flutter (Channel beta, v0.7.3, on Mac OS X 10.12.6 16G1510, locale es-BO)
[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 9.2)
[✓] Android Studio (version 3.0)
[!] IntelliJ IDEA Ultimate Edition (version 2018.2.1)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
[✓] VS Code (version 1.27.0)
[✓] Connected devices (1 available)

@mogol
Copy link
Owner

mogol commented Sep 15, 2018

I found two similar issues:
https://stackoverflow.com/questions/36652675/java-security-unrecoverablekeyexception-failed-to-obtain-information-about-priv
https://stackoverflow.com/questions/36488219/android-security-keystoreexception-invalid-key-blob

I applied this hack and pushed branch with it. Please try version from branch hack_for_get_entry
Add to pubspec.yaml

  flutter_secure_storage:
    git:
      url: git@github.com:mogol/flutter_secure_storage.git
      ref: hack_for_get_entry

@tom95
Copy link

tom95 commented Sep 18, 2018

Fighting with the same problem right now. Your branch unfortunately did not change things for me. Without having investigated the call chains in detail, I did notice that the repeat loop was around a different place than the one the exception appears to be thrown from (unwrap). Is that intentional, like an early test?

The most notable oddity, however, is that all builds work flawlessly up to a versionCode of 17. Any build with a higher number fails, any build with a lower number works. Does that help in any way?

@jeroentrappers
Copy link

I've made a separate implementation on flutter_keychain which seems to be working fine for me now.

@mogol
Copy link
Owner

mogol commented Sep 19, 2018

The most notable oddity, however, is that all builds work flawlessly up to a versionCode of 17. Any build with a higher number fails, any build with a lower number works. Does that help in any way?

@tom95 , I am testing on 8.1.0 and still not able to reproduce. So couldn't get the reason why the secret key is encrypted by another key pair.

For now I can add fallback logic: if unwrapping failed, delete all data and start from scratch.
Would it work?

@tom95
Copy link

tom95 commented Sep 19, 2018

@mogol Ah I did actually mean the app's versionCode, not the OS's. I have no clue why, but any versionCode in the app/build.gradle of 17 or lower threw no error. Starting from 18 any versionCode I tried (18, 19, 20, 100, 1000) exhibited the error. I have not tried reproducing that in an isolated environment, but this is the exact behavior as observed in our app.

I believe just deleting the data on error should be an opt-in fallback, since that may discard valuable info. I can see how that info is not accessible anyways currently, but if a proper fix comes up at some point I would prefer for the data to still be there.

@mogol
Copy link
Owner

mogol commented Sep 20, 2018

Let's discuss the fix in #23
thanks to @hnvn

@mogol
Copy link
Owner

mogol commented Sep 21, 2018

Please try v3.1.2.

@mogol mogol closed this as completed Sep 21, 2018
@Sdlion
Copy link

Sdlion commented Sep 26, 2018

This still happens on v3.1.2 and only in release mode

@ernestomar workaround worked for me. Setting android:allowBackup="false" application attribute on android/app/src/main/AndroidManifest.xml.

09-26 11:05:24.584 26696-26696/? E/StorageCipher18Impl: unwrap key failed
    java.security.InvalidKeyException: Failed to unwrap key
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:618)
        at javax.crypto.Cipher.unwrap(Cipher.java:1707)
        at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46)
        at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:44)
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46)
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33)
        at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:20)
        at com.xxxx.xxxxxx.MainActivity.onCreate(MainActivity.java:12)
        at android.app.Activity.performCreate(Activity.java:6259)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2382)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5459)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
     Caused by: javax.crypto.IllegalBlockSizeException
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:486)
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:616)
        at javax.crypto.Cipher.unwrap(Cipher.java:1707) 
        at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46) 
        at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:44) 
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46) 
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33) 
        at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:20) 
        at com.xxxx.xxxxxx.MainActivity.onCreate(MainActivity.java:12) 
        at android.app.Activity.performCreate(Activity.java:6259) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2382) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5459) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
     Caused by: android.security.KeyStoreException: Unknown error
        at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
        at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
        at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineUnwrap(AndroidKeyStoreCipherSpiBase.java:616) 
        at javax.crypto.Cipher.unwrap(Cipher.java:1707) 
        at com.it_nomads.fluttersecurestorage.ciphers.RSACipher18Implementation.unwrap(RSACipher18Implementation.java:46) 
        at com.it_nomads.fluttersecurestorage.ciphers.StorageCipher18Implementation.<init>(StorageCipher18Implementation.java:44) 
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.<init>(FlutterSecureStoragePlugin.java:46) 
        at com.it_nomads.fluttersecurestorage.FlutterSecureStoragePlugin.registerWith(FlutterSecureStoragePlugin.java:33) 
        at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:20) 
        at com.xxxx.xxxxxx.MainActivity.onCreate(MainActivity.java:12) 
        at android.app.Activity.performCreate(Activity.java:6259) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2382) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5459) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.7.3, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[✓] Android Studio (version 3.2)
[✓] Connected devices (1 available)

• No issues found!

@timvanginderen
Copy link

Disabling the backup for android will prevent the crash, but I was wondering if there is a more suitable approach we can take for when we want to keep the 'allow backup' option for Android enabled while also using this plugin?

@mogol
Copy link
Owner

mogol commented Jan 23, 2019

As I Understand the issue:
Data is stored encrypted in shared prefs. Private key to decrypt the key — in keystore.
Shared prefs are restored from backup, but keystore isn’t. So it’s technically impossible to decrypt data , if the key is lost.
Another way to handle this — throw exception and let the app delete old data.

@timvanginderen
Copy link

Ok thanks for the clarification.
Catching the exception and then deleting shared prefs data is exactly what we implemented atm.

@Darival
Copy link

Darival commented Feb 9, 2019

As I Understand the issue:
Data is stored encrypted in shared prefs. Private key to decrypt the key — in keystore.
Shared prefs are restored from backup, but keystore isn’t. So it’s technically impossible to decrypt data , if the key is lost.
Another way to handle this — throw exception and let the app delete old data.

Lol, how dare I call myself a developer.

@danielnordh
Copy link

I know this issue is closed but after reading both the read.me and this issue it's not clear to me if my intended use case will work with this package;

Goal

  • Store encrypted items in the keychain so that IF the user loses their device they can access these items on a new device

Disabling automatic backup would clearly not be a good idea in this case.

@geeky-dawood
Copy link

Thanks, @Sdlion . This solution worked for me. I was encountering this error in both development and release modes. In the case of the release mode, I cleared my cache and restarted my phone to resolve it, but I was able to solve it through the method you suggested. Thanks

@KanybekMomukeyev
Copy link

@geeky-dawood How did you able to solve it, only by disabling backup?

@geeky-dawood
Copy link

@KanybekMomukeyev yes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests