react-native-keychain icon indicating copy to clipboard operation
react-native-keychain copied to clipboard

android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherPadding.finalize() timed out after 10 seconds

Open SMJ93 opened this issue 4 years ago • 17 comments

Hey, first of all great library! Managed to get it working with ease!

We have noticed the following issue on some old Android version 7 devices the last few weeks:

Fatal Exception: java.util.concurrent.TimeoutException: android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds
       at android.os.BinderProxy.transactNative(Binder.java)
       at android.os.BinderProxy.transact(Binder.java:615)
       at android.security.IKeystoreService$Stub$Proxy.abort(IKeystoreService.java:1341)
       at android.security.KeyStore.abort(KeyStore.java:519)
       at android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize(AndroidKeyStoreCipherSpiBase.java:744)
       at android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize(AndroidKeyStoreUnauthenticatedAESCipherSpi.java)
       at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:222)
       at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:209)
       at java.lang.Thread.run(Thread.java:761)

Here are the devices details from Crashlytics:

Screenshot 2020-06-24 at 10 51 16 Screenshot 2020-06-24 at 10 50 52

Anyone else experiencing this issue?

SMJ93 avatar Jun 24 '20 09:06 SMJ93

I've been also faced with the same issue.

java.util.concurrent.TimeoutException android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds 
    Binder.java:-2 android.os.BinderProxy.transactNative
    Binder.java:615 android.os.BinderProxy.transact
    IKeystoreService.java:1341 android.security.IKeystoreService$Stub$Proxy.abort
    KeyStore.java:519 android.security.KeyStore.abort
    AndroidKeyStoreCipherSpiBase.java:744 android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize
    AndroidKeyStoreUnauthenticatedAESCipherSpi.java:-1 android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize
    Daemons.java:222 java.lang.Daemons$FinalizerDaemon.doFinalize
    Daemons.java:209 java.lang.Daemons$FinalizerDaemon.run
    Thread.java:761 java.lang.Thread.run
- react-native: 0.61.5
- react-native-keychain: 1.6.1

kyo504 avatar Jul 28 '20 04:07 kyo504

Same thing here

java.util.concurrent.TimeoutException android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds 
    Binder.java:-2 android.os.BinderProxy.transactNative
    Binder.java:615 android.os.BinderProxy.transact
    IKeystoreService.java:1341 android.security.IKeystoreService$Stub$Proxy.abort
    KeyStore.java:531 android.security.KeyStore.abort
    AndroidKeyStoreCipherSpiBase.java:744 android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize
    AndroidKeyStoreUnauthenticatedAESCipherSpi.java:-1 android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize
    Daemons.java:222 java.lang.Daemons$FinalizerDaemon.doFinalize
    Daemons.java:209 java.lang.Daemons$FinalizerDaemon.run
    Thread.java:761 java.lang.Thread.run
"react-native": "0.60.0",
"react-native-keychain": "6.0.0"

saraht129 avatar Jul 29 '20 04:07 saraht129

Me as well

react-native 0.61.5 react-native-keychain 6.0.0

RuairiOliver avatar Aug 19 '20 13:08 RuairiOliver

Me as well

Change version kotlin 1.4.0

I´m use EncryptedSharedPreferences

Error Android Studio:

2020-08-20 20:14:39.526 27756-27756/red.chesco.su E/AndroidRuntime: FATAL EXCEPTION: main Process: red.chesco.su, PID: 27756 java.lang.RuntimeException: Unable to create application red.chesco.su.data.shared.SharedApp: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero). at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5408) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero). at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1566) at com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1664) at com.google.crypto.tink.proto.Keyset.parseFrom(Keyset.java:957) at com.google.crypto.tink.integration.android.SharedPrefKeysetReader.read(SharedPrefKeysetReader.java:84) at com.google.crypto.tink.CleartextKeysetHandle.read(CleartextKeysetHandle.java:58) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:321) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:280) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:230) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:153) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:119) at red.chesco.su.data.shared.Shared.(Shared.kt:27) at red.chesco.su.data.shared.SharedApp.onCreate(SharedApp.kt:13) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5405) at android.app.ActivityThread.-wrap2(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6121)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

chescored avatar Aug 20 '20 18:08 chescored

020-08-20 20:14:39.520 27756-27756/red.chesco.su W/AndroidKeysetManager: cannot decrypt keyset: javax.crypto.AEADBadTagException at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:517) at javax.crypto.Cipher.doFinal(Cipher.java:2114) at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decrypt(AndroidKeystoreAesGcm.java:89) at com.google.crypto.tink.KeysetHandle.decrypt(KeysetHandle.java:206) at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:107) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:304) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:280) at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:230) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:153) at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:119) at red.chesco.su.data.shared.Shared.(Shared.kt:27) at red.chesco.su.data.shared.SharedApp.onCreate(SharedApp.kt:13) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5405) at android.app.ActivityThread.-wrap2(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: android.security.KeyStoreException: Signature/MAC verification failed at android.security.KeyStore.getKeyStoreException(KeyStore.java:676) at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224) at android.security.keystore.AndroidKeyStoreAuthenticatedAESCipherSpi$BufferAllOutputUntilDoFinalStreamer.doFinal(AndroidKeyStoreAuthenticatedAESCipherSpi.java:373) at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506) at javax.crypto.Cipher.doFinal(Cipher.java:2114)  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decrypt(AndroidKeystoreAesGcm.java:89)  at com.google.crypto.tink.KeysetHandle.decrypt(KeysetHandle.java:206)  at com.google.crypto.tink.KeysetHandle.read(KeysetHandle.java:107)  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read(AndroidKeysetManager.java:304)  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset(AndroidKeysetManager.java:280)  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build(AndroidKeysetManager.java:230)  at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:153)  at androidx.security.crypto.EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:119)  at red.chesco.su.data.shared.Shared.(Shared.kt:27)  at red.chesco.su.data.shared.SharedApp.onCreate(SharedApp.kt:13)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5405)  at android.app.ActivityThread.-wrap2(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1546)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:154)  at android.app.ActivityThread.main(ActivityThread.java:6121)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

chescored avatar Aug 20 '20 18:08 chescored

Sorry, the case that the xml file where you save the SharedPreferences is created and encodes it perfectly, yesterday it worked fine...

chescored avatar Aug 20 '20 18:08 chescored

In API version 7.0 the app gives an error but encrypts the SharedPreferences with higher versions it works fine but does not encrypt ...

chescored avatar Aug 21 '20 05:08 chescored

same issue

react-native: 0.60.6 react-native-keychain: 6.0.0

Have you got any updates ?

goriverna avatar Sep 09 '20 09:09 goriverna

Same here on : Device: Moto E (4) OS: 7.1.1 xx-keychain: 6.1.1

java.util.concurrent.TimeoutException android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds Binder.java:-2 android.os.BinderProxy.transactNative Binder.java:615 android.os.BinderProxy.transact IKeystoreService.java:1341 android.security.IKeystoreService$Stub$Proxy.abort KeyStore.java:519 android.security.KeyStore.abort AndroidKeyStoreCipherSpiBase.java:744 android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize AndroidKeyStoreUnauthenticatedAESCipherSpi.java:-1 android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize Daemons.java:222 java.lang.Daemons$FinalizerDaemon.doFinalize Daemons.java:209 java.lang.Daemons$FinalizerDaemon.run Thread.java:761 java.lang.Thread.run

WilliamAlexander avatar Oct 09 '20 13:10 WilliamAlexander

FYI: I spun up AWS Device Farm and tested on a 7.1.1 device (Samsung Galaxy Note8). No problems

WilliamAlexander avatar Oct 09 '20 17:10 WilliamAlexander

Same issue. This is affecting a lot of our users in production. FYI, the affected users had android version 7.1.2 and below and the most affected android version was 7.0

java.util.concurrent.TimeoutException: android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds

gauravahuja-unthinkable avatar Oct 26 '20 08:10 gauravahuja-unthinkable

Same issue here. Any solutions?

marf avatar Apr 30 '21 09:04 marf

java.util.concurrent.TimeoutException: android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds
    at android.os.BinderProxy.transactNative(Binder.java)
    at android.os.BinderProxy.transact(Binder.java:503)
    at android.security.IKeystoreService$Stub$Proxy.abort(IKeystoreService.java:1360)
    at android.security.KeyStore.abort(KeyStore.java:809)
    at android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize(AndroidKeyStoreCipherSpiBase.java:680)
    at android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize(AndroidKeyStoreUnauthenticatedAESCipherSpi.java:73)
    at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:217)
    at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:200)
    at java.lang.Thread.run(Thread.java:818)

Same issue. Any news?

aryella-lacerda avatar May 03 '21 19:05 aryella-lacerda

Also running into this issue!

From Firebase's suggestions, it says that this is an inevitable error, but one that can be improved on!

Our stacktrace looks like:

Fatal Exception: java.util.concurrent.TimeoutException
android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize() timed out after 10 seconds

android.os.BinderProxy.transactNative (Binder.java)
android.os.BinderProxy.transact (Binder.java:615)
android.security.IKeystoreService$Stub$Proxy.abort (IKeystoreService.java:1341)
android.security.KeyStore.abort (KeyStore.java:531)
android.security.keystore.AndroidKeyStoreCipherSpiBase.finalize (AndroidKeyStoreCipherSpiBase.java:744)
android.security.keystore.AndroidKeyStoreUnauthenticatedAESCipherSpi$CBC$PKCS7Padding.finalize (AndroidKeyStoreUnauthenticatedAESCipherSpi.java)
java.lang.Daemons$FinalizerDaemon.doFinalize (Daemons.java:222)
java.lang.Daemons$FinalizerDaemon.run (Daemons.java:209)
java.lang.Thread.run (Thread.java:761)

Although we're on version 6.0.0 of this package and react native version "0.63.3"

chris-hut avatar May 12 '21 21:05 chris-hut

Any solution on this issue ?

akiladevinda avatar Aug 16 '21 03:08 akiladevinda

same here: react-native-keychain: 7.0.0 Android version: 10 Models: Galaxy A50 (SM-A505F)

tudiantuan avatar Sep 16 '21 03:09 tudiantuan

I solve this problem with a workaround. It happens when the app tries to call the function getGenericPassword() when the app state is background

You guys can use this hook:

import { useState, useEffect } from 'react';
import { AppState } from 'react-native';
export default function useAppState(settings) {
  const { onChange, onForeground, onBackground } = settings || {};
  const [appState, setAppState] = useState(AppState.currentState);
  useEffect(() => {
    function handleAppStateChange(nextAppState) {
      if (
        nextAppState === 'active' &&
        appState !== 'active' &&
        isValidFunction(onForeground)
      )
        onForeground();
      else if (
        appState === 'active' &&
        nextAppState.match(/inactive|background/) &&
        isValidFunction(onBackground)
      )
        onBackground();
      setAppState(nextAppState);
      if (isValidFunction(onChange)) onChange(nextAppState);
    }
    const appStateListener = AppState.addEventListener(
      'change',
      handleAppStateChange,
    );
    return () => appStateListener?.remove();
  }, [onChange, onForeground, onBackground, appState]);
  // settings validation
  function isValidFunction(func) {
    return func && typeof func === 'function';
  }
  return { appState };
}

And after that:

const { appState } = useAppState();

if (appState === 'active') {
  getGenericPassword({ ...options });
}

caiogodoi avatar Nov 03 '21 17:11 caiogodoi