mirror of
https://github.com/bitwarden/mobile
synced 2025-12-14 15:23:35 +00:00
[PM-2713] replace generic with inherited class
This commit is contained in:
@@ -25,7 +25,7 @@ namespace Bit.Core.Abstractions
|
|||||||
Task ClearMasterKeyAsync(string userId = null);
|
Task ClearMasterKeyAsync(string userId = null);
|
||||||
Task<Tuple<UserKey, EncString>> EncryptUserKeyWithMasterKeyAsync(MasterKey masterKey);
|
Task<Tuple<UserKey, EncString>> EncryptUserKeyWithMasterKeyAsync(MasterKey masterKey);
|
||||||
Task<UserKey> DecryptUserKeyWithMasterKeyAsync(MasterKey masterKey, EncString encUserKey = null, string userId = null);
|
Task<UserKey> DecryptUserKeyWithMasterKeyAsync(MasterKey masterKey, EncString encUserKey = null, string userId = null);
|
||||||
Task<Tuple<SymmetricCryptoKey, EncString>> MakeDataEncKeyAsync<TKey>(TKey key) where TKey : SymmetricCryptoKey;
|
Task<Tuple<SymmetricCryptoKey, EncString>> MakeDataEncKeyAsync(SymmetricCryptoKey key);
|
||||||
Task<string> HashMasterKeyAsync(string password, MasterKey key, HashPurpose hashPurpose = HashPurpose.ServerAuthorization);
|
Task<string> HashMasterKeyAsync(string password, MasterKey key, HashPurpose hashPurpose = HashPurpose.ServerAuthorization);
|
||||||
Task SetMasterKeyHashAsync(string keyHash);
|
Task SetMasterKeyHashAsync(string keyHash);
|
||||||
Task<string> GetMasterKeyHashAsync();
|
Task<string> GetMasterKeyHashAsync();
|
||||||
|
|||||||
@@ -49,14 +49,6 @@ namespace Bit.Core.Abstractions
|
|||||||
Task<EncString> GetPinKeyEncryptedUserKeyEphemeralAsync(string userId = null);
|
Task<EncString> GetPinKeyEncryptedUserKeyEphemeralAsync(string userId = null);
|
||||||
Task SetPinKeyEncryptedUserKeyEphemeralAsync(EncString value, string userId = null);
|
Task SetPinKeyEncryptedUserKeyEphemeralAsync(EncString value, string userId = null);
|
||||||
Task SetProtectedPinAsync(string value, string userId = null);
|
Task SetProtectedPinAsync(string value, string userId = null);
|
||||||
[Obsolete("Use GetUserKeyPinAsync instead, left for migration purposes")]
|
|
||||||
Task<string> GetPinProtectedAsync(string userId = null);
|
|
||||||
[Obsolete("Use SetUserKeyPinAsync instead")]
|
|
||||||
Task SetPinProtectedAsync(string value, string userId = null);
|
|
||||||
[Obsolete("Use GetUserKeyPinEphemeralAsync instead, left for migration purposes")]
|
|
||||||
Task<EncString> GetPinProtectedKeyAsync(string userId = null);
|
|
||||||
[Obsolete("Use SetUserKeyPinEphemeralAsync instead")]
|
|
||||||
Task SetPinProtectedKeyAsync(EncString value, string userId = null);
|
|
||||||
Task SetKdfConfigurationAsync(KdfConfig config, string userId = null);
|
Task SetKdfConfigurationAsync(KdfConfig config, string userId = null);
|
||||||
Task<string> GetKeyHashAsync(string userId = null);
|
Task<string> GetKeyHashAsync(string userId = null);
|
||||||
Task SetKeyHashAsync(string value, string userId = null);
|
Task SetKeyHashAsync(string value, string userId = null);
|
||||||
@@ -184,17 +176,21 @@ namespace Bit.Core.Abstractions
|
|||||||
void SetLocale(string locale);
|
void SetLocale(string locale);
|
||||||
ConfigResponse GetConfigs();
|
ConfigResponse GetConfigs();
|
||||||
void SetConfigs(ConfigResponse value);
|
void SetConfigs(ConfigResponse value);
|
||||||
[Obsolete("Use GetUserKeyMasterKey instead")]
|
[Obsolete("Use GetPinKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
|
Task<string> GetPinProtectedAsync(string userId = null);
|
||||||
|
[Obsolete("Use SetPinKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
|
Task SetPinProtectedAsync(string value, string userId = null);
|
||||||
|
[Obsolete("Use GetPinKeyEncryptedUserKeyEphemeralAsync instead, left for migration purposes")]
|
||||||
|
Task<EncString> GetPinProtectedKeyAsync(string userId = null);
|
||||||
|
[Obsolete("Use SetPinKeyEncryptedUserKeyEphemeralAsync instead, left for migration purposes")]
|
||||||
|
Task SetPinProtectedKeyAsync(EncString value, string userId = null);
|
||||||
|
[Obsolete("Use GetMasterKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
Task<string> GetEncKeyEncryptedAsync(string userId = null);
|
Task<string> GetEncKeyEncryptedAsync(string userId = null);
|
||||||
[Obsolete("Use SetUserKeyMasterKey instead")]
|
[Obsolete("Use SetMasterKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
Task SetEncKeyEncryptedAsync(string value, string userId = null);
|
Task SetEncKeyEncryptedAsync(string value, string userId = null);
|
||||||
[Obsolete]
|
[Obsolete("Left for migration purposes")]
|
||||||
Task<string> GetKeyEncryptedAsync(string userId = null);
|
|
||||||
[Obsolete]
|
|
||||||
Task SetKeyEncryptedAsync(string value, string userId = null);
|
Task SetKeyEncryptedAsync(string value, string userId = null);
|
||||||
[Obsolete("Use GetMasterKey instead")]
|
[Obsolete("Use GetMasterKeyAsync instead, left for migration purposes")]
|
||||||
Task<SymmetricCryptoKey> GetKeyDecryptedAsync(string userId = null);
|
Task<SymmetricCryptoKey> GetKeyDecryptedAsync(string userId = null);
|
||||||
[Obsolete("Use GetMasterKey instead")]
|
|
||||||
Task SetKeyDecryptedAsync(SymmetricCryptoKey value, string userId = null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -797,17 +797,10 @@ namespace Bit.Core.Services
|
|||||||
|
|
||||||
private async Task<Tuple<SymmetricCryptoKey, EncString, SymmetricCryptoKey>> MakeAttachmentKeyAsync(string organizationId)
|
private async Task<Tuple<SymmetricCryptoKey, EncString, SymmetricCryptoKey>> MakeAttachmentKeyAsync(string organizationId)
|
||||||
{
|
{
|
||||||
SymmetricCryptoKey attachmentKey;
|
var encryptionKey = await _cryptoService.GetOrgKeyAsync(organizationId)
|
||||||
EncString protectedAttachmentKey;
|
?? (SymmetricCryptoKey)await _cryptoService.GetUserKeyWithLegacySupportAsync();
|
||||||
var orgKey = await _cryptoService.GetOrgKeyAsync(organizationId);
|
var (attachmentKey, protectedAttachmentKey) = await _cryptoService.MakeDataEncKeyAsync(encryptionKey);
|
||||||
if (orgKey != null)
|
return new Tuple<SymmetricCryptoKey, EncString, SymmetricCryptoKey>(attachmentKey, protectedAttachmentKey, encryptionKey);
|
||||||
{
|
|
||||||
(attachmentKey, protectedAttachmentKey) = await _cryptoService.MakeDataEncKeyAsync(orgKey);
|
|
||||||
return new Tuple<SymmetricCryptoKey, EncString, SymmetricCryptoKey>(attachmentKey, protectedAttachmentKey, orgKey);
|
|
||||||
}
|
|
||||||
var userKey = await _cryptoService.GetUserKeyWithLegacySupportAsync();
|
|
||||||
(attachmentKey, protectedAttachmentKey) = await _cryptoService.MakeDataEncKeyAsync(userKey);
|
|
||||||
return new Tuple<SymmetricCryptoKey, EncString, SymmetricCryptoKey>(attachmentKey, protectedAttachmentKey, userKey);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ShareAttachmentWithServerAsync(AttachmentView attachmentView, string cipherId,
|
private async Task ShareAttachmentWithServerAsync(AttachmentView attachmentView, string cipherId,
|
||||||
|
|||||||
@@ -184,16 +184,15 @@ namespace Bit.Core.Services
|
|||||||
return new UserKey(decUserKey);
|
return new UserKey(decUserKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Tuple<SymmetricCryptoKey, EncString>> MakeDataEncKeyAsync<TKey>(TKey key)
|
public async Task<Tuple<SymmetricCryptoKey, EncString>> MakeDataEncKeyAsync(SymmetricCryptoKey key)
|
||||||
where TKey : SymmetricCryptoKey
|
|
||||||
{
|
{
|
||||||
if (key is null)
|
if (key is null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(key));
|
throw new ArgumentNullException(nameof(key));
|
||||||
}
|
}
|
||||||
if (typeof(TKey) != typeof(UserKey) && typeof(TKey) != typeof(OrgKey))
|
if (!(key is UserKey) && !(key is OrgKey))
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"Data encryption keys must be of type UserKey or OrgKey. {typeof(TKey)} unsupported.");
|
throw new ArgumentException($"Data encryption keys must be of type UserKey or OrgKey. {key.GetType().FullName} unsupported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
var newSymKey = await _cryptoFunctionService.RandomBytesAsync(64);
|
var newSymKey = await _cryptoFunctionService.RandomBytesAsync(64);
|
||||||
@@ -970,6 +969,8 @@ namespace Bit.Core.Services
|
|||||||
var encPin = await EncryptAsync(pin, userKey);
|
var encPin = await EncryptAsync(pin, userKey);
|
||||||
await _stateService.SetProtectedPinAsync(encPin.EncryptedString);
|
await _stateService.SetProtectedPinAsync(encPin.EncryptedString);
|
||||||
}
|
}
|
||||||
|
// Clear old key
|
||||||
|
await _stateService.SetEncKeyEncryptedAsync(null);
|
||||||
return userKey;
|
return userKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -422,39 +422,6 @@ namespace Bit.Core.Services
|
|||||||
await SaveAccountAsync(account, reconciledOptions);
|
await SaveAccountAsync(account, reconciledOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete("Use GetPinKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
|
||||||
public async Task<string> GetPinProtectedAsync(string userId = null)
|
|
||||||
{
|
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
|
||||||
await GetDefaultStorageOptionsAsync());
|
|
||||||
return await GetValueAsync<string>(Constants.PinProtectedKey(reconciledOptions.UserId), reconciledOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use SetPinKeyEncryptedUserKeyAsync instead")]
|
|
||||||
public async Task SetPinProtectedAsync(string value, string userId = null)
|
|
||||||
{
|
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
|
||||||
await GetDefaultStorageOptionsAsync());
|
|
||||||
await SetValueAsync(Constants.PinProtectedKey(reconciledOptions.UserId), value, reconciledOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use GetPinKeyEncryptedUserKeyEphemeralAsync instead, left for migration purposes")]
|
|
||||||
public async Task<EncString> GetPinProtectedKeyAsync(string userId = null)
|
|
||||||
{
|
|
||||||
return (await GetAccountAsync(
|
|
||||||
ReconcileOptions(new StorageOptions { UserId = userId }, await GetDefaultInMemoryOptionsAsync())
|
|
||||||
))?.VolatileData?.PinProtectedKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete("Use SetPinKeyEncryptedUserKeyEphemeralAsync instead")]
|
|
||||||
public async Task SetPinProtectedKeyAsync(EncString value, string userId = null)
|
|
||||||
{
|
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
|
||||||
await GetDefaultInMemoryOptionsAsync());
|
|
||||||
var account = await GetAccountAsync(reconciledOptions);
|
|
||||||
account.VolatileData.PinProtectedKey = value;
|
|
||||||
await SaveAccountAsync(account, reconciledOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task SetKdfConfigurationAsync(KdfConfig config, string userId = null)
|
public async Task SetKdfConfigurationAsync(KdfConfig config, string userId = null)
|
||||||
{
|
{
|
||||||
@@ -1688,7 +1655,41 @@ namespace Bit.Core.Services
|
|||||||
shouldConnect ?? await GetShouldConnectToWatchAsync(), await GetDefaultStorageOptionsAsync());
|
shouldConnect ?? await GetShouldConnectToWatchAsync(), await GetDefaultStorageOptionsAsync());
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete("Use GetPinKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
|
public async Task<string> GetPinProtectedAsync(string userId = null)
|
||||||
|
{
|
||||||
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
|
await GetDefaultStorageOptionsAsync());
|
||||||
|
return await GetValueAsync<string>(Constants.PinProtectedKey(reconciledOptions.UserId), reconciledOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use SetPinKeyEncryptedUserKeyAsync instead")]
|
||||||
|
public async Task SetPinProtectedAsync(string value, string userId = null)
|
||||||
|
{
|
||||||
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
|
await GetDefaultStorageOptionsAsync());
|
||||||
|
await SetValueAsync(Constants.PinProtectedKey(reconciledOptions.UserId), value, reconciledOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use GetPinKeyEncryptedUserKeyEphemeralAsync instead, left for migration purposes")]
|
||||||
|
public async Task<EncString> GetPinProtectedKeyAsync(string userId = null)
|
||||||
|
{
|
||||||
|
return (await GetAccountAsync(
|
||||||
|
ReconcileOptions(new StorageOptions { UserId = userId }, await GetDefaultInMemoryOptionsAsync())
|
||||||
|
))?.VolatileData?.PinProtectedKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use SetPinKeyEncryptedUserKeyEphemeralAsync instead")]
|
||||||
|
public async Task SetPinProtectedKeyAsync(EncString value, string userId = null)
|
||||||
|
{
|
||||||
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
|
await GetDefaultInMemoryOptionsAsync());
|
||||||
|
var account = await GetAccountAsync(reconciledOptions);
|
||||||
|
account.VolatileData.PinProtectedKey = value;
|
||||||
|
await SaveAccountAsync(account, reconciledOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Obsolete("Use GetMasterKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
public async Task<string> GetEncKeyEncryptedAsync(string userId = null)
|
public async Task<string> GetEncKeyEncryptedAsync(string userId = null)
|
||||||
{
|
{
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
@@ -1696,7 +1697,7 @@ namespace Bit.Core.Services
|
|||||||
return await GetValueAsync<string>(Constants.EncKeyKey(reconciledOptions.UserId), reconciledOptions);
|
return await GetValueAsync<string>(Constants.EncKeyKey(reconciledOptions.UserId), reconciledOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete("Use SetMasterKeyEncryptedUserKeyAsync instead, left for migration purposes")]
|
||||||
public async Task SetEncKeyEncryptedAsync(string value, string userId)
|
public async Task SetEncKeyEncryptedAsync(string value, string userId)
|
||||||
{
|
{
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
@@ -1704,15 +1705,7 @@ namespace Bit.Core.Services
|
|||||||
await SetValueAsync(Constants.EncKeyKey(reconciledOptions.UserId), value, reconciledOptions);
|
await SetValueAsync(Constants.EncKeyKey(reconciledOptions.UserId), value, reconciledOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete("Left for migration purposes")]
|
||||||
public async Task<string> GetKeyEncryptedAsync(string userId = null)
|
|
||||||
{
|
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
|
||||||
await GetDefaultSecureStorageOptionsAsync());
|
|
||||||
return await GetValueAsync<string>(Constants.KeyKey(reconciledOptions.UserId), reconciledOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public async Task SetKeyEncryptedAsync(string value, string userId)
|
public async Task SetKeyEncryptedAsync(string value, string userId)
|
||||||
{
|
{
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
||||||
@@ -1720,22 +1713,12 @@ namespace Bit.Core.Services
|
|||||||
await SetValueAsync(Constants.KeyKey(reconciledOptions.UserId), value, reconciledOptions);
|
await SetValueAsync(Constants.KeyKey(reconciledOptions.UserId), value, reconciledOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
[Obsolete("Use GetMasterKeyAsync instead, left for migration purposes")]
|
||||||
public async Task<SymmetricCryptoKey> GetKeyDecryptedAsync(string userId = null)
|
public async Task<SymmetricCryptoKey> GetKeyDecryptedAsync(string userId = null)
|
||||||
{
|
{
|
||||||
return (await GetAccountAsync(
|
return (await GetAccountAsync(
|
||||||
ReconcileOptions(new StorageOptions { UserId = userId }, await GetDefaultInMemoryOptionsAsync())
|
ReconcileOptions(new StorageOptions { UserId = userId }, await GetDefaultInMemoryOptionsAsync())
|
||||||
))?.VolatileData?.Key;
|
))?.VolatileData?.Key;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public async Task SetKeyDecryptedAsync(SymmetricCryptoKey value, string userId = null)
|
|
||||||
{
|
|
||||||
var reconciledOptions = ReconcileOptions(new StorageOptions { UserId = userId },
|
|
||||||
await GetDefaultInMemoryOptionsAsync());
|
|
||||||
var account = await GetAccountAsync(reconciledOptions);
|
|
||||||
account.VolatileData.Key = value;
|
|
||||||
await SaveAccountAsync(account, reconciledOptions);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user