From f41ace4d7c21a62ccedb1e18732c1934b7f006d6 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 12 Jun 2017 12:56:18 -0400 Subject: [PATCH] clear settings for prefix when key is generated --- bitwarden-mobile.sln | 4 +-- .../Services/AndroidKeyStoreStorageService.cs | 32 +++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/bitwarden-mobile.sln b/bitwarden-mobile.sln index 2a5ca3e60..0ded8d178 100644 --- a/bitwarden-mobile.sln +++ b/bitwarden-mobile.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.26430.13 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android", "src\Android\Android.csproj", "{04B18ED2-B76D-4947-8474-191F8FD2B5E0}" EndProject diff --git a/src/Android/Services/AndroidKeyStoreStorageService.cs b/src/Android/Services/AndroidKeyStoreStorageService.cs index b7fdd13e0..164571dc3 100644 --- a/src/Android/Services/AndroidKeyStoreStorageService.cs +++ b/src/Android/Services/AndroidKeyStoreStorageService.cs @@ -11,6 +11,7 @@ using Android.App; using Plugin.Settings.Abstractions; using Java.Util; using Javax.Crypto.Spec; +using Android.Preferences; namespace Bit.Android.Services { @@ -22,6 +23,7 @@ namespace Bit.Android.Services private const string KeyAlias = "bitwardenKey2"; private const string KeyAliasV1 = "bitwardenKey"; + private const string SettingsPrefix = "ksSecured2"; private const string SettingsFormat = "ksSecured2:{0}"; private const string SettingsFormatV1 = "ksSecured:{0}"; @@ -91,7 +93,7 @@ namespace Bit.Android.Services { return App.Utilities.Crypto.AesCbcDecrypt(new App.Models.CipherString(cs), aesKey); } - catch(Exception) + catch { Console.WriteLine("Failed to decrypt from secure storage."); _settings.Remove(formattedKey); @@ -121,7 +123,7 @@ namespace Bit.Android.Services var cipherString = App.Utilities.Crypto.AesCbcEncrypt(dataBytes, aesKey); _settings.AddOrUpdateValue(formattedKey, cipherString.EncryptedString); } - catch(Exception) + catch { Console.WriteLine("Failed to encrypt to secure storage."); //Utilities.SendCrashEmail(e); @@ -135,6 +137,8 @@ namespace Bit.Android.Services return; } + ClearSettings(); + var end = Calendar.Instance; end.Add(CalendarField.Year, 99); @@ -222,7 +226,7 @@ namespace Bit.Android.Services return new App.Models.SymmetricCryptoKey(key); } } - catch(Exception) + catch { Console.WriteLine("Cannot get AesKey."); _keyStore.DeleteEntry(KeyAlias); @@ -336,5 +340,27 @@ namespace Bit.Android.Services _settings.Remove(formattedKeyV1); } } + + private void ClearSettings(string prefix = SettingsPrefix) + { + using(var sharedPreferences = PreferenceManager.GetDefaultSharedPreferences(Application.Context)) + using(var sharedPreferencesEditor = sharedPreferences.Edit()) + { + var removed = false; + foreach(var pref in sharedPreferences.All) + { + if(pref.Key.StartsWith(prefix)) + { + removed = true; + sharedPreferencesEditor.Remove(pref.Key); + } + } + + if(removed) + { + sharedPreferencesEditor.Commit(); + } + } + } } } \ No newline at end of file