mirror of
https://github.com/bitwarden/android.git
synced 2024-12-25 02:18:27 +03:00
migrate and cleanup old key store
This commit is contained in:
parent
a028172cf6
commit
cb2a25ad46
2 changed files with 30 additions and 4 deletions
|
@ -189,7 +189,7 @@ namespace Bit.Android
|
||||||
// Services
|
// Services
|
||||||
.RegisterType<IDatabaseService, DatabaseService>(new ContainerControlledLifetimeManager())
|
.RegisterType<IDatabaseService, DatabaseService>(new ContainerControlledLifetimeManager())
|
||||||
.RegisterType<ISqlService, SqlService>(new ContainerControlledLifetimeManager())
|
.RegisterType<ISqlService, SqlService>(new ContainerControlledLifetimeManager())
|
||||||
.RegisterType<ISecureStorageService, KeyStoreStorageService>(new ContainerControlledLifetimeManager())
|
.RegisterType<ISecureStorageService, KeyStoreBackedStorageService>(new ContainerControlledLifetimeManager())
|
||||||
.RegisterType<ICryptoService, CryptoService>(new ContainerControlledLifetimeManager())
|
.RegisterType<ICryptoService, CryptoService>(new ContainerControlledLifetimeManager())
|
||||||
.RegisterType<IKeyDerivationService, BouncyCastleKeyDerivationService>(new ContainerControlledLifetimeManager())
|
.RegisterType<IKeyDerivationService, BouncyCastleKeyDerivationService>(new ContainerControlledLifetimeManager())
|
||||||
.RegisterType<IAuthService, AuthService>(new ContainerControlledLifetimeManager())
|
.RegisterType<IAuthService, AuthService>(new ContainerControlledLifetimeManager())
|
||||||
|
|
|
@ -29,9 +29,12 @@ namespace Bit.Android.Services
|
||||||
private readonly ISettings _settings;
|
private readonly ISettings _settings;
|
||||||
private readonly KeyStore _keyStore;
|
private readonly KeyStore _keyStore;
|
||||||
private readonly bool _oldAndroid = Build.VERSION.SdkInt < BuildVersionCodes.M;
|
private readonly bool _oldAndroid = Build.VERSION.SdkInt < BuildVersionCodes.M;
|
||||||
|
private readonly KeyStoreStorageService _oldKeyStorageService;
|
||||||
|
|
||||||
public KeyStoreBackedStorageService(ISettings settings)
|
public KeyStoreBackedStorageService(ISettings settings)
|
||||||
{
|
{
|
||||||
|
_oldKeyStorageService = new KeyStoreStorageService();
|
||||||
|
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
|
|
||||||
_keyStore = KeyStore.GetInstance(AndroidKeyStore);
|
_keyStore = KeyStore.GetInstance(AndroidKeyStore);
|
||||||
|
@ -48,22 +51,24 @@ namespace Bit.Android.Services
|
||||||
|
|
||||||
public void Delete(string key)
|
public void Delete(string key)
|
||||||
{
|
{
|
||||||
|
CleanupOldKeyStore(key);
|
||||||
_settings.Remove(string.Format(SettingsFormat, key));
|
_settings.Remove(string.Format(SettingsFormat, key));
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] Retrieve(string key)
|
public byte[] Retrieve(string key)
|
||||||
{
|
{
|
||||||
var cipherString = _settings.GetValueOrDefault<string>(string.Format(SettingsFormat, key));
|
if(!_settings.Contains(key))
|
||||||
if(cipherString == null)
|
|
||||||
{
|
{
|
||||||
return null;
|
return TryGetAndMigrateFromOldKeyStore(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cipherString = _settings.GetValueOrDefault<string>(string.Format(SettingsFormat, key));
|
||||||
return AesDecrypt(cipherString);
|
return AesDecrypt(cipherString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Store(string key, byte[] dataBytes)
|
public void Store(string key, byte[] dataBytes)
|
||||||
{
|
{
|
||||||
|
CleanupOldKeyStore(key);
|
||||||
if(dataBytes == null)
|
if(dataBytes == null)
|
||||||
{
|
{
|
||||||
_settings.Remove(key);
|
_settings.Remove(key);
|
||||||
|
@ -218,5 +223,26 @@ namespace Bit.Android.Services
|
||||||
|
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private byte[] TryGetAndMigrateFromOldKeyStore(string key)
|
||||||
|
{
|
||||||
|
if(_oldKeyStorageService.Contains(key))
|
||||||
|
{
|
||||||
|
var value = _oldKeyStorageService.Retrieve(key);
|
||||||
|
Store(key, value);
|
||||||
|
_oldKeyStorageService.Delete(key);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CleanupOldKeyStore(string key)
|
||||||
|
{
|
||||||
|
if(_oldKeyStorageService.Contains(key))
|
||||||
|
{
|
||||||
|
_oldKeyStorageService.Delete(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue