epicshaggy / capacitor-native-biometric

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Plugin crash on SetCredentials

KAMAELUA opened this issue · comments

Phone Xiaomi Redmi Note 9 MIUI 12.5.5
Android 11 RKQ1.200826.002

Plugin crashes on SetCredentials with error that cause app crash.

image

Exception stack
Serious error executing plugin
java.lang.reflect.InvocationTargetException
  at java.lang.reflect.Method.invoke(Native Method)
  at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:138)
  at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:780)
  at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA(Unknown Source:0)
  at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run(Unknown Source:8)
  at android.os.Handler.handleCallback(Handler.java:938)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:236)
  at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: android.security.keystore.StrongBoxUnavailableException: Failed to generate key
  at android.security.keystore.AndroidKeyStoreKeyGeneratorSpi.engineGenerateKey(AndroidKeyStoreKeyGeneratorSpi.java:328)
  at javax.crypto.KeyGenerator.generateKey(KeyGenerator.java:612)
  at com.epicshaggy.biometric.NativeBiometric.generateKey(NativeBiometric.java:300)
  at com.epicshaggy.biometric.NativeBiometric.getKey(NativeBiometric.java:311)
  at com.epicshaggy.biometric.NativeBiometric.encryptString(NativeBiometric.java:262)
  at com.epicshaggy.biometric.NativeBiometric.setCredentials(NativeBiometric.java:175)
  at java.lang.reflect.Method.invoke(Native Method) 
  at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:138) 
  at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:780) 
  at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA(Unknown Source:0) 
  at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run(Unknown Source:8) 
  at android.os.Handler.handleCallback(Handler.java:938) 
  at android.os.Handler.dispatchMessage(Handler.java:99) 
  at android.os.Looper.loop(Looper.java:236) 
  at android.os.HandlerThread.run(HandlerThread.java:67) 
Caused by: android.security.KeyStoreException: No StrongBox available
  at android.security.keystore.AndroidKeyStoreKeyGeneratorSpi.engineGenerateKey(AndroidKeyStoreKeyGeneratorSpi.java:328) 
  at javax.crypto.KeyGenerator.generateKey(KeyGenerator.java:612) 
  at com.epicshaggy.biometric.NativeBiometric.generateKey(NativeBiometric.java:300) 
  at com.epicshaggy.biometric.NativeBiometric.getKey(NativeBiometric.java:311) 
  at com.epicshaggy.biometric.NativeBiometric.encryptString(NativeBiometric.java:262) 
  at com.epicshaggy.biometric.NativeBiometric.setCredentials(NativeBiometric.java:175) 
  at java.lang.reflect.Method.invoke(Native Method) 
  at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:138) 
  at com.getcapacitor.Bridge.lambda$callPluginMethod$0(Bridge.java:780) 
  at com.getcapacitor.Bridge.$r8$lambda$ehFTi5f4HhVNFKTbCKAYDkpQYRA(Unknown Source:0) 
  at com.getcapacitor.Bridge$$ExternalSyntheticLambda3.run(Unknown Source:8) 
  at android.os.Handler.handleCallback(Handler.java:938) 
  at android.os.Handler.dispatchMessage(Handler.java:99) 
  at android.os.Looper.loop(Looper.java:236) 
  at android.os.HandlerThread.run(HandlerThread.java:67) 

Code sample that works on my other devices except Xiaomi.

if(verified) {
    try {
        await NativeBiometric.setCredentials({
            server,
            username,
            password,
        });
    } catch (e) {
        console.error('setCredentials', e);
    }
}

Duplicate of #97