diff --git a/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs b/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs index b707fa8c8..6cf10853a 100644 --- a/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs +++ b/mRemoteNGTests/Security/AeadCryptographyProviderTests.cs @@ -81,5 +81,37 @@ namespace mRemoteNGTests.Security ActualValueDelegate decryptMethod = () => _cryptographyProvider.Decrypt(cipherText, "wrongKey".ConvertToSecureString()); Assert.That(decryptMethod, Throws.TypeOf()); } + + [TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))] + public void GetCipherEngine(BlockCipherEngines engine, BlockCipherModes mode) + { + var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode); + Assert.That(cryptoProvider.CipherEngine, Is.EqualTo(engine)); + } + + [TestCaseSource(typeof(TestCaseSources), nameof(TestCaseSources.AllEngineAndModeCombos))] + public void GetCipherMode(BlockCipherEngines engine, BlockCipherModes mode) + { + var cryptoProvider = new CryptographyProviderFactory().CreateAeadCryptographyProvider(engine, mode); + Assert.That(cryptoProvider.CipherMode, Is.EqualTo(mode)); + } + + + private class TestCaseSources + { + public static IEnumerable AllEngineAndModeCombos + { + get + { + foreach (var engine in Enum.GetValues(typeof(BlockCipherEngines))) + { + foreach (var mode in Enum.GetValues(typeof(BlockCipherModes))) + { + yield return new TestCaseData(engine, mode); + } + } + } + } + } } } \ No newline at end of file diff --git a/mRemoteV1/Security/ICryptographyProvider.cs b/mRemoteV1/Security/ICryptographyProvider.cs index 54eb8d193..6dfa3b6cb 100644 --- a/mRemoteV1/Security/ICryptographyProvider.cs +++ b/mRemoteV1/Security/ICryptographyProvider.cs @@ -6,7 +6,9 @@ namespace mRemoteNG.Security { int BlockSizeInBytes { get; } - string CipherEngine { get; } + BlockCipherEngines CipherEngine { get; } + + BlockCipherModes CipherMode { get; } string Encrypt(string plainText, SecureString encryptionKey); diff --git a/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs b/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs index abccacf5d..9e08c65fe 100644 --- a/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs +++ b/mRemoteV1/Security/SymmetricEncryption/AeadCryptographyProvider.cs @@ -38,7 +38,23 @@ namespace mRemoteNG.Security.SymmetricEncryption public int BlockSizeInBytes => _aeadBlockCipher.GetBlockSize(); - public string CipherEngine => _aeadBlockCipher.AlgorithmName; + public BlockCipherEngines CipherEngine + { + get + { + var cipherEngine = _aeadBlockCipher.AlgorithmName.Split('/')[0]; + return (BlockCipherEngines)Enum.Parse(typeof(BlockCipherEngines), cipherEngine); + } + } + + public BlockCipherModes CipherMode + { + get + { + var cipherMode = _aeadBlockCipher.AlgorithmName.Split('/')[1]; + return (BlockCipherModes)Enum.Parse(typeof(BlockCipherModes), cipherMode); + } + } public AeadCryptographyProvider() { diff --git a/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs b/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs index 8ebd40349..dee1203d5 100644 --- a/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs +++ b/mRemoteV1/Security/SymmetricEncryption/LegacyRijndaelCryptographyProvider.cs @@ -13,11 +13,12 @@ namespace mRemoteNG.Security.SymmetricEncryption { public int BlockSizeInBytes { get; } - public string CipherEngine { get; } + public BlockCipherEngines CipherEngine { get; } + + public BlockCipherModes CipherMode { get; } public LegacyRijndaelCryptographyProvider() { - CipherEngine = "Rijndael"; BlockSizeInBytes = 16; }