catch exception when decrypting key fails, fixes #50
This commit is contained in:
		@@ -1054,10 +1054,19 @@ namespace keepass2android
 | 
			
		||||
			var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
 | 
			
		||||
 | 
			
		||||
			btn.SetImageResource(Resource.Drawable.ic_fingerprint_success);
 | 
			
		||||
			
 | 
			
		||||
			var masterPassword = _fingerprintDec.DecryptStored(Database.GetFingerprintPrefKey(_ioConnection));
 | 
			
		||||
			_password = FindViewById<EditText>(Resource.Id.password_edit).Text = masterPassword;
 | 
			
		||||
 | 
			
		||||
			try
 | 
			
		||||
			{
 | 
			
		||||
				var masterPassword = _fingerprintDec.DecryptStored(Database.GetFingerprintPrefKey(_ioConnection));
 | 
			
		||||
				_password = FindViewById<EditText>(Resource.Id.password_edit).Text = masterPassword;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			catch (Java.Security.GeneralSecurityException ex)
 | 
			
		||||
			{
 | 
			
		||||
				HandleFingerprintKeyInvalidated();
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			btn.PostDelayed(() =>
 | 
			
		||||
			{
 | 
			
		||||
				//re-init fingerprint unlock in case something goes wrong with opening the database 
 | 
			
		||||
@@ -1961,12 +1970,7 @@ namespace keepass2android
 | 
			
		||||
				}
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					//key invalidated permanently
 | 
			
		||||
					btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
 | 
			
		||||
					btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
 | 
			
		||||
					_fingerprintDec = null;
 | 
			
		||||
 | 
			
		||||
					ClearFingerprintUnlockData();
 | 
			
		||||
					HandleFingerprintKeyInvalidated();
 | 
			
		||||
					return false;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@@ -1982,6 +1986,17 @@ namespace keepass2android
 | 
			
		||||
				
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void HandleFingerprintKeyInvalidated()
 | 
			
		||||
		{
 | 
			
		||||
			var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
 | 
			
		||||
//key invalidated permanently
 | 
			
		||||
			btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
 | 
			
		||||
			btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
 | 
			
		||||
			_fingerprintDec = null;
 | 
			
		||||
 | 
			
		||||
			ClearFingerprintUnlockData();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void InitializeOptionCheckboxes() {
 | 
			
		||||
			CheckBox cbQuickUnlock = (CheckBox)FindViewById(Resource.Id.enable_quickunlock);
 | 
			
		||||
			cbQuickUnlock.Checked = _prefs.GetBoolean(GetString(Resource.String.QuickUnlockDefaultEnabled_key), true);
 | 
			
		||||
 
 | 
			
		||||
@@ -285,11 +285,7 @@ namespace keepass2android
 | 
			
		||||
				else
 | 
			
		||||
				{
 | 
			
		||||
					Kp2aLog.Log("failed to initialize fingerprint.");
 | 
			
		||||
					//key invalidated permanently
 | 
			
		||||
					btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
 | 
			
		||||
					btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
 | 
			
		||||
					_fingerprintIdentifier = null;
 | 
			
		||||
 | 
			
		||||
					HandleFingerprintKeyInvalidated();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			catch (Exception e)
 | 
			
		||||
@@ -304,6 +300,15 @@ namespace keepass2android
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void HandleFingerprintKeyInvalidated()
 | 
			
		||||
		{
 | 
			
		||||
			var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
 | 
			
		||||
//key invalidated permanently
 | 
			
		||||
			btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
 | 
			
		||||
			btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
 | 
			
		||||
			_fingerprintIdentifier = null;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void ClearFingerprintUnlockData()
 | 
			
		||||
		{
 | 
			
		||||
			ISharedPreferencesEditor edit = PreferenceManager.GetDefaultSharedPreferences(this).Edit();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user