63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
using Bit.Core.Enums;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace Bit.App.Migration.Models
|
|
{
|
|
public class SymmetricCryptoKey
|
|
{
|
|
public SymmetricCryptoKey(byte[] rawBytes, EncryptionType? encType = null)
|
|
{
|
|
if(rawBytes == null || rawBytes.Length == 0)
|
|
{
|
|
throw new Exception("Must provide keyBytes.");
|
|
}
|
|
|
|
if(encType == null)
|
|
{
|
|
if(rawBytes.Length == 32)
|
|
{
|
|
encType = EncryptionType.AesCbc256_B64;
|
|
}
|
|
else if(rawBytes.Length == 64)
|
|
{
|
|
encType = EncryptionType.AesCbc256_HmacSha256_B64;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Unable to determine encType.");
|
|
}
|
|
}
|
|
|
|
EncryptionType = encType.Value;
|
|
Key = rawBytes;
|
|
|
|
if(EncryptionType == EncryptionType.AesCbc256_B64 && Key.Length == 32)
|
|
{
|
|
EncKey = Key;
|
|
MacKey = null;
|
|
}
|
|
else if(EncryptionType == EncryptionType.AesCbc128_HmacSha256_B64 && Key.Length == 32)
|
|
{
|
|
EncKey = Key.Take(16).ToArray();
|
|
MacKey = Key.Skip(16).Take(16).ToArray();
|
|
}
|
|
else if(EncryptionType == EncryptionType.AesCbc256_HmacSha256_B64 && Key.Length == 64)
|
|
{
|
|
EncKey = Key.Take(32).ToArray();
|
|
MacKey = Key.Skip(32).Take(32).ToArray();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Unsupported encType/key length.");
|
|
}
|
|
}
|
|
|
|
public byte[] Key { get; set; }
|
|
public string B64Key => Convert.ToBase64String(Key);
|
|
public byte[] EncKey { get; set; }
|
|
public byte[] MacKey { get; set; }
|
|
public EncryptionType EncryptionType { get; set; }
|
|
}
|
|
}
|