expo: 'Could not encrypt the value for SecureStore' error on android standalone app

Context

  • Error in standalone app on android
  • Work fine in Expo app
  • SDK 22

Android java stack trace

W/SecureStoreModule(23138): java.security.spec.InvalidParameterSpecException: no constructor found!
W/SecureStoreModule(23138): 	at com.android.org.bouncycastle.jcajce.provider.symmetric.AES$AlgParamsGCM.localEngineGetParameterSpec(AES.java:462)
W/SecureStoreModule(23138): 	at com.android.org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters.engineGetParameterSpec(BaseAlgorithmParameters.java:24)
W/SecureStoreModule(23138): 	at java.security.AlgorithmParameters.getParameterSpec(AlgorithmParameters.java:257)
W/SecureStoreModule(23138): 	at abi22_0_0.host.exp.exponent.modules.api.SecureStoreModule$AESEncrypter.createEncryptedItem(SecureStoreModule.java:429)
W/SecureStoreModule(23138): 	at abi22_0_0.host.exp.exponent.modules.api.SecureStoreModule$HybridAESEncrypter.createEncryptedItem(SecureStoreModule.java:566)
W/SecureStoreModule(23138): 	at abi22_0_0.host.exp.exponent.modules.api.SecureStoreModule.setItemImpl(SecureStoreModule.java:132)
W/SecureStoreModule(23138): 	at abi22_0_0.host.exp.exponent.modules.api.SecureStoreModule.setValueWithKeyAsync(SecureStoreModule.java:93)
W/SecureStoreModule(23138): 	at java.lang.reflect.Method.invoke(Native Method)
W/SecureStoreModule(23138): 	at java.lang.reflect.Method.invoke(Method.java:372)
W/SecureStoreModule(23138): 	at abi22_0_0.com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:363)
W/SecureStoreModule(23138): 	at abi22_0_0.com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:162)
W/SecureStoreModule(23138): 	at abi22_0_0.com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
W/SecureStoreModule(23138): 	at android.os.Handler.handleCallback(Handler.java:739)
W/SecureStoreModule(23138): 	at android.os.Handler.dispatchMessage(Handler.java:95)
W/SecureStoreModule(23138): 	at abi22_0_0.com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
W/SecureStoreModule(23138): 	at android.os.Looper.loop(Looper.java:135)
W/SecureStoreModule(23138): 	at abi22_0_0.com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194)
W/SecureStoreModule(23138): 	at java.lang.Thread.run(Thread.java:818)

Into the code

https://github.com/expo/expo/blob/45307852a818da7fac7171d1539b3449021d27dc/android/expoview/src/main/java/versioned/host/exp/exponent/modules/api/SecureStoreModule.java#L141

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 22 (18 by maintainers)

Most upvoted comments

Same in here.

  • Message: Error: Could not decrypt the item in SecureStore .
  • SDK: 27.0.0
  • Env: Expo App (in development)
  • Device: Lenovo pb2-690m (Android 6.0.1)

I tried in ASUS_Z00AD too as same sdk version but couldn’t reproduce the error.

The issue happened here when I reinstalled the app .apk or expo app.

Context:

  • SDK 27.0.1

Code: E_SECURESTORE_DECRYPT_ERROR Stack:

Error: Could not decrypt the item in SecureStore
    at createErrorFromErrorData (blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2342:17)
    at blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2294:27
    at MessageQueue.__invokeCallback (blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2736:18)
    at blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2481:18
    at MessageQueue.__guardSafe (blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2649:11)
    at MessageQueue.invokeCallbackAndReturnFlushedQueue (blob:http://localhost:19001/67812197-ef47-4492-912e-ed6661ea0201:2480:14)
    at http://localhost:19001/debugger-ui/debuggerWorker.js:70:58

Same error, after reinstalling app Latest SDK: 27.0.2 Expo app (in development)

Native log:

05-21 22:43:09.683 18907 19905 W SecureStoreModule: java.security.UnrecoverableKeyException: Failed to obtain information about key
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:282)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:98)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:482)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at java.security.KeyStore.getEntry(KeyStore.java:1560)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.host.exp.exponent.modules.api.SecureStoreModule.getKeyEntry(SecureStoreModule.java:335)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.host.exp.exponent.modules.api.SecureStoreModule.setItemImpl(SecureStoreModule.java:127)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.host.exp.exponent.modules.api.SecureStoreModule.setValueWithKeyAsync(SecureStoreModule.java:93)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at java.lang.reflect.Method.invoke(Native Method)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.os.Handler.handleCallback(Handler.java:790)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.os.Looper.loop(Looper.java:164)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at abi27_0_0.com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at java.lang.Thread.run(Thread.java:764)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: Caused by: android.security.KeyStoreException: Invalid key blob
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.security.KeyStore.getKeyStoreException(KeyStore.java:697)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	at android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreSecretKeyFromKeystore(AndroidKeyStoreProvider.java:283)
05-21 22:43:09.683 18907 19905 W SecureStoreModule: 	... 16 more

JS:

 Error: Could not encrypt the value for SecureStore

This error gets thrown when there’s one of many possible errors in the security implementation the device provides so it’s hard to pin down exactly what it could be. If you can get more precise stack traces that show the issue we can maybe fix it.

We think we know the bug and why it’s affecting just standalone clients. I have a PR up internally and next it needs to be reviewed and merged and then deployed to the standalone app builders so it’ll take sometime but is in motion.