mirror of
https://github.com/bitwarden/mobile
synced 2025-12-20 02:03:49 +00:00
* PM-115 Added new cipher key and encryption/decryption mechanisms on cipher * PM-115 fix format * PM-115 removed ForceKeyRotation from new cipher encryption model given that another approach will be taken * [PM-1690] Added minimum server version restriction to cipher key encryption (#2463) * PM-1690 added minimum server version restriction to cipher key encryption and also change the force key rotation flag * PM-1690 Updated min server version for new cipher encryption key and fixed configService registration * PM-1690 removed forcekeyrotation * PM-115 Temporarily Changed cipher key new encryption config to help testing (this change should be reseted eventually) * PM-2456 Fix attachment encryption on new cipher item encryption model (#2556) * PM-2531 Fix new cipher encryption on adding attachments on ciphers with no item level key (#2559) * PM-115 Changed temporarily cipher key encryption min server version to 2023.6.0 to test * PM-115 Reseted cipher key encryption minimum server version to 2023.5.0 and disable new cipher key on local cipher creation * Added Key value to the cipher export model (#2628) * Update Constants.cs Updated minimum encryption server version to 2023.9.0 so QA can test its behavior * PM-115 Fix file format * PM-115 Changed new encryption off and minimum new encryption server version to 2023.8.0 for testing purposes * PM-115 Changed CIpher key encryption minimum server version to 2023.9.0 * PM-3737 Remove suffix on client version sent to server (#2779) * PM-115 QA testing server min version and enable new cipher key encryption * PM-115 Disable new cipher encryption creation and change minimum server encryption version to 2023.9.1 --------- Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>
112 lines
3.1 KiB
C#
112 lines
3.1 KiB
C#
using System;
|
|
using Bit.Core.Enums;
|
|
|
|
namespace Bit.Core.Models.Domain
|
|
{
|
|
public class SymmetricCryptoKey
|
|
{
|
|
public SymmetricCryptoKey(byte[] key, EncryptionType? encType = null)
|
|
{
|
|
if (key == null)
|
|
{
|
|
throw new Exception("Must provide key.");
|
|
}
|
|
|
|
if (encType == null)
|
|
{
|
|
if (key.Length == 32)
|
|
{
|
|
encType = EncryptionType.AesCbc256_B64;
|
|
}
|
|
else if (key.Length == 64)
|
|
{
|
|
encType = EncryptionType.AesCbc256_HmacSha256_B64;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Unable to determine encType.");
|
|
}
|
|
}
|
|
|
|
Key = key;
|
|
EncType = encType.Value;
|
|
|
|
if (EncType == EncryptionType.AesCbc256_B64 && Key.Length == 32)
|
|
{
|
|
EncKey = Key;
|
|
MacKey = null;
|
|
}
|
|
else if (EncType == EncryptionType.AesCbc128_HmacSha256_B64 && Key.Length == 32)
|
|
{
|
|
EncKey = new ArraySegment<byte>(Key, 0, 16).ToArray();
|
|
MacKey = new ArraySegment<byte>(Key, 16, 16).ToArray();
|
|
}
|
|
else if (EncType == EncryptionType.AesCbc256_HmacSha256_B64 && Key.Length == 64)
|
|
{
|
|
EncKey = new ArraySegment<byte>(Key, 0, 32).ToArray();
|
|
MacKey = new ArraySegment<byte>(Key, 32, 32).ToArray();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Unsupported encType/key length.");
|
|
}
|
|
|
|
if (Key != null)
|
|
{
|
|
KeyB64 = Convert.ToBase64String(Key);
|
|
}
|
|
if (EncKey != null)
|
|
{
|
|
EncKeyB64 = Convert.ToBase64String(EncKey);
|
|
}
|
|
if (MacKey != null)
|
|
{
|
|
MacKeyB64 = Convert.ToBase64String(MacKey);
|
|
}
|
|
}
|
|
|
|
public byte[] Key { get; set; }
|
|
public byte[] EncKey { get; set; }
|
|
public byte[] MacKey { get; set; }
|
|
public EncryptionType EncType { get; set; }
|
|
public string KeyB64 { get; set; }
|
|
public string EncKeyB64 { get; set; }
|
|
public string MacKeyB64 { get; set; }
|
|
}
|
|
|
|
public class UserKey : SymmetricCryptoKey
|
|
{
|
|
public UserKey(byte[] key, EncryptionType? encType = null)
|
|
: base(key, encType)
|
|
{ }
|
|
}
|
|
|
|
public class MasterKey : SymmetricCryptoKey
|
|
{
|
|
public MasterKey(byte[] key, EncryptionType? encType = null)
|
|
: base(key, encType)
|
|
{ }
|
|
}
|
|
|
|
public class PinKey : SymmetricCryptoKey
|
|
{
|
|
public PinKey(byte[] key, EncryptionType? encType = null)
|
|
: base(key, encType)
|
|
{ }
|
|
}
|
|
|
|
public class OrgKey : SymmetricCryptoKey
|
|
{
|
|
public OrgKey(byte[] key, EncryptionType? encType = null)
|
|
: base(key, encType)
|
|
{ }
|
|
}
|
|
|
|
public class CipherKey : SymmetricCryptoKey
|
|
{
|
|
public CipherKey(byte[] key, EncryptionType? encType = null)
|
|
: base(key, encType)
|
|
{ }
|
|
}
|
|
}
|