biometric unlock: SetInvalidatedByBiometricEnrollment(false) for API level >= 24
This commit is contained in:
@@ -176,6 +176,7 @@ namespace keepass2android
|
||||
|
||||
public void StopListening()
|
||||
{
|
||||
Kp2aLog.Log("Fingerprint: StopListening " + (_biometricPrompt != null ? " having prompt " : " without prompt"));
|
||||
_biometricAuthCallbackAdapter?.IgnoreNextError();
|
||||
_biometricPrompt?.CancelAuthentication();
|
||||
}
|
||||
@@ -272,7 +273,24 @@ namespace keepass2android
|
||||
try
|
||||
{
|
||||
_keystore.Load(null);
|
||||
var aliases = _keystore.Aliases();
|
||||
if (aliases == null)
|
||||
{
|
||||
Kp2aLog.Log("KS: no aliases");
|
||||
}
|
||||
else
|
||||
{
|
||||
while (aliases.HasMoreElements)
|
||||
{
|
||||
var o = aliases.NextElement();
|
||||
Kp2aLog.Log("alias: " + o?.ToString());
|
||||
}
|
||||
Kp2aLog.Log("KS: end aliases");
|
||||
|
||||
}
|
||||
var key = _keystore.GetKey(GetAlias(_keyId), null);
|
||||
if (key == null)
|
||||
throw new Exception("Failed to init cipher for fingerprint Init: key is null");
|
||||
var ivParams = new IvParameterSpec(_iv);
|
||||
_cipher.Init(CipherMode.DecryptMode, key, ivParams);
|
||||
|
||||
@@ -286,27 +304,27 @@ namespace keepass2android
|
||||
}
|
||||
catch (KeyStoreException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (keystore)", e);
|
||||
}
|
||||
catch (CertificateException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (CertificateException)", e);
|
||||
}
|
||||
catch (UnrecoverableKeyException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (UnrecoverableKeyException)", e);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (IOException)", e);
|
||||
}
|
||||
catch (NoSuchAlgorithmException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (NoSuchAlgorithmException)", e);
|
||||
}
|
||||
catch (InvalidKeyException e)
|
||||
{
|
||||
throw new RuntimeException(FailedToInitCipher, e);
|
||||
throw new RuntimeException(FailedToInitCipher + " (InvalidKeyException)" + e.ToString(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,14 +367,19 @@ namespace keepass2android
|
||||
try
|
||||
{
|
||||
_keystore.Load(null);
|
||||
_keyGen.Init(new KeyGenParameterSpec.Builder(GetAlias(_keyId),
|
||||
KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
|
||||
KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(GetAlias(_keyId),
|
||||
KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
|
||||
.SetBlockModes(KeyProperties.BlockModeCbc)
|
||||
// Require the user to authenticate with biometry to authorize every use
|
||||
// of the key
|
||||
.SetEncryptionPaddings(KeyProperties.EncryptionPaddingPkcs7)
|
||||
.SetUserAuthenticationRequired(true)
|
||||
.SetUserAuthenticationRequired(true);
|
||||
|
||||
if ((int)Build.VERSION.SdkInt >= 24)
|
||||
builder.SetInvalidatedByBiometricEnrollment(false);
|
||||
|
||||
_keyGen.Init(
|
||||
builder
|
||||
.Build());
|
||||
_keyGen.GenerateKey();
|
||||
}
|
||||
|
@@ -51,6 +51,7 @@
|
||||
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
|
||||
<MandroidI18n />
|
||||
<AndroidLinkTool>r8</AndroidLinkTool>
|
||||
<AndroidUseAapt2>false</AndroidUseAapt2>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>full</DebugType>
|
||||
|
Reference in New Issue
Block a user